server_name可為IP/domain/localhost/null等任何字符串(字符串server_name也可以用來匹配),注意各個 server 塊的順序。
1.如果只有一個server,server_name可以任意起(可以為IP/域名/任何字符串),則不論用什么訪問(IP/域名/字符串),不論server_name是否匹配,都匹配到此server;
2.有多個server,如果server_name可以匹配到任何一個server的server_name,則使用此server,否則匹配到第一個server塊,不論server_name是否匹配!
1、准確的server_name匹配,例如:
server { listen 80; server_name domain.com www.domain.com; ... }
2、以*通配符開始的字符串:
server { listen 80; server_name *.domain.com;
... }
3、以*通配符結束的字符串:
server { listen 80; server_name www.*; ... }
4、匹配正則表達式:
server { listen 80; server_name ~^(?.+)\.domain\.com$;
... }
nginx將按照1,2,3,4的順序對server name進行匹配,只有有一項匹配以后就會停止搜索,所以我們在使用這個指令的時候一定要分清楚它的匹配順序(類似於location指令)。