Nginx proxy pass: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 5: Строка 5:
 
* https://dev.to/danielkun/nginx-everything-about-proxypass-2ona
 
* https://dev.to/danielkun/nginx-everything-about-proxypass-2ona
 
* https://www.middlewareinventory.com/blog/nginx-dynamic-ip-address-upstream-dns-cache-issue-how-to-solve/
 
* https://www.middlewareinventory.com/blog/nginx-dynamic-ip-address-upstream-dns-cache-issue-how-to-solve/
* * https://my.f5.com/manage/s/article/K000134632
+
* https://my.f5.com/manage/s/article/K000134632
  +
* https://ercanermis.com/prevent-nginx-from-caching-dns-for-proxy/
 
=Nginx <code>proxy_pass</code>=
 
=Nginx <code>proxy_pass</code>=
   

Версия 12:58, 9 июля 2024

Это заметка о бекендах, тут все протсто но постоянно забываются детали, записано что бы подсматривать.

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;
              }