node.js - 无法在 NGINX 的 5050 端口上监听 https
问题描述
我有一个 nodejs 应用程序,用作监听端口 5050 的网络服务器
我已经创建了证书并配置了适用于标准端口(https://xx/)的正常 https 调用的 NGINX
如果我使用普通的http://xx:5050调用来调用端口 5050,它也可以工作,但是使用https://xx:5050/conf调用我得到:此站点无法提供安全连接
NGINX 配置文件下方:(网站名称已更改)
server {
root /var/www/x.x/html;
index index.html index.htm index.nginx-debian.html;
server_name x.x www.x.x;
location / {
try_files $uri $uri/ =404;
}
location /conf {
proxy_pass http://localhost:5050;
try_files $uri $uri/ =404;
}
location /wh {
proxy_pass http://localhost:5050;
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;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/x.x/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/x.x/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
}
我在这里做错了什么?
解决方案
您将 nginx 配置为充当反向代理,将传入的请求从 转发https://example.com/whatever
到http://localhost:5050/whatever
。你说你做对了,它有效。好的。(得到那个工作是 xxx 脖子上的一个臭名昭著的痛苦。)
您没有将 nginx 配置为侦听端口 5050。您也不应该;这是它用来将请求传递给您的 nodejs 程序的端口。您不能将请求从端口 5050 转发到端口 5050。如果您尝试让 nodejs 和 nginx 都侦听端口 5050,那么当您启动服务器时,其中一个会收到 EADRINUSE 错误。
您的 nodejs 程序在端口 5050 上侦听 http 请求,而不是 https 请求。您不能轻易让它在同一端口上同时侦听 http 和 https。您的 nodejs 程序在 nginx 后面时,不应包含任何 https 服务器,仅包含 http。(您正在让 nginx 进行艰苦的加密工作来处理 https,并让 nodejs 处理您的请求。)
您也不希望您的 nodejs 程序直接侦听来自服务器外部的仅 http 请求。因为网络蠕虫。
如果您可以阻止从 localhost 以外的任何地方访问端口 5050,则可以宣布配置服务器任务的胜利。您可以使用
server.listen({
host: 'localhost',
port: 5050, ...
});```
在你的 nodejs 程序中。或者,您可以配置服务器的防火墙以阻止除 https(和 ssh,以便您管理它)以外的任何端口上的传入请求。Digital Ocean在这一点上有一个有用的教程。
推荐阅读
- python - 比较 2 个连续行并检查日期差异是否在范围内
- actions-on-google - 如何进行“这里的地质情况如何”?
- mysql - Left Join MYSQL Insert 三个条件
- java - 为什么java断言没有效果?
- java - org.modelmapper 中的标记化
- django - 计算 django ManyToMany 关系的“最近使用”
- flutter - 如何从 TextField 小部件的内容创建字符计数器
- sql - 使用 LISTAGG 从已经聚合的 LISTAGG 中删除重复项
- excel - 在 Excel 中查找不间断的子数组 - Kadane 的算法变体?
- smtp - Nodemailer 在本地工作,但在 Netlify 上没有 displayunlockcaptcha 就不能工作