it-swarm.cn

nginx HTTPS与HTTP具有相同的配置

有没有一种方法可以在两个Nginx server {}块之间共享配置指令?我想避免重复规则,因为我网站的HTTPS和HTTP内容使用完全相同的配置提供。

目前,它是这样的:

server {
  listen 80;
  ...
}

server {
  listen 443;

  ssl on; # etc.
  ...
}

我可以按照以下方式做点什么:

server {
  listen 80, 443;
  ...

  if(port == 443) {
    ssl on; #etc
  }
}
199
ceejayoz

您可以将其组合成一个服务器块,如下所示:

server {
    listen 80;
    listen 443 default_server ssl;

    # other directives
}

官方方法

270
Jauder Ho

要澄清接受的答案,您需要省略

SSL on;

并且您仅需要0.8.21之后的nginx版本的以下内容

listen 443 ssl;

参考:

Nginx文档-配置单个HTTP/HTTPS服务器

90
Sean Tan

我不知道像您建议的方法,但是肯定有一种简单且可维护的方法。

将常用服务器设置移动到单独的文件中,即“ serverFoo.conf”,然后在单独的_server {}_块中将其include如下所示:

_server {
    listen 80;
    include serverFoo.conf;
}
server {
    listen 443 ssl;
    include serverFoo.conf;
}
_
29
dwc

扩展已经有用的答案,这是一个更完整的示例:

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;
}
9
Jonathan

仅添加到Igor/Jauder的帖子中,如果您正在收听特定的IP,则可以使用:

listen xxx.xxx.xxx.xxx;
listen xxx.xxx.xxx.xxx:443 default ssl;
4
Matt Bostock