Apacheには次の構成があります。
RewriteEngine On
#APP
ProxyPass /abc/ http://remote.com/abc/
ProxyPassReverse /abc/ http://remote.com/abc/
#APP2
ProxyPass /efg/ http://remote.com/efg/
ProxyPassReverse /efg/ http://remote.com/efg/
Nginxで同じ構成をしようとしています。いくつかのリンクを読んだ後、これは私が持っているものです:
server {
listen 8081;
server_name localhost;
proxy_redirect http://localhost:8081/ http://remote.com/;
location ^~/abc/ {
proxy_set_header X-Forwarded-Host $Host;
proxy_set_header X-Forwarded-Server $Host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://remote.com/abc/;
}
location ^~/efg/ {
proxy_set_header X-Forwarded-Host $Host;
proxy_set_header X-Forwarded-Server $Host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://remote.com/efg/;
}
}
私はすでに次の構成を持っています:
server {
listen 8080;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location ^~/myAPP {
alias path/to/app;
index main.html;
}
location ^~/myAPP/images {
alias another/path/to/images
autoindex on;
}
}
ここでの考え方は、同一生成元ポリシーの問題を克服することです。メインページはlocalhost:8080にありますが、 http://remote.com/abc へのajax呼び出しが必要です。両方のドメインが私の管理下にあります。
上記の構成を使用すると、クロスオリジンのためにajax呼び出しがリモートサーバーに到達しないか、切断されます。
上記のソリューションはApacheで機能し、nginxでは機能しないため、構成の問題であると想定しています。
ここに暗黙の質問があると思います。2つのserver
宣言が必要ですか、それとも何らかの方法でそれらを1つにマージする必要がありますか?
編集:いくつかの情報を追加しました
EDIT2:すべてのproxy_pass構成をメインのserver
宣言に移動し、すべてのajax呼び出しをポート8080を経由するように変更しました。新しいエラーが発生しました:502 Connection reset by peer
。 Wiresharkは、パケットが http://remote.com に送信され、IPヘッダーのチェックサムが正しくないことを示しています。
動作していません特に詳細ではありませんが、問題が何であるかを推測してみましょう。次の構成を試すことをお勧めします。
server {
listen 8081;
server_name localhost;
location /abc/ {
proxy_pass http://remote.com/abc/;
proxy_http_version 1.1;
proxy_redirect http://localhost:8081/ http://remote.com/;
proxy_set_header Host $Host;
proxy_set_header X-Forwarded-Host $Host;
proxy_set_header X-Forwarded-Server $Host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /efg/ {
proxy_pass http://remote.com/efg/;
proxy_http_version 1.1;
proxy_redirect http://localhost:8081/ http://remote.com/;
proxy_set_header Host $Host;
proxy_set_header X-Forwarded-Host $Host;
proxy_set_header X-Forwarded-Server $Host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
私が実際に変更したのは、リモートホストが名前ベースの仮想ホストを使用する場合に備えて、ロケーションブロックの定義とHostヘッダーの追加です。他のすべての変更は表面的なものです。対応するすべてのディレクティブがまとめられ、適切に順序付けられると、読みやすさが向上します(これは、重要度の高い順に、またはその他の特性によって行われる場合があります)。
上記の構成が期待どおりに機能しない場合は、正確に機能しないものと、正確に失敗する情報を追加してください。
編集:リモートが名前ベースの仮想ホストを使用する場合に備えて、上記の構成にHostヘッダーも追加しました。