イフブロ

イフブロ

インフラエンジニアのブログ

nginxのserver_nameはちゃんと設定したほうがいいね。というお話

今日の内容

nginxのserver_nameはちゃんと設定したほうがいいね。というお話。 めんどくさくて省いたり、default_server をつけちゃったりしてたけど、ちゃんと書くことに意義がある事を知った日でした。

背景

関与しているサービスで、エラーマネジメントサービスにエラーが上がった。意味不明な(想定しない)リクエストを受けてエラーを吐いていた。 request.url がサービスのFQDNではなく他社の仮想通貨取引所FQDNであった。 どうやら、アクセス元は私が扱うサービスのELBのIPに直接リクエストを送ってきている様だった。

cat /etc/hosts

xx.xxx.xxx.xx (ELBのIP)  hogehoge.com (適当なホスト名)

この状態で curl -X GET https://hogehoge.com/hoge/fuga -k をすると発生する。

nginx

nginxはポートでサービス分けてたので server_name は端折ってた。 その結果、上記の設定のときにAppサーバーまでリクエストが届いてしまっていた。 本来はnginxが自分のFQDNに合わない場合は捨てるべきだと思う。

で結局

server {
    listen       4447  default_server;
    server_name  "";
    add_header X-Robots-Tag noindex ;

    location ~ ^/elb/ { proxy_pass https://hoge; access_log  off;} #ELBはこっちに着信するのでELB用のロジックはここに書いた
    location / { return 200; }
}

server {
    listen       4447;
    server_name  watashino.hostname.com;

    ~~~ (略) ~~~

}

こんな風に同じポートのserverを追加し、 意図したFQDNじゃない場合に吸い込むcatch_all なserver を作ることになった。

感想

server_nameを設定して、関係ないアクセスを破棄するって大事だよなーって思って、 ちゃんと今度から書こうって思った。(小並感)