这是我的 NginX /sites-enabled 目录中的文件:
upstream tomcat_server {
server 192.168.1.100:8080 fail_timeout=0;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _____.com www._____.com;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://tomcat_server;
}
}
目前,流程如下:
- 我访问我的域名_____.com,请求映射到我的路由器的 IP 端口 39080。
- 在我的路由器中,我将请求从端口 39080 转发到 192.168.1.136(我的 nginx 服务器正在运行,单独的机器)的端口 80。
- Nginx 正在监听端口 80 并接收请求。
我想它要做的事情就是将请求重定向到在单独机器上运行的Tomcat服务器,所以就放到了proxy_pass
Tomcat服务器上。
实际情况是请求挂起了,屏幕上出现了一个空白页。Tomcat 日志显示请求的响应为 200 OK,但它应该加载其余内容,包括页面、图像、脚本等等。
“获取/应用程序门户/ HTTP/1.0” 200
// 就是这样
[/app-portal/
是我的服务器端代码重定向/
到的]
我可以确认这是 nginx 的问题,因为当我将路由器端口转发直接更改为 tomcat 服务器而不是 nginx 时,页面会加载其所有内容。
可能是什么问题呢?
--
我不知道这是否是一个主要问题,但我注意到成功的请求(从我直接从路由器到 tomcat 服务器时)使用的是 HTTP1.1,而 nginx 的失败请求使用的是 HTTP1.0
答案1
“proxy_pass”http://tomcat_服务器;” 我觉得里面有 http,这看起来有点奇怪。
建议您尝试移除上游并像这样执行。
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.1.100:8080
}
本文有一位很好的向导。
答案2
proxy_pass 应该是一个完整有效的域或 IP 地址。proxy_passhttp://tomcat_服务器; 无效,不会产生任何结果。如果这是你的 tomcat 服务器的 ip 192.168.1.100:8080,那么你应该这样做 #proxy_passhttp://192.168.1.100:8080;然后登录 ssh 并运行此命令来测试输出。wgethttp://192.168.1.100:8080 希望有帮助