nginx書き換えまたは内部リダイレクトサイクル


13

存在しないURLにアクセスしようとすると、nginx構成でリダイレクトサイクルを引き起こしている原因を突き止めようと、テーブルに頭を突っ込みます。構成は次のようになります。

server {
        listen       127.0.0.1:8080;
        server_name  .somedomain.com;
    root  /var/www/somedomain.com;

        access_log /var/log/nginx/somedomain.com-access.nginx.log;
    error_log  /var/log/nginx/somedomain.com-error.nginx.log debug;

        location ~* \.php.$ {
        # Proxy all requests with an URI ending with .php*
        # (includes PHP, PHP3, PHP4, PHP5...)
        include /etc/nginx/fastcgi.conf;
        }

        # all other files
        location / {
            root  /var/www/somedomain.com;
        try_files $uri $uri/ ;
        }

    error_page 404 /errors/404.html;
        location /errors/ {
                alias /var/www/errors/;
        }       

        #this loads custom logging configuration which disables favicon error logging
        include /etc/nginx/drop.conf;
}

このドメインは、いくつかのテスト目的のための単純な静的HTMLサイトです。fastcgi_intercept_errorsがオンになっているため、PHP-FPMが指定されたファイルを見つけることができないことに応答して、error_pageディレクティブが作動することを期待しています。httpブロックとnave error_pageで設定されていますが、内部リダイレクトのどこかでリクエストが失敗することを推測しています。どんな助けでも大歓迎です。


クライアントブラウザーはリダイレクトループを報告していますか、それともnginxですか?クライアントの場合、リダイレクト先はどこですか?
シェーンマッデン

両方が報告しています。クライアントは最終的に/errors//errors//errors//errors//errors/...404.htmlのURLで終わる
milosgajdos

nginxのログエントリはどのようなものですか?
シェーンマッデン

回答:


11

犯人は次のとおりです。 try_files $uri $uri/ ;

http://nginx.org/r/try_files(最後のパラメーターは戻りコードまたは内部リダイレクトへのURIであることに注意してください)

ファイルが見つからなかった場合、最後のパラメーターで指定されたURIへの内部リダイレクトが行われます。


ありがとう。Roots Trellis LEMPセットアップでこれらのエラーの1つが発生しました。WooCommerceデータのインポート後に発生しました。これまでになかった。これらの場合に何をお勧めしますか?パラメータを削除します$uri/か?ここでは、パラメータを参照してください:github.com/roots/trellis/blob/...
rhand

2

他の人が述べたように、これは犯人です。

    try_files $uri $uri/ ;

try_filesファイルが見つからない場合、の最後のパラメーターが場所を指す必要があるため、リダイレクトループが作成されます。次のようにを追加して解決しました=404

    try_files $uri $uri/ =404 ;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.