天天看點

Nginx 禁止IP通路 隻允許域名通路

今天要在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

繼續閱讀