Nginx空主机名设置

web服务器如果没有设置空主机名的,就造成在浏览器中直接输入IP地址,而不是输入绑定的域名就能直接访问服务器的问题,很容易受到域名恶意解析的攻击。


若未备案的域名,绑定到了我们的服务器ip,而监管机构找不到恶意绑定者,将会封锁服务器ip,造成我们的网站不可用。
设置空主机名的规则,能够禁止IP直接访问,防止域名恶意解析,保护自己的web服务。

Nginx设置

在nginx的配置中加入空主机设置,示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 空主机设置
server{
listen 80 default;
server_name _;
return 500;
}
# 允许自己的域名访问IP
server{
listen 80 ;
server_name www.test.com;
# 其它服务器的配置
# 、、、、、、、
}

设置之后重启nginx,然后可以在浏览器中进行测试,如果输入IP地址无法访问服务,而输入域名可以访问,就表示配置正确。
参考文章:
谈nginx配置文件,设置空主机头 – markdream
https://bbs.vpser.net/thread-1794-1-1.html

配置nginx 443的问题

由于配置了空主机名,nginx出现了以下问题

no "ssl_certificate" is defined in server listening on SSL port while SSL handshaking, client: 121.69.56.190, server: 0.0.0.0:443,

解决方法:将server下面的https配置移到http下面

1
2
3
4
5
6
ssl_session_timeout 5m;
ssl_certificate /opt/config/server.pem;
ssl_certificate_key /opt/config/server.key;
ssl_protocols TLSv1;
ssl_ciphers HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM;
ssl_prefer_server_ciphers on;

问题原因:
之前只有一个443的server,所以https配置在了server中。现加了一个servername为的https的server ,该server无法找到https的配置,导致nginx报错。