Nginx Reverse Proxy – Container Apache trên Ubuntu 22.04

Tác giả: 02/06/2023

Chào các bạn, hôm nay Nhân Hòa sẽ cùng các bạn tìm hiểu cách cấu hình Nginx làm proxy cho container apache2 trên Ubuntu 22.04.

Tình huống giả định ở đây được thể hiện đơn giản như hình vẽ

Bài LAB chỉ lấy apache2 là 1 ứng dụng running port 8080, các bạn có thể test với các ứng dụng khác.

Mình sẽ thao tác cấu hình lần lượt như sau:

  • Cài đặt Docker
  • Pull images httpd và cấu hình container listen 8080
  • Cấu hình nginx listen 80 và 443 với domain www.itvn.xyz

I – Cài đặt Docker trên Ubuntu 22.04

Các bạn có thể tham khảo tại đường dẫn sau:

II – Cài đặt container Apache2

Pull images mới nhất

docker pull httpd

Tạo 1 thư mục để mount dữ liệu

mkdir -p /web/www

Lấy file cấu hình của apache2 ra /web mà không run container để cấu hình

docker run --rm -v /web:/data httpd cp /usr/local/apache2/conf/httpd.conf /data
cd /web

Chúng ta đã lấy được file này ra bên ngoài, giờ sẽ chỉnh sửa như sau

vi httpd.conf

Dòng 52 sửa thành Listen 8080

Dòng 142 và 146 bỏ #

Dòng 265 và 266 sửa Document root của container website là /data, ở đây mình sẽ sử dụng bind mount, mount /web/www ở HOST vào /data của container

Sau đó lưu lại, tạo 1 file index đơn giản thể hiện nội dung ở /web/www

Bước cuối cùng khởi chạy container với images mới pull về, container này mình để tên h1

docker run -d --name h1 -h h1 -p 8080:8080 -v /web/www/:/data -v /web/httpd.conf:/usr/local/apache2/conf/httpd.conf httpd

Như vậy chúng ta đã có apache listen 8080, chạy với card bridge có IP 172.17.0.2/16

III – Cài đặt và cấu hình Nginx

apt update -y 

apt upgrade -y

reboot 

apt install nginx  -y

systemctl enable nginx

systemctl start nginx

unlink /etc/nginx/sites-enabled/default

Hoặc bạn có thể tham khảo hướng dẫn sau để có nginx lastest v1.24

Dưới đây mình đã có chứng chỉ ssl của website www.itvn.xyz , mình backup file cấu hình mặc định của nginx trước là /etc/nginx/conf.d/default.conf

mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bk
vi /etc/nginx/conf.d/default.conf

Thêm vào đoạn như sau

server {
listen 80;
listen [::]:80;

server_name itvn.xyz www.itvn.xyz;
return 301 https://$server_name$request_uri;

location / {
proxy_pass http://172.17.0.2:8080;
}
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

server_name itvn.xyz www.itvn.xyz;

ssl_certificate /etc/ssl/certs/itvn.xyz/public.crt;
ssl_certificate_key /etc/ssl/certs/itvn.xyz/private.key;

location / {
proxy_pass http://172.17.0.2:8080;
}
}

Bộ chứng chỉ của website mình để ở /etc/ssl/certs/itvn.xyz/ bao gồm private key và public key.

Cuối cùng kiểm tra và start Nginx

systemctl start nginx
systemctl enable nginx

Test request

Bạn có một ứng dụng khác, không phải apache các bạn có thể tham khảo hướng dẫn này để run website của bạn.

Hẹn gặp lại các bạn tại các bài viết sau tại wiki.nhanhoa.com

Trả lời