【问题标题】:nginx letsencrypt https redirect with express nodejs app not workingnginx让加密https重定向与快速nodejs应用程序不起作用
【发布时间】:2022-01-02 04:59:10
【问题描述】:

我需要将 https 作为我的网站的默认服务方式,我在生成 letencrypt 证书时选择了选项 2。 我有 https 在我的网站上工作。这是一个简单的 HTML 页面,由 nodejs 在端口 3000 上提供。它目前托管在 Oracle Cloud 中。我在 iptables 中打开了端口,因为 Oracle 不使用 ufw。

如果我转到 https://www.example.com ,网站会安全加载,因此一切正常。 如果我去http://www.example.com,网站也会加载,但显然不安全。 如果我访问 example.com,网站会以 http 而非 https 加载。

我不知道应该如何编写我的 nginx 配置文件。

我需要使用 http 将 proxy_pass 传递到端口 3000,但是当我将 proxy_pass 更改为 https 时

proxy_pass https://localhost:3000;

它无法加载任何东西,这对我来说有点意义,因为我的 nodejs 应用程序没有任何支持 https 的代码,我的印象是 nginx 可以为我处理所有这些。这种思路得到了进一步的支持,因为就像我上面所说的那样,https://www.example.com 现在对我的站点来说工作得很好。 下面是我的配置,删除了我的服务器名称。请让我知道如何最好地完成我想要完成的工作。

listen 80;
listen [::]:80;
server_name example.com www.example.com;

location / {

proxy_pass http://localhost:3000;

}


  listen [::]:443 ssl ipv6only=on; # managed by Certbot
  listen 443 ssl; # managed by Certbot
  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
  include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot




}
server {
  if ($host = www.example.com) {
      return 301 https://$host$request_uri;
  } # managed by Certbot


  if ($host = example.com) {
      return 301 https://$host$request_uri;
  } # managed by Certbot


      listen 80;
      listen [::]:80;

      server_name example.com www.example.com;
  return 404; # managed by Certbot




}```

【问题讨论】:

  • 两秒上网搜索:serversforhackers.com/c/redirect-http-to-https-nginx。顺便说一句,您的配置看起来很奇怪。
  • @Marc 这并没有告诉我如何将它指向端口 3000,返回 301 https://$host$request_uri;将无法访问我的应用。
  • 首先,您将不安全的连接重定向到 https 连接。然后只有您的 https 服务器将带有 proxy_pass 的数据转发到您的节点应用程序。这不是火箭,因为。 1) 重定向到 https,2) http 服务器将流量转发到您的 node.js
  • @Marc 哇!我让它工作了,我不得不删除并重新排序很多东西,我明白你的意思了,因为我的配置看起来很奇怪。 Letsencrypt 几乎完成了所有操作,但它出现了故障,所以我很难看到逻辑,但我只是重写了所有内容,现在它可以工作并且更有意义。感谢您的帮助。
  • 欢迎您。如果可能的话,您应该回答自己的问题,但不确定您是否可以在声誉低下的情况下做到这一点。

标签: node.js nginx https certbot


【解决方案1】:

感谢 Marc,似乎我的配置创建得很奇怪,并且 certbot 添加了一些乱七八糟的东西,这让我感到困惑,但我已经弄清楚了。正如 Marc 所说,将所有 80 个重定向到 https。在 https 服务器中,确保您有证书和 proxy_pass 到您的端口 3000,或者您的应用正在运行的任何地方。

server {

        listen 80;
        server_name example.com www.example.com;
        return 301 https://www.example.com;
}


server {

        listen [::]:443 ssl ipv6only=on; # managed by Certbot
        listen 443 ssl; # managed by Certbot
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot


        location / {
        
        proxy_pass http://localhost:3000;

        }


}

【讨论】:

    猜你喜欢
    • 2022-01-14
    • 1970-01-01
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 2020-10-05
    • 2018-03-27
    相关资源
    最近更新 更多