Android

Konfigurowanie odwrotnego proxy nginx

NGINX: Przykłady błędnej konfiguracji serwera

NGINX: Przykłady błędnej konfiguracji serwera

Spisu treści:

Anonim

Odwrotny serwer proxy to usługa, która przyjmuje żądanie klienta, wysyła żądanie do jednego lub większej liczby serwerów proxy, pobiera odpowiedź i dostarcza odpowiedź serwera do klienta.

Ze względu na swoją wydajność i skalowalność NGINX jest często używany jako odwrotne proxy dla serwerów HTTP i innych niż HTTP. Typowa konfiguracja odwrotnego proxy polega na umieszczeniu Nginx przed aplikacjami Node.js, Python lub Java.

Używanie Nginx jako odwrotnego proxy daje kilka dodatkowych korzyści:

  • Równoważenie obciążenia - Nginx może przeprowadzić równoważenie obciążenia, aby rozdzielić żądania klientów między serwery proxy, co poprawia wydajność, skalowalność i niezawodność. Buforowanie - dzięki Nginx jako odwrotnemu serwerowi proxy możesz buforować wstępnie renderowane wersje stron, aby przyspieszyć ładowanie stron. Działa poprzez buforowanie treści otrzymanych z odpowiedzi serwerów proxy i używanie ich do odpowiadania klientom, bez konieczności kontaktowania się z serwerem proxy za tę samą treść za każdym razem. Zakończenie SSL - Nginx może działać jako punkt końcowy SSL dla połączeń z klientami. Będzie obsługiwał i deszyfrował przychodzące połączenia SSL oraz szyfrował odpowiedzi serwera proxy. Kompresja - jeśli serwer proxy nie wysyła skompresowanych odpowiedzi, możesz skonfigurować Nginx, aby kompresował odpowiedzi przed wysłaniem ich do klientów. Ograniczanie ataków DDoS - można ograniczyć przychodzące żądania i liczbę połączeń na pojedynczy adres IP do wartości typowej dla zwykłych użytkowników. Nginx pozwala również blokować lub ograniczać dostęp na podstawie lokalizacji klienta oraz wartości nagłówków żądań, takich jak „User-Agent” i „Referer”.

W tym artykule opisano kroki wymagane do skonfigurowania Nginx jako odwrotnego proxy.

Wymagania wstępne

Zakładamy, że masz Nginx zainstalowany na serwerze Ubuntu, CentOS lub Debian.

Używanie Nginx jako odwrotnego proxy

Aby skonfigurować Nginx jako odwrotne proxy do serwera HTTP, otwórz plik konfiguracji bloku serwera domeny i określ w nim lokalizację oraz serwer proxy:

