2016-03-18 14 views
0

URLを書き換えて別の仮想ホストに送信したいと思います。ここでNginxプロキシ前の書き換え

は私の最初のホストである場合:/ var/www /のエラーで

upstream splunk { 
    server 127.0.0.1:8000; 
} 

upstream test{ 
    server 127.0.0.1:88; 
} 
server { 
    listen 88; 
    root /var/www/errors/; 
    index index.html; 
    location ~* ^.+\.(jpeg|gif|png|jpg) 
    { 
     root /var/www/images/; 
    } 
} 

/:ここ 495.html 496.html 404.html

は私の代理です:

server { 
    listen 443 ssl spdy default_server; 
    error_page 404 @404; 
    error_page 495 @495; 
    error_page 495 @496; 
    location @404 
     { 
     rewrite^/404.html break; 
      proxy_pass http://test; 
     } 
    location @495 
     { 
     rewrite^/495.html break; 
      proxy_pass http://test; 
     } 
    location @496 
     { 
     rewrite^/496.html break; 
      proxy_pass http://test; 
     } 
    location/
    { 
     if ($ssl_client_verify = NONE) 
     { 
      return 496; 
     } 
     if ($ssl_client_verify != SUCCESS) { 
      return 495; 
     } 
    proxy_pass http://splunk; 
    proxy_set_header X-Remote-User   $username; 
    proxy_set_header X_Remote_User   $username; 
    proxy_set_header X-SSL-Client-Serial $ssl_client_serial; 
    proxy_set_header X-SSL-Client-Verify $ssl_client_verify; 
    proxy_set_header X-SSL-Client-S-DN  $ssl_client_s_dn; 
    proxy_set_header X-SSL-Client-S-DN-CN $username; 
    } 
} 

最初のサーバーは正常に動作しており、index.html、404.htmlなどに問題なくアクセスできます。 2番目のサーバーは、最初のサーバーの適切なページに送信するためにURIを書き換える必要があります。私の現在の設定では、私は400 Bad Requestを得続けます。

事前にどうもありがとう

EDIT:breakキーワードを使用すると、ページが正しくリダイレ​​クトされます。残念ながら、ターゲット・ページ(404.htmlのインスタンス)のイメージはロードされず、サーバーは400 Bad Requestを送信します。この仮想ホストに直接接続すると、ページが正しく表示されるので(HTMLが正しいので)、これは奇妙です。

EDIT2:第二バーチャルホストからのアクセスログ:

172.20.175.133 - - [19/Mar/2016:16:09:31 -0700] "GET/HTTP/1.1" 400 728 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36" 
172.20.175.133 - - [19/Mar/2016:16:09:32 -0700] "GET /logo.jpg HTTP/1.1" 400 728 "https://secondvhost.net/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36" 
172.20.175.133 - - [19/Mar/2016:16:09:32 -0700] "GET /images/logo.jpg HTTP/1.1" 400 728 "https://secondvhost.net/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36" 
172.20.175.133 - - [19/Mar/2016:16:09:32 -0700] "GET /var/www/images/logo.jpg HTTP/1.1" 400 728 "https://secondvhost.net/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36" 
172.20.175.133 - - [19/Mar/2016:16:09:32 -0700] "GET /favicon.ico HTTP/1.1" 400 728 "https://secondvhost.net/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36" 

最初バーチャルホスト(ランディングもの)からの400がありません。

+0

'err' doesnの有効なホスト名のように見えません。エラーログには詳細情報が含まれている可能性があります。 – Kyle

+0

私はそれをテストするために名前を変更しました。それはアップストリームサーバーの名前に過ぎません。この部分はうまくいきますが、現在正しく読み込まれていない写真だけが表示されます。 – Arkon

+0

ポート88でリッスンしていますが、アップストリームの設定で指定していないようです – Kyle

答えて

0

同じ場所にrewriteを処理するには、breakを使用する必要があります。

location @404 { 
    rewrite^/404.html break; 
    proxy_pass http://err; 
} 

詳細はthis documentを参照してください。

+0

ありがとう!実際、休憩ではるかに良く機能し、正しいページにアクセスできます。しかし、画像は正しく読み込まれていないし、nginxは400 Bad Requestを送信し続けます。最近のconfでメインポストを編集しています。何か考えているなら?もう一度ありがとう – Arkon

0

location ~* ^.+\.(jpeg|gif|png|jpg) { root /var/www/images/; }

location ~* \.(?:jpeg|gif|png|jpg)$ { root /var/www/images/; }

に正規表現が位置の端部($なく、先頭)に一致している必要があり変更してみ

+0

ありがとう、私はそれを変更しました。それはまだ同じです。最初のプロキシ(http:// splunk)から画像を読み込もうとしていると思うので、私は何も知らないfavicon.icoで400のエラーが表示されます。私は最初の投稿で両方の仮想ホストからのログを貼り付けました。私はHTMLでフルURLを使用すると、うまく動作します(http://10.10.10.10:88/logo.jpg)ので、これは確実にリソースにアクセスできないnginxです。 – Arkon

+0

エラーログには何が表示されますか? – Kyle

+0

奇妙なことに、ログには何も表示されず、400エラーがアクセスログに表示されます。エラーログファイルは空です。デバッグレベルは、どれが最も低いかを警告するように設定されています。 – Arkon