Mục tiêu của tôi là có 2 container docker:
- vùng chứa nginx (dựa trên nginx: mới nhất) để hoạt động như proxy ngược
- vùng chứa với trang web tĩnh (dựa trên nginx:alpine)
Sau này tôi sẽ thêm 1+ dịch vụ phụ trợ lõi .net (hiện tại không quan trọng). Hiện tại khi tôi cố gắng truy cập máy chủ web của mình bằng địa chỉ IP công cộng, tôi nhận được 502 Bad gateway. Đây là cấu hình hiện tại của tôi:
docker-compose.yaml
phiên bản: '3'
dịch vụ:
proxy ngược:
hình ảnh: nginx: mới nhất
container_name: reverse_proxy
phụ thuộc:
- trang web tĩnh
khối lượng:
- ./reverse_proxy/nginx.conf:/etc/nginx/nginx.conf
cổng:
- 80:80
trang web tĩnh:
hình ảnh: sm-static-website
xây dựng:
bối cảnh: ./trang web
container_name: sm_static_website
cổng:
- "8080:80"
nginx.conf cho proxy ngược:
worker_processes tự động;
bao gồm /etc/nginx/modules-enabled/*.conf;
sự kiện {
công_nhân kết_nối 1024 ;
}
http {
người phục vụ {
nghe 80 default_server;
lắng nghe [::]:80 default_server;
tên_máy chủ x.x.x.x; # my_public_ip
địa điểm / {
proxy_pass http://sm_static_website:8080;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
}
Dockerfile cho trang web tĩnh:
TỪ nginx:alpine
CÔNG VIỆC/html
SAO CHÉP . /var/www/html
TIẾP XÚC 8080
Từ vùng chứa trang web của tôi, tôi có thể thấy rằng nginx đang chạy/nghe trên 80:
netstat -tulpn | grep NGHE
tcp 0 0 127.0.0.11:41389 0.0.0.0:* NGHE -
tcp 0 0 0.0.0.0:80 0.0.0.0:* NGHE 1/nginx: master pro
tcp 0 0 :::80 :::* LISTE 1/nginx: master pro
Từ máy chủ của tôi, tôi có thể thấy rằng cả bộ chứa remote_proxy và trang web đều đang nghe 80/8080 tương ứng:
netstat -tulpn | grep NGHE
tcp 0 0 0.0.0.0:80 0.0.0.0:* NGHE 13936/docker-proxy
tcp 0 0 0.0.0.0:8080 0.0.0.0:* NGHE 13797/docker-proxy
tcp6 0 0 :::80 :::* NGHE 13942/docker-proxy
tcp6 0 0 :::8080 :::* NGHE 13804/docker-proxy
ps -aux trên máy chủ trả về:
gốc 13936 0,0 0,0 1075140 3580 ? Sl 00:24 0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 80 -container-ip 172.18.0.3 -container-port 80
gốc 13797 0,0 0,0 1148872 3624 ? Sl 00:24 0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8080 -container-ip 172.18.0.2 -container-port 80
Nhật ký của vùng chứa trang web không hiển thị lỗi, các quy trình worker đang chạy. Tuy nhiên, nhật ký proxy ngược cho thấy:
2022/05/20 01:20:29 [lỗi] 31#31: *1 connect() fail (111: Kết nối bị từ chối) trong khi kết nối với thượng nguồn, máy khách: x.x.x.x, máy chủ: x.x.x.x, yêu cầu: "GET / HTTP/1.1 ", ngược dòng: "http://172.19.0.2:8080/", máy chủ lưu trữ: "x.x.x.x"
Bất cứ ý tưởng những gì tôi đang làm sai? Nếu tôi xóa khối lượng: dòng khỏi docker-compose.yml, thì tôi sẽ nhận được trang nginx mặc định từ bộ chứa proxy ngược. Điều này cho thấy rằng nó đang lắng nghe đúng cách, chấp nhận yêu cầu nhưng không chuyển hướng nó đến vùng chứa trang web.