nginx HTTPS 服务与 HTTP 具有相同的配置

nginx HTTPS 服务与 HTTP 具有相同的配置

有没有办法在两个 nginxserver {}块之间共享配置指令?我想避免重复规则,因为我的站点的 HTTPS 和 HTTP 内容使用完全相同的配置。

目前是这样的:

server {
  listen 80;
  ...
}

server {
  listen 443;

  ssl on; # etc.
  ...
}

我可以做类似的事情吗:

server {
  listen 80, 443;
  ...

  if(port == 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 服务器

答案3

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

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

server {
    listen 80;
    include serverFoo.conf;
}
server {
    listen 443 ssl;
    include serverFoo.conf;
}

答案4

只需补充一下 Igor/Jauder 的帖子,如果您正在监听特定的 IP,您可以使用:

listen xxx.xxx.xxx.xxx;
listen xxx.xxx.xxx.xxx:443 default ssl;

相关内容