2016-09-16 49 views
0

Webアプリケーションをnginxで負荷分散しようとしています。私のWebアプリケーションがサブパスでサービスを呼び出しても問題ありません。NGINXの応答がありません。上流に接続しています。

例えばそれは

http://example.com/luna/ 

に動作しますが、

http://example.com/luna/sales 

のために私のnginx.conf

user nobody; 
worker_processes auto; 

events { 
    worker_connections 1024; 
} 

http { 
    include  mime.types; 
    default_type application/octet-stream; 

    sendfile  on; 
    keepalive_timeout 65; 

    map $http_upgrade $connection_upgrade { 
     default upgrade; 
     '' close; 
    } 

    upstream lunaups { 
     server myhostserver1.com:8080; 
     server myhostserver2.com:8080; 
    } 


    server { 
     listen  80; 
     server_name example.com; 

     proxy_pass_header Server; 

     location =/{ 
      rewrite^http://example.com/luna redirect; 
     } 

     location /luna { 
      rewrite ^$/luna/(.*)/^ /$1 redirect; 
      proxy_pass http://lunaups; 
      #add_header X-Upstream $upstream_addr; 
     } 

     error_page 500 502 503 504 /50x.html; 
     location = /50x.html { 
      root html; 
     } 
    } 
} 

私のWebアプリケーションが/ルナ/販売などの追加のサブパスを持つサービスを呼び出していません応答を返さない。私はここで何が欠けていますか?

アップストリームから自分のホストサーバーの1つを削除すると動作しますが、アップストリームに2番目のホストを追加すると応答が返されません。

書き換えルールが間違っているか、設定全体が間違っていますか?

+0

'^ $/luna /(.*)/^'とは何ですか?それは偽の '$'と偽の '^'を持っているようです。 –

+0

こんにちはリチャード、私はnginxに新しいです、私は自分自身を構築したドキュメントを見て、ただ試行錯誤をして、可能であれば修正してください。 –

+0

上流から送信する前に、URIから '/ luna'プリフィックスを打ち消すことになっていますか? –

答えて

0

rewriteディレクティブには4つの接尾辞があり、それぞれ固有の用途があります。詳細は、this documentを参照してください。

あなたはURI /がブラウザにURLを変更せずににマッピングすることにしたい場合は、rewrite ... lastと内部の書き換えを使用します。たとえば:

location =/{ 
    rewrite^/luna last; 
} 

location /lunaブロックで、あなたはrewrite ... break必要で、(場所のブロックを残さずに)proxy_pass声明に送信する前にURIを書き換える必要があります。例えば:

location /luna { 
    rewrite ^/luna(/.*)$ $1 break; 
    rewrite ^/break; 
    proxy_pass http://lunaups; 
} 

最初の書き換えは、サブ経路を有する任意のURIを変更し、第二の書き換えは、サブパスなしURIを処理します。

正規表現のthis useful resourceを参照してください。

+0

こんにちはRichard、nginxのアクセスログで/ luna/salesにトリガーされたリクエストを見ることができましたが、依然としてクライアントのレスポンスが表示されません.Httpステータスコードはnginxログで200 OKです。 Chromeのデベロッパーツールの[ネットワーク]タブには[応答なし]と表示されます。 –

関連する問題