user icon

Nginxのリバースプロキシを設定していてlocationの優先順位で大ハマリ

社内システムを動かしていたApacheなサーバーが廃止されたのでNginxなサーバーに移行しました。

他の社内システムに相乗りして、URLに特定のサブディレクトリがついていたら動作を分けて背後のアプリケーション・サーバーにリバースプロキシで接続という構成です。

server {
    #省略

    #リバースプロキシの設定を追加
    location /hoge/ {
        proxy_pass http://127.0.0.1:3000/;
    }

    #省略

    location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
        access_log        off;
        log_not_found     off;
    }
}

Nginxに上記のようなリバースプロキシの設定を入れたところプログラムは動作しているのに画像、css、jsが読み込めずに大ハマリしました。

勘がいい人は「他は省略しているのに残してある箇所」があやしいのに気づいてしまったと思いますが、その通り、アクセスログにも何も出ない、なぜだ?なぜなんだぜ?と調べていたらいらっしゃいましたよ、画像、css、jsの処理を全部もっていってるお方が。

location、正規表現の方が未指定の前方検索より強いので location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ に処理を全部もっていかれていたってわけです。Nginx で location の判定方法と優先順位を調べるがとても参考になりました。ありがとうございます。

正規表現よりも優先順位が高い書き方で指定すると解決しました。

server {
    #省略

    #リバースプロキシの設定を追加
    location ^~ /hoge/ {
        proxy_pass http://127.0.0.1:3000/;
    }

    #省略

    location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
        access_log        off;
        log_not_found     off;
    }
}
Facebooktwitterlinkedintumblrmail

Tags:

名前
E-mail
URL
コメント

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)