1

私はサーバー管理者というよりはプログラマーなので、質問は些細なことに思えるかもしれませんが、nginx リバース プロキシで要求を適切なサーバーに転送することはできません... まず、ここに私の構成ファイルがあります (サイト内の-利用可能、サイト対応のシンボリックリンク付き)

upstream nodejs1 {
    server 127.0.0.1:3000;
}

upstream nodejs2 {
    server 127.0.0.1:3001;
}

server {
    server_name nodejs_proxy;
    listen 0.0.0.0:80;
    access_log /var/log/nginx/nodejs.log;
    location /otherlocation/ {
            rewrite /otherlocation/(.*) /$1 break;
            proxy_pass      http://nodejs1/;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header   X-NginX-Proxy true;
    }

    location / {
            proxy_pass      http://nodejs2/;
            proxy_redirect  off;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header   X-NginX-Proxy true;
    }
}

したがって、にアクセスしようとするとhttp://myserver.com/、すべて正常に動作し、ポート 3001 にリダイレクトされます。ただし、にアクセスしようとするとhttp://myserver.com/otherlocation/、ポート 3001 にもリダイレクトされます (したがって、404 が返されます)。

上記のスニペットに、アクセスしようとしたときに適切なサーバーにリダイレクトするために正しく行われていないものはありますhttp://myserver.com/otherlocation/か?

ありがとうございました

PS : myserver.com は、複数回 (開発、製造前、製造) 変更される傾向がある一時的なドメインであるため、すべての環境で機能するものを作成しようとしています。

4

1 に答える 1

3

まず、正しいサーバーがリクエストを処理していることを確認し、最も重要なことをデバッグする必要があります。httpブロック内のnginx.confファイル(サイト対応ではない)で、これを配置します

log_format mcombined '$server_name - $host - $remote_addr - $remote_user [$time_local]  '
                '"$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent"';

上記はnginxのデフォルトのログ形式$server_nameにとを追加したもの$hostです。役に立つと思われる任意の変数を追加できます。

次に、サイト対応の conf を次のログ形式を使用するように変更します。

access_log /var/log/nginx/nodejs.log mcombined;

しかし、本当の問題は次のとおりです。ブロック内/otherlocation/に、すべてを に書き換える書き換えルールがある/ため、リクエストが /otherlocation/ ブロックに来ると、それらは にリダイレクトされ/ます。

したがって、最終的なサイト対応の conf は次のようになります。

upstream nodejs1 {
  server 127.0.0.1:3000;
}

upstream nodejs2 {
  server 127.0.0.1:3001;
}

server {
  server_name nodejs_proxy;
  listen 0.0.0.0:80;
  access_log /var/log/nginx/nodejs.log mcombined;
  location ^~ /otherlocation/ {
        proxy_pass      http://nodejs1/;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header   X-NginX-Proxy true;
  }

  location / {
        proxy_pass      http://nodejs2/;
        proxy_redirect  off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header   X-NginX-Proxy true;
  }
}
于 2013-11-12T19:50:46.443 に答える