Nginx default server配置

NGINX的配置还是比较晦涩的。尽管我的网站都是静态的,还是有个难题:Default Server的配置。查过很多资料,自己也琢磨了好久,还是没有弄清楚。今天下决心 重新试验了一下,终于有了一个接近完美的解决方案。

问题

这里说的NGINX,主要是作为静态网页作为服务内容的网站。由于我在一个VPS上同时Host了几个网站,又要支持HTTPS,这就引起了这个Default Server配置的问题。

具体的要求是:

  • NGINX支持SNI;
  • HTTP转向到HTTPS;
  • www转向裸域;
  • 屏蔽IP地址访问。如果没有Default Server,使用IP地址访问网站,NGINX会返回它服务器列表里的第一个。

经过一段时间的研究,我发现这两个文章解决了大部分问题:

当然这里说的都是单向的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

发布者

发表评论

电子邮件地址不会被公开。 必填项已用*标注

评论审核已启用。您的评论可能需要一段时间后才能被显示。