nginx HTTPS与HTTPconfiguration相同

有没有办法跨两个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”,然后includeinclude在单独的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;