我正在尝试configuration我的ExpressJS应用程序的https连接。 Express服务器在localhost:8080和安全的localhost:8443上运行。
这里是与https相关的server.js代码:
var app = express(); var https = require('https'); const options = { cert: fs.readFileSync('/etc/letsencrypt/live/fire.mydomain.me/fullchain.pem'), key: fs.readFileSync('/etc/letsencrypt/live/fire.mydomain.me/privkey.pem') }; app.listen(8080, console.log("Server running")); https.createServer(options, app).listen(8443, console.log("Secure server running on port 8443"));
这是我的Nginxconfiguration:
server { listen 80; listen [::]:80; server_name fire.mydomain.me; location / { proxy_pass http://localhost:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } server { listen 443; listen [::]:443; server_name fire.mydomain.me; location / { proxy_pass https://localhost:8443; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
我做了什么 :
我试过了
注释server.js中的not-ssl服务器行来强制连接通过sslconfiguration:当我尝试去fire.mydomain.me:443而不是“https:// fire.mydomain。我”。 在这两种情况下,都没有SSL。 尝试去https:// fire.mydomain.me在Google Chrome浏览器中生成此消息“本网站不提供安全连接”。
我首先按照这个教程来设置我的ssl节点configuration: https : //medium.com/@yash.kulshrestha/using-lets-encrypt-with-express-e069c7abe625#.93jgjlgsc
您不必在同一主机上运行的nginx反向代理和Node应用程序之间使用HTTPS。 在这种情况下,您可以将HTTP请求代理到端口80,将HTTPS请求代理到端口443到同一个端口 – 在这种情况下,您不需要配置TLS证书。
您可以将您的server.js文件更改为:
var app = express(); app.listen(8080, console.log("server running"));
并使用具有proxy_pass http://localhost:8080;
的nginx配置proxy_pass http://localhost:8080;
对于端口80上的HTTP和端口443上的HTTPS。
这通常是这样做的。 在环回接口上加密流量不会增加任何安全性,因为要嗅探您需要根访问权限的流量,并且当您拥有它时,您可以读取证书并解密流量。 考虑到https://nodejs.org/en/blog/vulnerability/上的大多数帖子都与OpenSSL相关的事实,人们可能会认为在Node中使用SSL可能会使得在加密回送接口流量。 有关更多信息,请参阅关于GitHub上的Node项目的讨论 。
感谢@rsp解决方案,这里是工作的Nginx配置:
server { listen 80; listen 443 ssl; server_name fire.mydomain.me; ssl_certificate /etc/letsencrypt/live/fire.mydomain.me/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/fire.mydomain.me/privkey.pem; location / { proxy_pass http://localhost:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }