Nginx или приложение отсекает часть URI

У меня есть эта цепочка прокси: прокси 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 ответ

В твоем главном nginx использовать:

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

Обратите внимание на дополнительные /, Это вызывает псевдоним URI из /analytics/ords в /ords до его получения внутренним nginx, Который затем передается неизмененным как /ords на порт 8080.

Смотрите этот документ для деталей.

Другие вопросы по тегам