server {}
块之间共享配置指令?我想避免重复规则,因为我的网站的HTTPS和HTTP内容使用完全相同的配置来提供。当前,它是这样的:
server {
listen 80;
...
}
server {
listen 443;
ssl on; # etc.
...
}
我可以按照以下方式做些什么:
#1 楼
您可以将其组合成一个服务器块,如下所示:server {
listen 80;
listen 443 default_server ssl;
# other directives
}
官方方法
#2 楼
为了澄清已接受的答案,您需要省略SSL on;
,而对于0.8.21之后的nginx版本,您只需要以下内容
listen 443 ssl;
参考文献:
Nginx文档-配置单个HTTP / HTTPS服务器
评论
谢谢!我不知道为什么http上的任何内容都不起作用。删除SSL;工作了。
–克里斯·卡明斯(Chris Cummings)
2014年2月14日下午16:27
#3 楼
我不知道像您建议的方法,但是肯定有一种简单且可维护的方法。将常用服务器设置移动到单独的文件中,即“ serverFoo.conf”,然后分别将其
include
server {}
块如下所示:server {
listen 80;
include serverFoo.conf;
}
server {
listen 443 ssl;
include serverFoo.conf;
}
评论
+1 =对我有用。 (无法使其与其他方法一起使用。)
–user11480
09年7月3日在15:44
另外,如果充当负载平衡器,则另一个示例不考虑“ proxy_pass”。
–迈克·珀塞尔(Mike Purcell)
13年4月24日在23:34
如果每个端口的server_name不同,则此选项很好
– iDev247
13-10-3在6:40
不要使用ssl on,请使用listen 443 ssl;从现在开始。
–danger89
16-3-22在21:47
这似乎是使用最新的nginx 1.10.1的唯一解决方案。由于某些原因,两条侦听线无法正确解释,但是将它们移至单独的服务器{}可以对其进行修复。
– Artur Bodera
16年8月1日在10:54
#4 楼
扩展已经有用的答案,这是一个更完整的示例: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;
}
评论
我知道这是一个很老的答案,但是由于它很完整,我只想向其他可能使用它的人指出,您应该禁用SSLv3协议,因为它容易受到POODLE漏洞的影响:disablessl3.com而是使用:ssl_protocols TLSv1 TLSv1 .1 TLSv1.2;
–user147787
2015年1月6日23:32
#5 楼
只需添加到Igor / Jauder的帖子中,如果您正在收听特定IP,则可以使用:listen xxx.xxx.xxx.xxx;
listen xxx.xxx.xxx.xxx:443 default ssl;
评论
啊,我不知道nginx足够聪明,可以忽略通过端口80加载的SSL指令。太棒了!
–ceejayoz
09年5月21日在19:34
nginx是各种各样的WIN。
–何J
09年5月21日在19:38
并且如果您在一台服务器上有多个站点,则值得一提的是,“默认”不是必须的
–luchaninov
2011年7月1日15:32
太优雅了,很疼...
– Alix Axel
2012年11月24日在1:39
在这里不起作用...“普通的HTTP请求已发送到HTTPS端口”
– gcstr
2014年8月18日下午3:55