今天要在Nginx上設定禁止通過IP通路伺服器,隻能通過域名通路,這樣做是為了避免别人把未備案的域名解析到自己的伺服器IP而導緻伺服器被斷網,從網絡上搜到以下解決方案
我們在使用的時候會遇到很多的惡意IP攻擊,這個時候就要用到Nginx 禁止IP通路了。下面我們就先看看Nginx的預設虛拟主機在使用者通過IP通路,或者通過未設定的域名通路(比如有人把他自己的域名指向了你的ip)的時 候生效最關鍵的一點是,在server的設定裡面添加這一行:
listen 80 default;
後面的default參數表示這個是預設虛拟主機。
Nginx 禁止IP通路這個設定非常有用。
比如别人通過ip或者未知域名通路你的網站的時候,你希望禁止顯示任何有效内容,可以給他傳回500.目前國内很多機房都要求網站主關閉空主機頭,防止未備案的域名指向過來造成麻煩。就可以這樣設定:
簡單直接的修改方法:
修改nginx.conf 檔案
修改成
<code>server {</code>
<code>listen 80;</code>
<code>server_name www.xcn.cn; </code><code>#這裡是你自己指定的域名</code>
<code>...</code>
<code>}</code>
再在上個server後繼續添加一段:
就是為了通路預設網站直接傳回403
<code>server {</code>
<code>listen 80 default_server;</code>
<code>server_name _;</code>
<code>return</code> <code>403;</code>
<code>}</code>
這裡是在接收到ip通路或非指定域名通路時會傳回403錯誤
下面的一些比較詳細的介紹:
<code>server { </code>
<code> </code><code>listen 80 default; </code>
<code> </code><code>return</code> <code>500; </code>
<code> </code><code>}</code>
也可以把這些流量收集起來,導入到自己的網站,隻要做以下跳轉設定就可以:
<code> </code><code>rewrite ^(.*) http:</code><code>//www</code><code>.xcn.cn permanent; </code>
按照如上設定後,确實不能通過IP通路伺服器了,但是在應該用中出現當server_name後跟多個域名時,其中一個域名怎麼都無法通路,設定如下:
<code> </code><code>listen 80; </code>
<code> </code><code>server_name xcn.cn </code>
[warn]: conflicting server name “xcn.cn” on 0.0.0.0:80,
ignored
the configuration file /usr/local/Nginx/conf/
Nginx.conf syntax is ok
configuration file /usr/local/Nginx/conf/Nginx.
conf test is successful
最後通過在listen 80 default;後再加server_name _;解決,形式如下:
<code>#禁止IP通路 </code>
<code>server </code>
<code>{ </code>
<code>listen 80 default; </code>
<code>server_name _; </code>
<code>return</code> <code>500; </code>
或者
<code>listen 80 dufault; </code>
<code>rewrite ^(.*) http:</code><code>//www</code><code>.xcn.cn permanent; </code>
<code> </code><code>server { </code>
<code> </code><code>server_name _; </code>
這樣,通過xcn.cn就能通路伺服器了。
第一種情況:通路A站定向到B站
<code>server_name www.xcn.cn ; </code>
<code>rewrite ^(.*) http:</code><code>//www</code><code>.xcn.cn$1 permanent; </code>
第二種情況:不是通路A站的全部重定向到指定頁面
<code>server_name www.xcn.cn; </code>
<code>if</code> <code>($host != </code><code>'jb51.net'</code><code>) { </code>
<code>rewrite ^/(.*)$ http:</code><code>//www</code><code>.xcn.cn/$1 permanent; </code>
<code>} </code>
如果寫在第一個server段
使用IP通路時也将被重定向
本文轉自 baishuchao 51CTO部落格,原文連結:http://blog.51cto.com/baishuchao/1940183