Nginx反向代理Tomcat

4

我在设置nginx + tomcat 7反向代理时遇到了问题。

基本上,我想让https://192.168.10.101提供来自上游集群/ webapp /的内容;然而,我的应用程序却返回404页面。

希望您能给出任何有关问题原因的提示。

下面是我的配置:

server {

            server_name 192.168.10.101;
            access_log /var/log/nginx/mysite-access.log;
            listen   443;
            ssl on;
            ssl_certificate    /etc/nginx/ssl/mysite.crt;
            ssl_certificate_key    /etc/nginx/ssl/private/mysite_pvt.key;

                location  / {
                        proxy_redirect off;
                        proxy_pass      https://tccluster/webapp/;
                        rewrite_log     on;

                        proxy_set_header   Host             $host;
                        proxy_set_header   X-Real-IP        $remote_addr;
                        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
                        proxy_max_temp_file_size 0;

                }
}

upstream  tccluster  {
                server   192.168.56.103:8443;
                server   192.168.56.104:8443;
}
2个回答

8

终于弄清楚了。该应用程序有一个过滤器,将重定向到/webapp/index.html,这使得nginx请求/webapp/webapp/index.html,这导致出现404错误。

我添加了一条重写规则。

location / {
                proxy_pass  https://backend/webapp/;
                proxy_redirect off;
                proxy_set_header   Host             $host;
                proxy_set_header   X-Real-IP        $remote_addr;
                proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
                rewrite ^/webapp/(.*)$ /$1 last;
}

现在看起来这似乎是有效的!

1
请注意proxy_pass指令后面的斜杠。如果没有斜杠,你仍然会得到404错误。 - James Sumners
救了我的一天。谢谢。能简单解释一下这个指令具体是做什么的吗?虽然它看起来只是一个带有组匹配的正则表达式。不确定 last 是什么意思。 - Ondrej Burkert

2

完整的Nginx配置,用于传递给Tomcat上下文:

server {
  listen 80;         # e.g., listen 192.168.1.1:80; In most cases *:80 is a good idea
  listen [::]:80;
  server_name tomcat-context.domain.com ;

  # individual nginx logs for this vhost
  access_log  /var/log/nginx/tomcat-context_domain_access.log main;
  error_log   /var/log/nginx/tomcat-context_domain_error.log;



    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/www;
    }
    location / {
                proxy_pass  http://127.0.0.1:10080/tomcat-context/;
                proxy_redirect off;
                proxy_set_header   Host             $host;
                proxy_set_header   X-Real-IP        $remote_addr;
                proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
                rewrite ^/tomcat-context/(.*)$ /$1 last;
    }
    location /tomcat-context {
      rewrite ^/tomcat-context(.*)$ $1  redirect;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接