【发布时间】: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