如何在非标准端口上运行 nginx SSL

如何在非标准端口上运行 nginx SSL

我意识到这看起来至少与其他几个问题重复,但我已经读过它们好几遍了,仍然做错了什么。

以下是位于的 myexample.com nginx 配置文件的内容/etc/nginx/sites-available

server {

  listen       443 ssl;
  listen       [::]:443 ssl;

  server_name myexample.com www.myexample.com;
  add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
  ssl_certificate /etc/letsencrypt/live/myexample.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/myexample.com/privkey.pem;

  #Configures the publicly served root directory
  #Configures the index file to be served
  root /var/www/myexample.com;
      index index.html index.htm;

}

它起作用了,当我去https://myexample.com内容已提供,连接安全。因此,此配置似乎不错。

现在,如果我将 SSL 端口更改为 9443 并重新加载 nginx 配置,则配置将重新加载而不会出现错误,但访问https://myexample.com浏览器中显示错误(无法访问此站点/myexample.com 拒绝连接。ERR_CONNECTION_REFUSED)

我已经尝试过建议和文档这里这里, 和这里(以及其它)但我总是收到 ERR_CONNECTION_REFUSED 错误。

我应该注意,我可以使用非标准端口,然后在 URL 中明确输入该端口,例如,https://myexample.com:9443。但我不想这样做。我想要的是让用户能够在任何浏览器中输入 myexample.com,然后 nginx 自动重定向到安全连接。

再次,当我使用标准 443 SSL 端口时,没有遇到任何问题。

编辑:我在 debian/jessie 上使用 nginx/1.6.2

答案1

为了支持输入“https://myexample.com“在您的浏览器中,nginx通过监听端口 9443 的配置来处理它,您将需要一个额外的nginx配置来监听端口 443,因为这是浏览器连接的 IP 端口

因此:

server {
  listen 443 ssl;
  listen [::]:443 ssl;

  server_name myexample.com www.myexample.com;
  ssl_certificate /etc/letsencrypt/live/myexample.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/myexample.com/privkey.pem;

  # Redirect the browser to our port 9443 config
  return 301 $scheme://myexample.com:9443$request_uri;
}

server {
  listen 9443 ssl;
  listen [::]:9443 ssl;

  server_name myexample.com www.myexample.com;
  ssl_certificate /etc/letsencrypt/live/myexample.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/myexample.com/privkey.pem;
  add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

  #Configures the publicly served root directory
  #Configures the index file to be served
  root /var/www/myexample.com;
  index index.html index.htm;
}

请注意,两个部分都需要相同的证书/密钥,因为证书是通常与 DNS 主机名相关,但不一定与端口相关。

希望这可以帮助!

答案2

当你输入https://example.com,https:// 方案的标准是连接到端口 443。就你的情况而言,你已移动服务器,以便它现在侦听端口 9443。你得到连接被拒绝因此出现此消息 - 端口 443 上没有任何内容处于监听状态。

您需要安排某些东西监听端口 443,将连接重定向到端口 9443,或者使用端口作为 URL 的一部分。

答案3

如果将端口更改为非标准端口(如 9443),则需要添加从 443 到 9443 的重定向。将 nginx 设置为该端口的反向代理。

相关内容