Nginx 反向代理传递到单独的 Tomcat 服务器而不通过

Nginx 反向代理传递到单独的 Tomcat 服务器而不通过

这是我的 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_passTomcat服务器上。

实际情况是请求挂起了,屏幕上出现了一个空白页。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 希望有帮助

相关内容