web-dev-qa-db-ja.com

nginx proxy_passでリクエストURLを保存する方法

Thin アプリサーバーを使用しようとしていて、1つの問題がありました。

Nginx プロキシproxy_pass http://my_app_upstream;を使用したThin(またはUnicorn)へのリクエストの場合、アプリケーションはnginx(http://my_app_upstream)によって送信された変更済みURLを受信します。

私が欲しいのは、アプリが大きく依存しているため、元のURLとクライアントからの元のリクエストを変更せずに渡すことです。

Nginx ' doc 言います:

未処理の形式でURIを送信する必要がある場合は、URI部分なしでproxy_passディレクティブを使用する必要があります。

しかし、関連するサンプルが実際にURIを使用しているため、それをどのように構成するか正確にはわかりません。

location  /some/path/ {
  proxy_pass   http://127.0.0.1;
}

クライアントから元のリクエストURLを保持するの方法を見つけてください。

65

私は思います - proxy_set_header ディレクティブが役立ちます:

location / {
    proxy_pass http://my_app_upstream;
    proxy_set_header Host $Host;
    # ...
}
108
yibe

私の場合、proxy_set_header Host $ Hostミスポートだけです。によって解決されました:



    location / {
     proxy_pass http://BACKENDIP/;
     include /etc/nginx/proxy.conf;
    }

そして、proxy.confで



    proxy_redirect off;
    proxy_set_header Host $Host:$server_port;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

10
GKislin

リクエストのabsoluteURIとヘッダーのHostをチョッピングせずに完全に転送するには:

server {
    listen 35005;

    location / {
        rewrite            ^(.*)$   "://$http_Host$uri$is_args$args";
        rewrite            ^(.*)$   "http$uri$is_args$args" break;
        proxy_set_header   Host     $Host;

        proxy_pass         https://deploy.org.local:35005;
    }
}

ここにあります: https://opensysnotes.wordpress.com/2016/11/17/nginx-proxy_pass-with-absolute-url/

3
Velkan

nginxは、ポートを渡す$ http_Host変数も提供します。ホストとポートの連結。

だからあなたはただする必要があります:

proxy_set_header Host $http_Host;
3
user6880399

提供しようとしている場所が何かによって変更された場合try_files、これはバックエンドのリクエストを保持します:

location / {
  proxy_pass http://127.0.0.1:8080$request_uri;
}
1
Walf

私のシナリオでは、nginx vhost構成のコードの下にこれを作成しました

server {
server_name dashboards.etilize.com;

location / {
    proxy_pass http://demo.etilize.com/dashboards/;
    proxy_set_header Host $http_Host;
}}

$ http_Hostは、要求されたものと同じヘッダーにURLを設定します

1
Mansur Ali

これを見つける他の人々への注意:nginxがURLを操作しないようにする解決策の中心は、Copy:proxy_passディレクティブの最後にあるスラッシュを削除することです。 http:// my_app_upstream vs http:// my_app_upstream / –ヒューゴ・ジョセフソン

私はこれをコメントで見つけましたが、本当に答えになるはずです。

0