有没有办法跨两个nginx server {}
块共享configuration指令? 我想避免重复规则,因为我的网站的HTTPS和HTTP内容都是以完全相同的configuration提供的。
目前,这是这样的:
server { listen 80; ... } server { listen 443; ssl on; # etc. ... }
我可以做些什么:
server { listen 80, 443; ... if(port == 443) { ssl on; #etc } }
你可以像这样把它组合成一个服务器块:
server { listen 80; listen 443 default_server ssl; # other directives }
官方如何
为了澄清接受的答案,你需要省略
SSL on;
在0.8.21之后你只需要下面的nginx版本
listen 443 ssl;
参考:
Nginx文档 – configuration一个HTTP / HTTPS服务器
我不知道你的build议,但肯定有一个简单和可维护的方法。
将通用的服务器设置移动到一个单独的文件,即“serverFoo.conf”,然后include
其include
在单独的server {}
块中,如下所示:
server { listen 80; include serverFoo.conf; } server { listen 443 ssl; include serverFoo.conf; }
扩大已经有帮助的答案,这里是一个更完整的例子:
server { # Listen on port 80 and 443 # on both IPv4 and IPv6 listen 80; listen [::]:80 ipv6only=on; listen 443 ssl; listen [::]:443 ipv6only=on ssl; # Set website folder root /path/to/your/website; # Enable SSL ssl_certificate your-cert.pem; ssl_certificate_key your-cert.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP; ssl_prefer_server_ciphers on; }
只要添加到Igor / Jauder的文章,如果你正在倾听一个特定的IP你可以使用:
listen xxx.xxx.xxx.xxx; listen xxx.xxx.xxx.xxx:443 default ssl;