【问题标题】:Merge two nginx servers合并两个 nginx 服务器
【发布时间】:2018-12-28 17:28:14
【问题描述】:

这个 nginx 配置应该重定向

http://example.com
http://www.example.com
https://www.example.com

致https://example.com

server {
  server_name example.com;
  root {:siteRoot};  
  listen 443 ssl;
  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
  include /etc/letsencrypt/options-ssl-nginx.conf;
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
  index index.html;
}

server {
  server_name example.com www.example.com;
  listen 80;
  return 301 https://example.com$request_uri;
}

server {
  server_name www.example.com;
  listen 443 ssl;
  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
  include /etc/letsencrypt/options-ssl-nginx.conf;
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
  return 301 https://example.com$request_uri;
}

它工作正常,但它可以以某种方式合并以避免所有重复代码吗?

【问题讨论】:

  • 是的,你可以,但你需要在 nginx 中使用 ifs 和 "if is evil" nginx.com/resources/wiki/start/topics/depth/ifisevil。您可以使用两个域设置一个服务器支架,并使用 ifs 方案分隔,然后域在同一个“服务器”支架中分别处理它们。就我个人而言,我会让它保持这种状态。变量 $host 和 $scheme 可用于在 ifs 中进行比较。如果您在这方面需要任何帮助,我只是想澄清一下。 (在该链接的最后一部分,它解释了如何正确使用“ifs”,如果你仍然想使用它们)。希望我能帮助

标签: http nginx https webserver nginx-config


【解决方案1】:
server {
  server_name www.example.com example.com;
  root {:siteRoot};  
  listen 443 ssl;
  listen 80;
  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
  include /etc/letsencrypt/options-ssl-nginx.conf;
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

  if ($scheme = http) {
  return 301 https://example.com$request_uri;
  }

  if ($host = 'www.example.com') {
  return 301 https://example.com$request_uri;
  }
    index index.html;

}

正如我所评论的,我喜欢在服务器中将我在 nginx 中的不同选项分开,因为我认为它不是“代码”。但是我认为,如果您想将所有内容都放在同一台服务器上,那么我刚刚写的内容应该对您有用。我正在设置一个虚拟服务器来检查“ifs”是否按预期工作,因为这个概念是正确的,但我需要深入检查代码。

【讨论】:

  • 但是在您链接的页面中,如果在 location 块中使用 ifs 是不好的。在这里它们是在外面使用的,所以我想可以吗?我的想法是,为每个网站设置 3 个服务器块会导致性能低于拥有单个服务器块
  • 这一切都归结为:如果你从未在 nginx 上使用过 ifs,你将不会习惯它。这是一个“最好的建议”,而不是绝对的(这就是为什么我给你一个答案,我认为你的问题是正确的代码)。如果它运行得更快,太棒了,我希望我能帮上忙,新年快乐 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-25
  • 2019-04-20
  • 1970-01-01
  • 2012-11-20
相关资源
最近更新 更多