Máy chủ proxy của tôi chạy trên ip A và đây là cách mọi người truy cập dịch vụ web của tôi. Cấu hình nginx sẽ chuyển hướng đến một máy ảo trên ip B.
Đối với máy chủ proxy trên IP A, tôi có sẵn trong các trang web của mình
server {
listen 443;
ssl on;
ssl_certificate nginx.pem;
ssl_certificate_key nginx.key;
client_max_body_size 200M;
server_name localhost 127.0.0.1;
server_name_in_redirect off;
location / {
proxy_pass http://10.10.0.59:80;
proxy_redirect http://10.10.0.59:80/ /;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
rewrite ^(.*) https://$http_host$1 permanent;
server_name localhost 127.0.0.1;
server_name_in_redirect off;
location / {
proxy_pass http://10.10.0.59:80;
proxy_redirect http://10.10.0.59:80/ /;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Cái proxy_redirect
được lấy từ làm thế nào để tôi có được nginx để chuyển tiếp các yêu cầu POST HTTP thông qua viết lại?
Tất cả mọi thứ đạt IP công cộng sẽ đạt 443 vì viết lại. Trong nội bộ, chúng tôi đang chuyển tiếp đến 80 trên máy ảo.
Nhưng khi tôi chạy một kịch bản python như đoạn dưới đây để kiểm tra cấu hình của chúng tôi
import requests
data = {'username': '....', 'password': '.....'}
url = 'http://IP_A/api/service/signup'
res = requests.post(url, data=data, verify=False)
print res
print res.json
print res.status_code
print res.headers
Tôi đang nhận được một 405 Method Not Allowed
. Trong nginx chúng tôi thấy rằng khi nó chạm vào máy chủ nội bộ, nginx nội bộ đã nhận được GET
yêu cầu, mặc dù trong tiêu đề ban đầu chúng tôi đã thực hiện POST
(điều này được hiển thị trong tập lệnh Python).
Vì vậy, có vẻ như viết lại có vấn đề. Bất kỳ ý tưởng làm thế nào để khắc phục điều này? Khi tôi nhận xét viết lại, nó chắc chắn đạt 80, và nó đã đi qua. Vì viết lại đã có thể nói chuyện với máy chủ nội bộ của chúng tôi, do đó, việc tự viết lại không có vấn đề gì. Nó chỉ là viết lại giảm POST
tới GET
.
Cảm ơn bạn!
(Điều này cũng sẽ được hỏi trên diễn đàn Nginx vì đây là một công cụ chặn quan trọng ...)
PUT
,POST
,DELETE
,GET
. Trong thiết lập trước đây của tôi, tôi đã không có proxy bổ sung này ở phía trước phục vụ đám đông. Tôi có cùng cấu hình trên cùng một máy chủ nội bộ (máy chủ thử nghiệm của chúng tôi). Điều đó làm việc tốt.