如何拒絕除所有子域(通配符解決方案)和主域與nginx之外的非法主機頭?在下面使用此代碼時,所有子域都停止工作。nginx域正則表達式包含通配符
if ($host !~* ^(domain.com|*.domain.com)$) {
return 444;
}
我的服務器名是:
server_name domain.com *.domain.com;
這又如何實現呢?
如何拒絕除所有子域(通配符解決方案)和主域與nginx之外的非法主機頭?在下面使用此代碼時,所有子域都停止工作。nginx域正則表達式包含通配符
if ($host !~* ^(domain.com|*.domain.com)$) {
return 444;
}
我的服務器名是:
server_name domain.com *.domain.com;
這又如何實現呢?
看看這對你的作品:
if ($host !~* ^(.+\.)?domain\.com$) {
return 444;
}
你需要躲避期,否則會被解釋爲「任何字符」。您還可以通過在「domain.com」之前匹配可選的子域前綴來簡化正則表達式。
完美運作。謝謝Trey! – Urdro
一個清潔的解決方案是創建一個單獨的(默認)爲「其他」的服務器名稱server
塊:
server {
server_name .domain.com; # shorter form for "domain.com *.domain.com"
... # your main config here
}
server {
listen *:80 default_server;
server_name "";
return 444;
}
'^'表示「串開始」。 '^ domain.com'不會匹配'foo.domain.com',因爲'domain.com'不在字符串的開頭。 '| * .'也不起作用。 '*'是「零個或多個前一個」,但是您沒有以前的'|'不是匹配的字符,它是「或」的正則表達式。 –