Nginx proxy pass

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску


Nginx proxy_pass

Файлы
location proxy_pass Пример конфигурации Request Received by upstream

/test_links

/new_location

location /test_links {
    proxy_pass https://noname.com.ua/new_location;
}
  • /test_links?foo=bar
  • /test_links/baz?foo=bar
  • /new_location?foo=bar
  • /new_location/baz?foo=bar



/test_links/

/new_location

location /test_links/ {
    proxy_pass https://noname.com.ua/new_location;
}
  • /test_links?foo=bar
  • /test_links/baz?foo=bar
  • /new_location?foo=bar
  • /new_locationbaz?foo=bar HTTP/1.0"





/test_links

/new_location/

location /test_links {
    proxy_pass https://noname.com.ua/new_location/;
}
  • /test_links?foo=bar
  • /test_links/baz?foo=bar
  • /new_location/?foo=bar HTTP/1.0
  • /new_location//baz?foo=bar




/test_links/

/new_location/

location /test_links {
    proxy_pass https://noname.com.ua/new_location/;
}
  • /test_links?foo=bar
  • /test_links/baz?foo=bar
  • "POST /new_location?foo=bar
  • POST /new_location/baz?foo=bar

Однако все это хорошо но не работает с переменными, точнее работает не так как ожидалось (мной)

Переменные

Пример правильного конфига

    location /test_links {
        set $test_links_destination_location    new_location; # без слеша вначале что бы удобнее было читать следующую переменную $test_link_proxy_pass
        set $test_link_proxy_pass               https://$app_backend_host/$test_links_destination_location$is_args$args;

        proxy_pass  $test_link_proxy_pass;
        access_log  /var/log/nginx/location-access.log-ssl;
        error_log   /var/log/nginx/location-error.log-ssl;
        access_log  /var/log/nginx/location-debug-access.log-ssl debug;
    }

Ключевой момент тут https://$app_backend_host/$test_links_destination_location$is_args$args;

  • Ожидаемо должно работать https://$app_backend_host/$test_links_destination_location но нет - теряются аргументы запроса
  • $is_args содержит знак ? или пустую строку если нет аргументов
  • $args содержит аргументы запроса


DNS

Использовать пересенные что бы делать резолв при запросах

server {
    resolver 8.8.8.8  valid=1s;
    ...

Или

              upstream new.backend.com {
                      resolver 192.168.1.2 valid=30s;
                      server example.com resolve;
                      zone http_backend 32k;
              }