Có thể "cắm" các dịch vụ web khác nhau (tiếp xúc với các vùng chứa docker khác nhau) trong cùng một máy chủ nginx không?
Đây là một ví dụ đơn giản để có được ý tưởng chung:
người phục vụ {
nghe 80;
nghe [::]:80;
client_max_body_size 10M;
bộ ký tự utf-8;
server_name my.server.org;
access_log /var/log/nginx/reverse-access.log;
error_log /var/log/nginx/reverse-error.log;
địa điểm / {
bao gồm proxy_params;
proxy_pass http://127.0.0.1:8081/;
}
vị trí /tĩnh/ {
bao gồm proxy_params;
bao gồm /etc/nginx/mime.types;
bí danh /var/www/app/static/;
}
vị trí ^~ /app2/ {
bao gồm proxy_params;
proxy_pass http://127.0.0.1:8082;
}
vị trí ^~ /app3/ {
bao gồm proxy_params;
proxy_redirect tắt;
proxy_set_header Máy chủ $http_host;
proxy_pass http://127.0.0.1:8083;
}
}
ở đâu địa điểm /
là gốc của ứng dụng đầu tiên cùng với các tệp tĩnh của nó trong khối vị trí tiếp theo.
Ứng dụng đầu tiên này đang chạy tại http://my.server.org/.
Tôi muốn truy cập hai ứng dụng khác tại http://my.server.org/app2/ và http://my.server.org/app3/ trong khi vẫn giữ nguyên tên máy chủ my.server.org
.
Các ứng dụng này có liên quan đến ứng dụng chính, nhưng chúng hoàn toàn độc lập, tức là chúng được phục vụ từ các thành phần docker khác, với các cổng của chúng được hiển thị tương ứng ở 8082 và 8083.
Có thể đạt được nhiệm vụ đơn giản như vậy trong một người phục vụ
chặn?
Hiện tại, tôi nhận được 404 khi truy cập hai URL khác đó.
Về cơ bản, tôi muốn ánh xạ các cổng + URL đang hoạt động đó và tất cả các phần tử con của chúng tới các vị trí được đặt tên:
http://my.server.org:8081/... -> http://my.server.org/...
http://my.server.org:8082/... -> http://my.server.org/app2/...
http://my.server.org:8083/... -> http://my.server.org/app3/...
CHỈNH SỬA:
hoặc cái này:
vị trí /app3/ {
if ($http_referer ~ "^$scheme://$http_host/app3/") {
viết lại chuyển hướng ^/app3/(.*) $scheme://$http_host/app3/$1;
}
bao gồm proxy_params;
proxy_redirect tắt;
proxy_set_header Máy chủ $http_host;
proxy_pass http://127.0.0.1:8083;
}
hoặc cái này:
vị trí ~*/app3/(.*)$ {
bao gồm proxy_params;
proxy_redirect tắt;
proxy_set_header Máy chủ $http_host;
proxy_pass http://127.0.0.1:8083/$1;
}
đang "hoạt động" giống nhau, nhưng chưa hoàn hảo vì còn hai vấn đề:
- chỉ HTML thô được phục vụ (ví dụ: không có kiểu dáng: "502 bad gateway" trên các tệp css chẳng hạn)
- liên kết trong các trang trỏ đến, ví dụ:
http://my.server.org/subfeature/subitem
thay vì http://my.server.org/app3/subfeature/subitem
. Do đó, họ đang "thiếu" các /ứng dụng3
tiền tố và tôi không biết làm thế nào để thực sự thêm nó nếu nó không hiện diện ở nơi nó thực sự nên có.