NGINX Default Server的配置

2017/05/26 网站开发

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,来保证最先加载;
  • 自签名证书不可少;

Search

    Table of Contents