Как сохранить url-адрес запроса с помощью nginx proxy pass


Я пытался использовать тонкий сервер приложений и один вопрос.

когда nginx прокси запрос на тонкий (или единорог) с помощью proxy_pass http://my_app_upstream; приложение получает измененный URL-адрес, отправленный nginx (http://my_app_upstream).

Я хочу передать исходный URL-адрес и исходный запрос от клиента без каких-либо изменений, поскольку приложение сильно зависит от него.

nginx'doc говорит:

Если это необходимо передать URI в затем в непереработанном виде директивы директива proxy_pass без URI должен быть использован часть.

но я не понимаю, как именно настроить это, поскольку связанный образец фактически использует URI:

location  /some/path/ {
  proxy_pass   http://127.0.0.1;
}

Так не могли бы вы помочь мне выяснить, как сохранить исходный URL запроса от клиента?

6 57

6 ответов:

Я думаю proxy_set_header

просто proxy_set_header Host $host Мисс порт для моего дела. Решается путем:



    location / {
     proxy_pass http://BACKENDIP/;
     include /etc/nginx/proxy.conf;
    }

а потом в прокси.conf



    proxy_redirect off;
    proxy_set_header Host $host:$server_port;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

совершенно без измельчения absoluteURI запроса и Host в заголовке:

server {
    listen 35005;

    location / {
        rewrite            ^(.*)$   "://$http_host$uri$is_args$args";
        rewrite            ^(.*)$   "http$uri$is_args$args" break;
        proxy_set_header   Host     $host;

        proxy_pass         https://deploy.org.local:35005;
    }
}

найдено здесь: https://opensysnotes.wordpress.com/2016/11/17/nginx-proxy_pass-with-absolute-url/

nginx также предоставляет переменную $http_host, которая будет передавать порт для вас. его конкатенация хоста и порта.

Так что вам просто нужно сделать: Proxy_set_header Host $http_host;

в моем сценарии я сделал это через ниже код в конфигурации nginx vhost

server {
server_name dashboards.etilize.com;

location / {
    proxy_pass http://demo.etilize.com/dashboards/;
    proxy_set_header Host $http_host;
}}

$http_host установит URL в заголовке так же, как и запрошено

в случае, если что-то изменяет местоположение, которое вы пытаетесь обслуживать, например try_files, это сохраняет запрос для серверной части:

location / {
  proxy_pass http://127.0.0.1:8080$request_uri;
}