如何使用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端口后,实例内部可能还有防火墙(如firewalld或iptables)需要放行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.com和app.example.com就无需再携带端口号了。
内容的提问来源于stack exchange,提问作者Nagaraj Jayaraman




