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

如何使用Nginx v1.14.1移除域名8080端口?EC2配置问题排查

解决Nginx反向代理后仍需携带端口访问的问题

我帮你梳理下当前配置的问题点,一步步排查解决:

1. 修正Nginx监听规则

你当前的listen指令写法有误,正确的做法是监听80端口,通过server_name来匹配对应域名。修改/etc/nginx/conf.d/virtual.conf配置:

# admin.example.com 反向代理配置
server {
    listen 80;  # 直接监听80端口,无需绑定域名
    server_name admin.example.com;

    location / {
        proxy_pass http://localhost:8080;
        # 建议添加代理头,避免应用无法获取正确请求信息
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

# 补充app.example.com的反向代理配置
server {
    listen 80;
    server_name app.example.com;

    location / {
        proxy_pass http://localhost:8081;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

2. 验证Nginx配置语法

修改后先测试配置是否合法,避免重启失败:

sudo nginx -t

如果输出nginx: configuration file /etc/nginx/nginx.conf test is successful,说明配置无语法问题。

3. 确保Nginx完全重启

语法验证通过后,执行完整重启命令(不要仅用reload,避免配置未生效):

sudo systemctl restart nginx

然后检查Nginx运行状态:

sudo systemctl status nginx

确认状态显示active (running)

4. 检查EC2实例内部防火墙

AWS安全组开放80端口后,实例内部可能还有防火墙(如firewalldiptables)需要放行80端口:

  • 针对firewalld:
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --reload
  • 针对iptables:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo service iptables save

5. 验证DNS解析正确性

确认子域名已正确指向弹性IP,在本地终端执行:

ping admin.example.com

nslookup admin.example.com

检查返回的IP是否和你的EC2弹性IP一致,若不一致需调整域名服务商的DNS记录。

6. 确认应用监听地址

你的Express代码中app.listen('8080')默认监听0.0.0.0(允许所有IP访问),可以用以下命令确认:

sudo netstat -tulpn | grep 8080

若输出地址为0.0.0.0:8080:::8080,则监听正常。

完成以上步骤后,访问admin.example.comapp.example.com就无需再携带端口号了。

内容的提问来源于stack exchange,提问作者Nagaraj Jayaraman

火山引擎 最新活动