AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

Nginx では server_name *; でなんでも受けれるわけではないらしい

タイトルゥ!

Nginx にリクエストが来た時、どんなドメインも受け入れたい

Apache で言う所の <VirtualHost *:80> みたいにするやつ。 Nginx でも server_name *; と過去やっていたので、これで良いのだと思っていたけど、実は違うことに最近気付いた。

_ を使う

少なくとも今は server_name ディレクティブに * を使うのがダメらしく、 _ を使うことでなんでも受け入れる (catch all) ことができるらしい。

nginx.org

In catch-all server examples the strange name “_” can be seen:

 server {
     listen       80  default_server;
     server_name  _;
     return       444;
 }

There is nothing special about this name, it is just one of a myriad of invalid domain names which never intersect with any real name. Other invalid names like “--” and “!@#” may equally be used.

で、これなんで server_name *; が使えると思ってたんだろう? と考えてたけど答えが書いてあった。

nginx versions up to 0.6.25 supported the special name “*” which was erroneously interpreted to be a catch-all name.

0.6.25 までは * を使えた? らしい。 へぇー……だいぶ太古の知識でコンフィグをカジュアルに書いていたのだなあ、と反省している。