在一般情況下,網站可以用域名和IP來訪問。本來如果網站可以通過IP直接訪問,這也沒什麼問題,但是會有一些隱患:
比如由於搜索引擎也會收錄你的IP地址的頁面,所以同一個頁面搜索引擎會重複收錄,造成頁面的權重不如單個收錄高。
如果使用IP可以訪問,那麼域名就有可能被惡意指向。
還記得曾經的 google.com.sb 事件嗎?google.com.sb 這個域名被惡意指向了百度,後來證實了 google.com.sb 這個域名爲第三者惡意指向的,並不是Google所爲。當然這只是個玩笑,但是如果被人惡意用別的域名解析到你的IP的話,那麼你的網站就能通過別人的域名來訪問了。
被惡意指向之後會發生什麼?假如那域名是不友善的域名,比如曾經指向非法網站,容易引發搜索引擎懲罰,連帶IP受到牽連。即使域名沒什麼問題,但流量也會被劫持到別的域名,從而遭到廣告聯盟的封殺……
那麼我們要如何解決這個問題呢?最直接的方法是讓用戶只能通過域名來訪問網站,而不能通過IP來直接訪問。這個可以修改Apache配置文件httpd.conf來實現。下面是一個Apache配置的例子:
<VirtualHost 222.73.*.*>
ServerName 222.73.*.*
ServerAlias 222.73.*.*
<Location />
Order Allow,Deny
Deny from all
</Location>
</VirtualHost>
#<VirtualHost *:80>
<VirtualHost 222.73.*.*>
ServerName www.域名.com
ServerAlias 域名.com *.域名.com
DocumentRoot /var/www/html/visabean
</VirtualHost>
第一部分代碼是實現拒絕直接通過 這個IP的任何訪問請求,這時如果你用 ip訪問,會提示拒絕訪問。
第二部分代碼就是允許通過 http://域名.com/ 這個域名訪問,主目錄指向 /var/www/html/ (這裏服務器OS是 CentOS)
第三部分代碼是允許不帶 www 的域名訪問,應該能和上面的合併一起寫吧。
通過上面的配置,便可以禁止使用IP來訪問網站了。
Nginx處理思路:nginx代理轉發的,可以通過添加到配置文件,if判斷,如果是客戶的綁定的域名,通過正常訪問,如果非客戶的域名,直接返回403:
if ( $host !~* 客戶需要綁定訪問的域名) {
return 403;
}