私のプロキシサーバーはIP Aで実行され、これが人々が私のWebサービスにアクセスする方法です。nginx構成は、IP Bの仮想マシンにリダイレクトします。
IP Aのプロキシサーバーの場合、これは自分のサイトで利用可能です。
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;
}
}
これproxy_redirect
は、どのようにしてnginxを書き換えてHTTP POSTリクエストを転送するのですか?
書き換えのため、パブリックIPにヒットするものはすべて443にヒットします。内部的には、仮想マシンで80に転送しています。
しかし、設定をテストするために以下のようなPythonスクリプトを実行すると
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
私は取得してい405 Method Not Allowed
ます。nginxでは、内部サーバーにヒットするGET
と、元のヘッダーで実行したにもかかわらず、内部nginxがリクエストを取得していることがわかりましたPOST
(これはPythonスクリプトで表示されました)。
書き換えには問題があるようです。これを修正する方法はありますか?書き直しをコメントアウトしたとき、確かに80に達し、それが通過しました。書き換えは内部サーバーと通信できるため、書き換え自体に問題はありません。これは、ドロップされたばかりの書き換えだPOST
しGET
。
ありがとうございました!
(これは重要なブロッカーなので、これはNginxフォーラムでも尋ねられます...)
PUT
、POST
、DELETE
、GET
。私の以前のセットアップでは、群衆にサービスを提供するフロントにこの余分なプロキシがありませんでした。同じ内部サーバー(テストサーバー)で同じ構成を使用しました。それはうまくいきます。