server { listen 80; server_name www.example.com example.com; location /app { proxy_pass http://127.0.0.1:8080; } }

Adres URL serwera proxy jest ustawiany za pomocą dyrektywy proxy_pass i może używać HTTP lub HTTPS jako protokołu, nazwy domeny lub adresu IP oraz opcjonalnego portu i identyfikatora URI jako adresu.

Powyższa konfiguracja nakazuje Nginx przekazywać wszystkie żądania do lokalizacji /app do serwera proxy pod adresem http://127.0.0.1:8080 .

W dystrybucjach opartych na Ubuntu i Debianie pliki bloków serwera są przechowywane w katalogu /etc/nginx/sites-available , natomiast w CentOS w katalogu /etc/nginx/conf.d .

Aby lepiej zilustrować działanie dyrektyw location i proxy_pass , weźmy następujący przykład:

server { listen 80; server_name www.example.com example.com; location /blog { proxy_pass http://node1.com:8000/wordpress/; } }

Jeśli odwiedzający uzyska dostęp do http://example.com/blog/my-post , Nginx przekaże tę prośbę do serwera proxy http://node1.com:8000/wordpress/my-post .

Gdy adres serwera proxy zawiera identyfikator URI ( /wordpress/ ), identyfikator URI żądania przekazywany do serwera proxy jest zastępowany identyfikatorem URI określonym w dyrektywie. Jeśli adres serwera proxy jest określony bez identyfikatora URI, pełny identyfikator URI żądania jest przekazywany do serwera proxy.

Przekazywanie nagłówków żądań

Gdy Nginx pośredniczy w żądaniu, automatycznie definiuje dwa pola nagłówka w żądaniach pośrednich od klienta, Host i Connection , i usuwa puste nagłówki. Host jest ustawiony na zmienną $proxy_host , a Connection jest ustawione na zamknięcie.

Aby dostosować lub ustawić nagłówki dla połączeń proxy, użyj dyrektywy proxy_set_header , a następnie wartości nagłówka. Możesz znaleźć listę wszystkich dostępnych nagłówków żądań i ich dozwolonych wartości tutaj. Jeśli chcesz zapobiec przekazywaniu nagłówka do serwera proxy, ustaw go na pusty ciąg "" .

W poniższym przykładzie zmieniamy wartość pola nagłówka Host na $host i usuwamy pole nagłówka Accept-Encoding , ustawiając jego wartość na pusty ciąg.

location / { proxy_set_header Host $host; proxy_set_header Accept-Encoding ""; proxy_pass http://localhost:3000; }

Za każdym razem, gdy modyfikujesz plik konfiguracyjny, musisz ponownie uruchomić usługę Nginx, aby zmiany odniosły skutek.

Konfigurowanie Nginx jako odwrotnego proxy do serwera proxy niebędącego HTTP

Aby skonfigurować Nginx jako zwrotny serwer proxy do serwera proxy bez HTTP, możesz użyć następujących dyrektyw:

  • fastcgi_pass - odwróć proxy do serwera FastCGI. uwsgi_pass - odwróć proxy na serwer uwsgi. scgi_pass - odwróć proxy do serwera SCGI. memcached_pass - odwróć proxy do serwera Memcached.

Jednym z najczęstszych przykładów jest użycie Nginx jako odwrotnego proxy do PHP-FPM:

server { #… other directives location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.2-fpm.sock; } }

Typowe opcje odwrotnego proxy Nginx

Udostępnianie treści przez HTTPS stało się obecnie standardem. W tej sekcji podamy przykład konfiguracji odwrotnego proxy HTTPS Nginx, w tym zalecane parametry proxy i nagłówki Nginx.

location/ { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_cache_bypass $http_upgrade; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; }

  • proxy_http_version 1.1 - Określa wersję protokołu HTTP do proxy, domyślnie jest ustawiona na 1.0. W przypadku Websockets i połączeń typu keepalive należy użyć wersji 1.1. proxy_cache_bypass $http_upgrade - Ustawia warunki, w których odpowiedź nie będzie pobierana z pamięci podręcznej. Upgrade $http_upgrade i Connection "upgrade" - Te pola nagłówka są wymagane, jeśli twoja aplikacja korzysta z Websockets. Host $host - Zmienna $host w następującej kolejności pierwszeństwa zawiera: nazwa hosta z wiersza żądania lub nazwa hosta z pola nagłówka żądania Host lub nazwa serwera pasująca do żądania. X-Real-IP $remote_addr - przekazuje zdalny adres IP prawdziwego gościa do serwera proxy. X-Forwarded-For $proxy_add_x_forwarded_for - Lista zawierająca adresy IP każdego serwera, przez który klient był proxy. X-Forwarded-Proto $scheme - w przypadku użycia w bloku serwera HTTPS każda odpowiedź HTTP z serwera proxy jest przepisywana do X-Forwarded-Host $host - Definiuje oryginalny host żądany przez klienta. X-Forwarded-Port $server_port - Definiuje oryginalny port żądany przez klienta.

Wniosek

Nauczyłeś się, jak używać Nginx jako odwrotnego proxy. Pokazaliśmy również, jak przekazać dodatkowe parametry do serwera oraz modyfikować i ustawiać różne pola nagłówka w żądaniach proxy.

nginx