前段时间刚搭建好这个网站,一直没有关注一个问题,那就是IP地址也可以访问我的网站,今天就专门研究了一下nginx配置问题,争取把这个问题研究透彻。
1. nginx配置域名及禁止直接通过IP访问
先来看nginx的默认配置,ubuntu默认位置 /etc/nginx/sites-enabled 。
(注意:sites-enabled里的配置其实是软链接,链接到sites-available下的真实配置,这是nginx的一种最佳实践,希望我们在sites-available下修改配置,等修改好以后在链接到sites-enabled下,不过我这里没采纳这种最佳实践,直接在sites-enabled目录下增加配置,哈哈。)
1 2 3 4 5 6 7 8 9 10 11
| server { listen 80 default_server; listen [::]:80 default_server;
server_name _;
root /var/www/html;
index index.html index.htm index.nginx-debian.html; }
|
最简单的配置nginx的方式就是直接改这个default文件,加上自己的网站配置:
1 2 3 4 5 6 7 8 9 10 11
| server { listen 80 default_server; listen [::]:80 default_server;
server_name www.domain.com;
root /path/to/www.domain.com;
index index.html index.htm; }
|
不过,不推荐这种方式。如果这样配置,恶意用户可以用自己的域名指向我们的IP,蹭我们的流量,来养他的域名,非常讨厌。
我更推荐把这个配置复制一份,在复制的配置里修改网站信息。
1
| cp default domain-website
|
然后修改信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| server { listen 80; listen [::]:80;
server_name www.domain.com;
root /path/to/www.domain.com;
index index.php index.html index.htm;
location / { try_files $uri $uri/ /index.php?$query_string; }
location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.0-fpm.sock; } }
|
这样配置就很灵活了,方便我们禁止IP访问和别人把域名恶意指向我们的IP。
想要禁止IP访问的话,就修改default配置:
1 2 3 4 5 6 7 8
| server { listen 80 default_server; listen [::]:80 default_server;
server_name _;
return 500; }
|
这也同样可以阻止别人恶意把域名指向我们的服务器IP,蹭我们的流量。
2. 配置https
如果是配置了https,我们就增加一个default-ssl配置文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| server { listen 443 ssl default_server; listen [::]:443 ssl default_server;
ssl_certificate cert/www.domain.com.pem; ssl_certificate_key cert/www.domain.com.key;
server_name _;
return 500;
}
|
注意:一定要加上自己的SSL证书和密钥,不然会导致域名的https无法访问。
正常网站https配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| server { listen 443; listen [::]:443;
ssl on; ssl_certificate cert/www.domain.com.pem; ssl_certificate_key cert/www.domain.com.key; ssl_session_timeout 30m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_prefer_server_ciphers on;
server_name www.domain.com;
root /path/to/www.domain.com;
index index.php index.html index.htm;
location / { try_files $uri $uri/ /index.php?$query_string; }
location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.0-fpm.sock; } }
|
3. 如何解决别人域名恶意指向自己服务器IP的问题以及搜集流量
如果按照我上面的配置方法,那么就不怕别人把域名指向我们的IP了。要是在应用上述配置之前就已经有恶意域名指向我们IP了,怎么办呢,没问题,我们可以把这些域名重定向到我们自己的域名,相当于把这些流量都搜集起来,导入到自己的域名。
对default和default_ssl做如下修改:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| server { listen 80 default_server; listen [::]:80 default_server;
server_name _;
return 301 https://www.domain.com; //把IP和其他域名访问的流量永久重定向到我们的域名 }
server { listen 443 ssl default_server; listen [::]:443 ssl default_server;
ssl_certificate cert/www.domain.com.pem; ssl_certificate_key cert/www.domain.com.key;
server_name _;
return 500; return 301 https://www.domain.com; //把IP和其他域名访问的流量永久重定向到我们的域名 }
|
还可以把自己域名http重定向到https:
1 2 3 4 5 6 7 8
| server { listen 80; listen [::]:80;
server_name www.domain.com;
return 301 https://$server_name$request_uri; }
|
至此,就解决了被别人用域名恶意蹭流量的问题。

此文在本博客首发,并转载于以下平台:
今日头条: 使用nginx配置域名及禁止直接通过IP访问网站
博客园:使用nginx配置域名及禁止直接通过IP访问网站
–End–
本文标题:使用 nginx 配置域名及禁止直接通过 IP 访问网站
文章作者:郭大侠
发布时间:2020-05-13
最后更新:2025-03-26
原始链接:https://www.guozhenyi.com/post/2020/05/13/nginx-to-configure-prohibit-access-for-ip.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!