Фильтр обратного прокси-сервера Nginx - PullRequest
0 голосов
/ 26 сентября 2019

Я работаю над переносом обратного прокси-сервера NodeJS с Apache на Nginx.Последнее, что нужно решить, - как отфильтровать мой входящий URI для моего бэкэнда NodeJS.

По какой-либо устаревшей причине API-интерфейс NodeJS отвечает на URI, такие как example.com/route/1001, тогда как интерфейс Apache и весь клиентский код фактически отправляютна example.com/api/route/1001 Таким образом, я надеюсь убрать раздел / api URI запроса и отправить только вторую половину к Node API.

Я играл в Regxr, пытаясь понять это правильно ив итоге у (?!api)\b\S+ все шло хорошо: regexr.com/4lp4e

Однако я не знаком с синтаксисом Nginx того, как я получаю это в моей переменной.Вот что у меня сейчас:

server {
  server_name <domain>;

  access_log  /var/log/nginx/<domain>-access.log;

  # API endpoint -  (?!api)\b\S+
  location /api {
    if ($request_uri ~* ((?!api)\b\S+) ) {
      set  $last $1;
    }
    add_header X-uri "$last";
    rewrite /api /$last break;
    #proxy_redirect off;
    proxy_pass http://127.0.0.1:4000;
  }

  listen 80;
  listen [::]:80;
}

1 Ответ

0 голосов
/ 26 сентября 2019

Попробуйте добавить завершающий / в конец прохода прокси:

proxy_pass http://127.0.0.1:4000/;

Без завершающего / будет пройден полный путь:http://127.0.0.1:4000/app/something

При трейлинг /, шаблон местоположения, /app, будет заменен на /:http://127.0.0.1:4000/something

...