nginx监听非80端口,转发地址端口丢失!解决方案!!!!!

本文探讨了如何在Nginx配置中解决登录后主页跳转丢失代理端口的问题,通过添加X-Forwarded-Port头并提供详细配置,确保了正确转发至Tomcat的9004端口,有效解决了访问难题。

nginx监听非80端口,转发地址端口丢失!解决方案!!!!!

  1. 问题场景:
    登录成功后,跳转主页,端口丢失,无法访问。nginx监听端口:81,tomcat访问端口:9004。例如:登录地址:http://xxx:81/login,登录成功后跳转地址:http://xxx:81/index,但实际跳转地址变为:http://xxx/index,nginx代理端口(81)无故消失,导致无法访问。
    nginx配置如下:
    location /xxx/{
    proxy_pass http://127.0.0.1:9004/xxx/;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $ host:$server_port;
    proxy_redirect http:// https://;
    }
  2. 网上提供的方案:
    1) proxy_set_header Host $ host:$server_port;
    改为
    proxy_set_header Host $host:81;(写死监听端口,经测试无效)
  3. 最终解决方案:
    增加配置:proxy_set_header X-Forwarded-Port $server_port;
    最终配置如下:
    location /xxx/{
    proxy_pass http://127.0.0.1:9004/xxx/;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $ host:$server_port;
    proxy_set_header X-Forwarded-Port $server_port;(这个配置是重点)
    proxy_redirect http:// https://;
    }
    重启nginx,成功进入主页;
    参考连接:[https://www.95id.com/oauth2-client-nginx-bugs.html]
  4. 总结:
    目前只解决问题,具体原因未知,欢迎大佬指正!
<think>我们正在处理用户的问题:如何配置Nginx80端口的请求转发8090端口,并进行抓包分析以排查问题。根据用户提供的引用和之前的错误日志,用户可能遇到了上游服务(8090端口)提前关闭连接的问题,需要配置转发并抓包分析。步骤:1.配置Nginx端口转发80 ->8090)2.使用抓包工具(如tcpdump)捕获80端口8090端口的流量3.分析抓包数据,定位连接关闭的原因详细步骤:一、配置Nginx端口转发1.编辑Nginx配置文件(例如:/etc/nginx/conf.d/default.conf或/usr/local/nginx/conf/nginx.conf)2.在配置文件中添加一个server块,监听80端口,并将请求转发到本地的8090端口。示例配置:```nginxserver{listen80;server_name _;#匹配任意域名,也可以指定具体的域名或IPlocation/ {proxy_pass http://127.0.0.1:8090;#转发到本地的8090端口#以下是一些常用的代理设置,可根据需要添加proxy_set_header Host$host;proxy_set_headerX-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_headerX-Forwarded-Proto$scheme;}} ```3.检查配置文件语法:```bashnginx-t```4.重新加载Nginx配置:```bashnginx-sreload```二、抓包分析使用tcpdump工具分别捕获80端口8090端口的流量。1.抓取80端口的流量(假设网卡是eth0):```bashtcpdump-ieth0port80 -w port80.pcap```2.抓取8090端口的流量(因为8090是本地端口,可以使用lo网卡):```bashtcpdump -i loport8090-wport8090.pcap```3.同时进行测试:在另一个终端中,使用curl或浏览器发送请求到80端口,观察是否会重现问题。4.停止抓包(Ctrl+C),然后使用Wireshark或tcpdump命令分析抓包文件。三、分析抓包文件1.分析port80.pcap和port8090.pcap,重点关注:-三次握手是否完成-请求数据是否正常发送-上游服务器(8090端口)是否返回响应-连接关闭是由哪一端发起的(FIN或RST包)2.如果发现上游服务器(8090端口)在接收到请求后直接关闭了连接(发送RST包),则可能是上游服务的问题,需要检查上游服务的日志和配置。四、结合Nginx日志分析1.查看Nginx的访问日志和错误日志(通常位于/var/log/nginx/access.log和/var/log/nginx/error.log)2.错误日志中如果出现类似之前的错误(upstreamprematurely closedconnection),则说明上游服务在Nginx读取响应头之前关闭了连接。五、可能的问题及解决方案1.上游服务(8090端口)处理超时:调整Nginx的代理超时设置```nginxlocation/ {proxy_pass http://127.0.0.1:8090;proxy_read_timeout300s;#增加读取超时时间#其他设置...}```2.上游服务崩溃:检查上游服务的日志,查看是否有异常堆栈。3.端口冲突:确保8090端口确实被上游服务监听,且没有其他进程占用。4.资源不足:检查上游服务(如运行在8090端口的应用)是否有内存、线程等资源不足的情况。六、使用curl测试也可以直接使用curl测试8090端口,看上游服务是否正常:```bashcurl -v http://127.0.0.1:8090/tp_enhance_onvif_notify_server```根据上述步骤,用户应该能够配置转发并进行抓包分析,从而定位问题。引用说明:根据引用[1]:我们可以修改配置文件,并查看日志(/var/log/nginx/)[^1]。根据引用[2]:反向代理配置需要放在http块中[^2]。根据引用[3]:配置location时可以使用alias指定资源路径[^3],但这里我们不需要,因为我们是做代理转发。根据引用[4]:关于host变量的说明,我们在配置proxy_set_header时使用了$host,这会将原始请求的host传递给上游[^4]。生成相关问题:1.如何配置Nginx将多个端口转发到不同的上游服务?2.如何使用tcpdump过滤特定的HTTP请求?3.如何分析Nginx错误日志中的502BadGateway错误?4.如何优化Nginx反向代理以提高性能?5.如何配置Nginx的上游服务健康检查?</think>### Nginx 端口转发配置与抓包分析(808090) #### 一、配置端口转发 1. **编辑Nginx配置文件** ```nginx # 在http块内添加(引用[2]) http { # 其他配置... server { listen 80; # 监听80端口 server_name _; # 匹配所有域名 location /tp_enhance_onvif_notify_server { proxy_pass http://127.0.0.1:8090; # 转发8090端口 proxy_set_header Host $host; # 传递原始主机头(引用[4]) proxy_set_header X-Real-IP $remote_addr; # 关键超时设置(预防连接关闭) proxy_read_timeout 300s; proxy_connect_timeout 75s; } } } ``` 2. **验证并重载配置** ```bash nginx -t # 检查配置语法 nginx -s reload # 重载配置 ``` #### 二、抓包分析步骤 1. **启动抓包工具** ```bash # 捕获80端口入站流量 tcpdump -i eth0 port 80 -w 80_in.pcap # 捕获8090端口出站流量 tcpdump -i lo port 8090 -w 8090_out.pcap ``` 2. **触发请求** ```bash curl -X POST http://192.168.0.1/tp_enhance_onvif_notify_server ``` 3. **分析抓包文件(Wireshark)** | 分析要点 | 说明 | |---------------------------|----------------------------------------------------------------------| | TCP握手过程 | 检查SYN/ACK是否正常完成 | | HTTP请求头传递 | 验证`Host: 192.168.0.1`是否正确传递(引用[4]) | | 上游响应时间 | 计算请求到响应的时间差 | | TCP断开序列 | 检查FIN/RST包来源(客户端/上游服务) | | HTTP状态码 | 查看上游是否返回异常状态(如500) | #### 三、常见问题诊断 1. **连接提前关闭** - **现象**:上游发送RST包中断连接 - **解决**: ```nginx location / { proxy_pass http://127.0.0.1:8090; proxy_http_version 1.1; # 启用HTTP/1.1 proxy_set_header Connection ""; # 禁用close } ``` 2. **端口冲突** ```bash netstat -tulnp | grep :8090 # 检查端口占用(引用[1]) ``` 3. **上游无响应** ```bash # 直接测试上游服务 curl -v http://127.0.0.1:8090/tp_enhance_onvif_notify_server ``` #### 四、日志关联分析 1. **查看Nginx错误日志** ```bash tail -f /var/log/nginx/error.log # 监控502错误(引用[1]) ``` 2. **关键日志线索** - `upstream sent too big header` → 调整`proxy_buffer_size` - `connection refused` → 检查上游进程状态 - `readv() failed` → 网络层问题 > **操作建议**:抓包时同时记录时间戳,与Nginx日志`$time_local`字段对照分析[^1][^2]。 --- ### 抓包分析示意图 ```mermaid sequenceDiagram participant Client as 客户端(192.168.0.3) participant Nginx as Nginx(80端口) participant Upstream as 上游服务(8090端口) Client->>Nginx: POST /tp_enhance_onvif_notify_server activate Nginx Nginx->>Upstream: 转发请求 activate Upstream Upstream-->>Nginx: 响应头未完成即关闭连接 deactivate Upstream Nginx-->>Client: 返回502错误 deactivate Nginx ``` 通过抓包可精确识别断开发生在`Upstream-->Nginx`阶段,需重点检查8090端口服务状态。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ambition_test

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值