Nginx Reverse Proxy – Container Apache trên Ubuntu 22.04
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