【问题标题】:How can a single nginx virtual server deal with both port 80 and 443?单个 nginx 虚拟服务器如何同时处理 80 和 443 端口?
【发布时间】:2014-10-13 12:30:59
【问题描述】:

我有一个带有虚拟服务器设置的配置文件,它在 ssl 端口 443 上运行。我还希望这台虚拟服务器能够处理端口 80 上的非 ssl 流量。

我希望执行以下操作,但它似乎不起作用。

server {
    listen 443 ssl;
    listen 80;
    server_name example.com;
    ...
}

这些设置下方的 ssl 选项似乎对非 ssl 流量造成了问题。

【问题讨论】:

  • 你没有显示完整的配置,但如果你碰巧在... 块中有ssl on 指令——删除它。
  • ssl on 是否存在,但如果我删除它,ssl 请求不会停止工作吗?我只是想处理非 ssl 请求而不是停止 ssl 请求
  • listen 中的 ssl 标志将处理它。见nginx.org/en/docs/http/…
  • 太棒了,谢谢。如果您将其添加为答案,我会接受。

标签: ssl nginx


【解决方案1】:

是的,当然。

server {
  listen 80;
  listen 443 ssl;
  # force https-redirects
  if ($scheme = http) {
    return 301 https://$server_name$request_uri;
  }
}

这是我的帖子,名称为“Nginx Configuration for HTTPS”,其中包含更多信息。

【讨论】:

  • 链接的文章仅禁止在非重写语句的位置块内使用if 指令。在服务器块内使用if 是完全安全的,特别是如果'if' 仅限于返回语句。在暗示它说了一些它没有说的话之前,请阅读这篇文章。
【解决方案2】:

删除ssl on; 指令。

listen 指令中的ssl 标志正是您所需要的。

http://nginx.org/en/docs/http/configuring_https_servers.html#single_http_https_server

【讨论】:

    猜你喜欢
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 2018-01-25
    • 2019-06-29
    • 2017-01-29
    • 2012-03-01
    • 2015-02-28
    相关资源
    最近更新 更多