You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Nginx无法同时监听多个端口运行多服务问题求助

Nginx无法同时监听多个端口运行多服务问题求助

兄弟,我之前也踩过Nginx多端口监听的坑,结合你的情况,给你梳理几个大概率的问题点和排查步骤,应该能解决你的问题:

1. 先确认Nginx配置有没有语法错误

很多时候配置写错了自己没发现,先跑一下命令测试配置合法性:

nginx -t

如果输出显示test is successful才说明配置没问题,要是有错误就根据提示修正,比如括号没闭合、指令写错之类的。

2. 检查2556端口是否真的被Nginx监听,或者被其他进程占用

先看看Nginx有没有在监听2556端口:

ss -tulpn | grep nginx

如果结果里没有0.0.0.0:2556或者[::]:2556的条目,说明Nginx没加载这个端口的配置,这时候要确保重启Nginx的方式正确,用:

# 如果你用systemd管理
systemctl restart nginx
# 或者直接用Nginx命令
nginx -s reload

要是发现2556端口被其他进程占用了,要么杀掉那个进程,要么换个没被占用的端口给Nginx用。

3. 服务器防火墙有没有放行2556端口

大部分云服务器或者Linux系统的默认防火墙只会放行80、443这些常用端口,2556大概率没被允许,你得手动添加规则:

  • 如果用ufw防火墙:
ufw allow 2556/tcp
ufw reload
  • 如果用firewalld:
firewall-cmd --add-port=2556/tcp --permanent
firewall-cmd --reload

4. 确认你的Socket应用类型,对应正确的Nginx配置

看你给的Nginx配置里用了UpgradeConnection "upgrade"头,这是用来代理WebSocket的,但如果你的Python Socket应用是普通TCP Socket(不是WebSocket),那这个配置就不对了!

如果是普通TCP Socket,你需要用Nginx的stream模块来代理,而不是在http块里配置。修改Nginx主配置(比如/etc/nginx/nginx.conf),添加下面的内容:

stream {
    server {
        listen 2556;
        proxy_pass localhost:8975;
        # 可选:设置超时,根据你的应用调整
        proxy_timeout 30m;
    }
}

修改后记得重新测试配置并重启Nginx。另外可以用nginx -V看看你的Nginx有没有编译stream模块,输出里有--with-stream就说明支持。

5. 查看Nginx错误日志找线索

如果上面的步骤都没解决,去看Nginx的错误日志,比如:

cat /var/log/nginx/error.log

里面会记录为什么2556端口没启动成功,比如权限不够、端口被占用、模块缺失之类的,根据日志提示再针对性解决。

备注:内容来源于stack exchange,提问作者Almirante Connor

火山引擎 最新活动