Tôi không phải là một chuyên gia lớn về quản trị nginx, tôi chỉ là một nhà phát triển. Tôi có hai chương trình phụ trợ đang chạy trong docker. Hãy để tôi đặt tên cho họ
- phụ trợ1:8080
- phụ trợ2:8081
Ngoài ra, tôi có Nginx để lộ cổng 443 với cài đặt chứng nhận letencrypt. Cấu hình Nginx của tôi là (biến env FQDN giống như example.com)
phụ trợ ngược dòng1 {
phụ trợ máy chủ1:8080;
}
backend2 ngược dòng {
phụ trợ máy chủ2:8081;
}
người phục vụ {
nghe 443 ssl;
server_name ${FQDN} www.${FQDN};
ssl_certificate /etc/letsencrypt/live/${FQDN}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/${FQDN}/privkey.pem;
ssl_session_cache được chia sẻ:SSL:1m;
ssl_session_timeout 5 phút;
ssl_ciphers CAO:!aNULL:!MD5;
bật ssl_prefer_server_ciphers;
nếu ($server_port = 80) { đặt $https_redirect 1; }
if ($host ~ '^www\.') { set $https_redirect 1; }
nếu ($https_redirect = 1) { return 301 https://${FQDN}$request_uri; }
vị trí /path1/ {
proxy_pass http://backend1/;
proxy_redirect ~^/(.*) $scheme://$http_host/path1/$1;
proxy_http_version 1.1;
proxy_pass_header Đặt cookie;
proxy_pass_header Cookie;
proxy_pass_header X-Forwarded-For;
proxy_set_header Nâng cấp $http_upgrade;
proxy_set_header Kết nối "nâng cấp";
proxy_set_header Máy chủ $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forward-Proto http;
proxy_set_header X-Nginx-Proxy true;
add_header X-Upstream $upstream_addr;
}
vị trí /path2/ {
proxy_pass http://backend2/;
proxy_redirect ~^/(.*) $scheme://$http_host/path2/$1;
proxy_http_version 1.1;
proxy_pass_header Đặt cookie;
proxy_pass_header Cookie;
proxy_pass_header X-Forwarded-For;
proxy_set_header Nâng cấp $http_upgrade;
proxy_set_header Kết nối "nâng cấp";
proxy_set_header Máy chủ $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forward-Proto http;
proxy_set_header X-Nginx-Proxy true;
add_header X-Upstream $upstream_addr;
}
}
Tôi muốn điều đó nếu tôi yêu cầu https://exapmle.com/path1/
sau đó Nginx nên đi đến http://backend1:8080/
và trả lại cho tôi phản hồi từ máy chủ đó. Vấn đề là backend1 (cũng như backend2) có thể phản hồi với 302 và chuyển hướng đến một số đường dẫn, vd. /đăng nhập
. Nginx chuyển hướng trình duyệt của tôi đến https://exapmle.com/login
nhưng tôi muốn nó chuyển hướng tôi đến https://exapmle.com/path1/login
Bạn có thể vui lòng giúp tôi và chỉ ra lỗi mà tôi đã mắc phải trong cấu hình của mình không. Tôi đã xem lại tất cả các câu hỏi tương tự trong SO và không tìm thấy giải pháp nào. Ngoài ra, tôi đã khám phá tài liệu Nginx và cũng không tìm thấy câu trả lời.
tôi có dòng proxy_redirect ~^/(.*) $scheme://$http_host/path1/$1;
và tôi cho rằng nó phải làm công việc tôi muốn.
BTW Tôi không thể chiếm/vị trí (tạo cấu hình cho đường dẫn gốc) trong cấu hình Nginx của mình vì nó được dành riêng cho một máy chủ phụ trợ khác.
Cảm ơn trước.