Nginx或应用程序削减了URI的一部分

时间:2015-12-21 22:41:36

标签: tomcat nginx reverse-proxy

我有这个代理链:我的内部nginx的nginx代理,代理tomcat

主要的nginx:

server {
listen 80 default_server;

access_log /var/log/nginx/eco.access.log main;
error_log  /var/log/nginx/eco.error.log;
root /usr/share/nginx/html;

location / {
  index index.html;
}

location /analytics {
  proxy_pass http://10.89.81.130:80/;
  proxy_redirect off;
  proxy_buffering 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;
  proxy_set_header REMOTE_ADDR $remote_addr;
}

内部nginx:

    server {
    listen 80 default_server;
    proxy_intercept_errors on;
    error_page 404 = /error404_nx.html;
    root /usr/share/nginx/html;

     location / {
          root /usr/share/nginx/html;
          index index.html;
     }        

    location /ords {
          rewrite ^\/ords\/f.p(.*)$ /analytics/ords/$1 break;
          proxy_pass http://127.0.0.1:8080;
          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;
          proxy_set_header REMOTE_ADDR $remote_addr;
    }

我希望请求将是/ analytics / ords / ...,但结果/ ords / ...没有分析,我得到404错误,我做错了什么?

1 个答案:

答案 0 :(得分:0)

在您的主nginx使用:

location /analytics/ {
    proxy_pass http://10.89.81.130:80/;
    ...
}

注意额外的/。这会导致URI在内部/analytics/ords收到之前从/ordsnginx设置别名。然后将其作为/ords未经修改传递到端口8080。

有关详细信息,请参阅this document