Thay vào đó, hãy thử sử dụng hỗ trợ proxy ngược . Một location
phần ví dụ sẽ là:
location / {
proxy_pass http://localhost:8080;
proxy_redirect http://localhost:8080/ /;
proxy_read_timeout 60s;
# May not need or want to set Host. Should default to the above hostname.
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Ví dụ này sẽ chuyển qua tất cả các yêu cầu đến server
khối này đến máy chủ thứ hai đang chạy localhost:8080
. Điều này bảo tồn POST
và cũng nên bảo tồn các loại yêu cầu khác nếu nó trở thành một vấn đề.
Vấn đề là các chuyển hướng bên ngoài sẽ không bao giờ gửi lại POST
dữ liệu. Điều này được ghi vào thông số HTTP (kiểm tra phần 3xx). Bất kỳ khách hàng nào làm điều này là vi phạm thông số kỹ thuật.
Nếu mã trạng thái 301/302 được nhận để đáp ứng yêu cầu không phải là GET hoặc HEAD, tác nhân người dùng KHÔNG được tự động chuyển hướng yêu cầu trừ khi người dùng có thể xác nhận, vì điều này có thể thay đổi các điều kiện theo đó yêu cầu được đưa ra .
Tôi khá chắc chắn rằng hầu hết các trình duyệt thực hiện điều này bằng cách đơn giản buộc yêu cầu được chuyển hướng là một GET
yêu cầu. Về mặt lý thuyết, thông số kỹ thuật cho phép một trình duyệt sẽ hỏi người dùng có chuyển hướng POST
dữ liệu hay không, nhưng tôi không biết bất kỳ điều gì hiện đang làm.