繁体   English   中英

nginxletsencrypt https 重定向与 express nodejs 应用程序不工作

[英]nginx letsencrypt https redirect with express nodejs app not working

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

如果我 go 到https://www.example.com ,该站点可以安全加载,因此一切正常。 如果我 go 到http://www.example.com ,该站点也会加载但不安全。 如果我从 go 到 example.com,则该站点加载到 http,而不是 Z5E056C500A5D4B6AADE5110B。

我无法考虑如何编写 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




}```

感谢 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;

        }


}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM