NGINX的配置还是比较晦涩的。尽管我的网站都是静态的,还是有个难题:Default Server的配置。查过很多资料,自己也琢磨了好久,还是没有弄清楚。今天下决心 重新试验了一下,终于有了一个接近完美的解决方案。
问题
这里说的NGINX,主要是作为静态网页作为服务内容的网站。由于我在一个VPS上同时Host了几个网站,又要支持HTTPS,这就引起了这个Default Server配置的问题。
具体的要求是:
- NGINX支持SNI;
- HTTP转向到HTTPS;
- www转向裸域;
- 屏蔽IP地址访问。如果没有Default Server,使用IP地址访问网站,NGINX会返回它服务器列表里的第一个。
经过一段时间的研究,我发现这两个文章解决了大部分问题:
- Nginx: rejecting unknown or specific domains over SSL
- SETTING UP LET’S ENCRYPT WITH MULTI-VHOST NGINX ON UBUNTU 14.04
当然这里说的都是单向的SSL,如果你的服务器打算支持双向SSL,可以看这个文章: USING NGINX AND CLIENT CERTIFICATES? DON’T LET NON-SNI BITE YOU!.
NGINX配置
不废话了,直接给出配置:
假设有两个网站:example-a.com, example-b.com.
nginx.conf
http{ ...... server{ listen *:80 default_server; listen [::]:80 default_server ipv6only=on; listen *:443 default_server ssl; listen [::]:443 default_server ssl ipv6only=on; ssl_certificate /wwwroot/ssl/default/default.crt; ssl_certificate_key /wwwroot/ssl/default/default.key; server_name _; access_log /wwwroot/wwwlogs/default.access.log combined; return 444; } include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
几点说明:
- return 444 比较关键,最好别换成别的;
- 也可以把default server配置写在文件里,不过就需要像文章说的那样,文件名之前加上00,来保证最先加载;
- 自签名证书不可少;
Demo
HTTP(80端口)直接访问IP效果
HTTPS访问效果
延伸
如果服务器再加上禁止Ping,那这台服务器基本以“宕机”的效果呈现了。我们以CenteOS为例设置服务器禁Ping配置。
在 /etc/sysctl.conf中增加一行
net.ipv4.icmp_echo_ignore_all=1
如果已经有net.ipv4.icmp_echo_ignore_all这一行了,直接修改=号后面的值即可的(0表示允许,1表示禁止)。
修改完成后执行 sysctl -p 命令使新配置生效。
感谢
转自:https://feelapi.com/website/NGINX-Default-Server.html
《“Nginx default server配置”》 有 1 条评论
好厉害