Как сохранить URL -адрес запроса с помощью nginx proxy_pass
Вопрос
Я пытался использовать Тонкий App Server и имел одну проблему.
Когда nginx прокси запрос на тонкий (или единорог) с использованием proxy_pass http://my_app_upstream;
Заявление получает измененный URL -адрес, отправленный NGINX (http://my_app_upstream
).
Я хочу передать оригинальный URL и исходный запрос от клиента без изменений, поскольку приложение в значительной степени зависит от него.
Nginx ' док говорит:
Если необходимо передавать URI в необработанной форме, то директивная proxy_pass следует использовать без части URI.
Но я не понимаю, как именно настроить это, поскольку связанный образец фактически использует URI:
location /some/path/ {
proxy_pass http://127.0.0.1;
}
Так не могли бы вы помочь мне понять, как Сохранить исходный URL -адрес запроса от клиента?
Решение
я думаю proxy_set_header
Директива может помочь:
location / {
proxy_pass http://my_app_upstream;
proxy_set_header Host $host;
# ...
}
Другие советы
Just Proxy_set_header Host $ Host Miss Port для моего дела. Решено по:
location / {
proxy_pass http://BACKENDIP/;
include /etc/nginx/proxy.conf;
}
а затем в proxy.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;
В случае, если что -то изменяет место, которое вы пытаетесь обслуживать, например, try_files
, это сохраняет запрос на бэк-энд:
location / {
proxy_pass http://127.0.0.1:8080$request_uri;
}
В своем сценарии я сделаю это через код в конфигурации 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 в заголовке так же, как и запрос
Примечание для других людей, находя это: сердце решения, чтобы сделать Nginx, а не манипулировать URL, состоит в том, чтобы удалить черту в конце копии: Directive proxy_pass. http: // my_app_upstream против http: // my_app_upstream/ - Хьюго Йозефсон
Я нашел это выше в комментариях, но я думаю, что это действительно должно быть ответом.
Для моего сервера автозаправления ... это работает. Мне нравится иметь варианты для /auth для моей собственной гуманизированной читабельности ... или я также настроен на его порт /Upstream для машины на машину.
.
в начале конфликта
####################################################
upstream auth {
server 127.0.0.1:9011 weight=1 fail_timeout=300s;
keepalive 16;
}
Внутри моего блока сервера 443
if (-d $request_filename) {
rewrite [^/]$ $scheme://$http_host$uri/ permanent;
}
location /auth {
proxy_pass http://$http_host:9011;
proxy_set_header Origin http://$host;
proxy_set_header Host $http_host:9011;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_http_version 1.1;
}
В нижней части конфликта
#####################################################################
# #
# Proxies for all the Other servers on other ports upstream #
# #
#####################################################################
#######################
# Fusion #
#######################
server {
listen 9001 ssl;
############# Lock it down ################
# SSL certificate locations
ssl_certificate /etc/letsencrypt/live/allineed.app/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/allineed.app/privkey.pem;
# Exclusions
include snippets/exclusions.conf;
# Security
include snippets/security.conf;
include snippets/ssl.conf;
# Fastcgi cache rules
include snippets/fastcgi-cache.conf;
include snippets/limits.conf;
include snippets/nginx-cloudflare.conf;
########### Location upstream ##############
location ~ / {
proxy_pass http://auth;
proxy_set_header Origin http://$host;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_http_version 1.1;
}
if (-d $request_filename) {
rewrite [^/]$ $scheme://$http_host$uri/ permanent;
}
}