Ngắn ngủi:
Tôi có hai máy chủ khác nhau đằng sau proxy nginx. Khi tôi cố gắng tiếp cận một trong số chúng, tôi sẽ luôn được chuyển hướng đến một cái khác nằm ở vị trí gốc. Điều này xảy ra MỘT LẦN. Nhật ký ngụ ý rằng Firefox/Chrome không gửi yêu cầu GET tới nginx khi tôi nhập địa chỉ lần đầu tiên. Khi tôi nhập URL lần thứ hai trong phiên Firefox/Chrome, tôi sẽ truy cập đúng máy chủ.
Lâu hơn:
Trong thiết lập của mình, tôi có hai máy chủ trong mạng docker nơi "https://server.app/" sẽ được chuyển đến "http://docker-server-1:80" và "https://server.app/client " phải được chuyển đến "http://docker-server-2:8090/client".
Cấu hình nginx của tôi trông như thế này
sự kiện {}
http {
người phục vụ {
server_name server.app;
nghe 443 ssl;
ssl_certificate /etc/nginx/fullchain.pem;
ssl_certificate_key /etc/nginx/privkey.pem;
error_log /etc/nginx/nginx.log gỡ lỗi;
vị trí / khách hàng {
proxy_pass http://docker-server-2:8090/client;
proxy_set_header Máy chủ lưu trữ $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
địa điểm / {
proxy_pass http://docker-server-1:80;
proxy_set_header Máy chủ lưu trữ $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
Khi tôi nhập "https://server.app/client", tôi sẽ đến đúng máy chủ khi a) Tôi mở trang này ở chế độ ẩn danh Firefox/Chrome, b) Tôi sử dụng một công cụ đơn giản và ngây thơ như curl/wget, c ) Tôi đã xóa bộ nhớ cache của Firefox/Chrome và họ chưa từng thấy "https://server.app" trước đó hoặc d) Tôi nối thêm index.html và nhập "https://server.app/client/index.html".
Khi tôi truy cập "https://server.app" và cố gắng mở "https://server.app/client" sau đó, trang "https://server.app" sẽ được tải thay thế MỘT LẦN cho mỗi phiên trình duyệt. Khi tôi nhập URL thư mục con lần thứ hai, tôi sẽ đến đúng máy chủ cho đến khi tôi đóng trình duyệt của mình và mở lại. Sau đó, tôi sẽ kết thúc MỘT LẦN một lần nữa tại "https://server.app" khi tôi nhập "https://server.app/client".
Điều kỳ lạ là, tôi không thấy bất kỳ yêu cầu GET nào trong nhật ký nginx khi nhập "https://server.app/client" với Firefox/Chrome không ẩn danh. Có vẻ như cả hai trình duyệt đều sử dụng phiên bản "https://server.app" được lưu trong bộ nhớ cache khi tôi nhập "https://server.app/client" nhưng tôi không thể hiểu tại sao. Đây là lý do tại sao tôi cho rằng trình duyệt là một phần của vấn đề nhưng làm cách nào tôi có thể yêu cầu họ không thực hiện chuyển hướng này?