Android

Nastavení reverzního proxy serveru nginx

How to Setup NGINX Reverse Proxy on CentOS with SSL

How to Setup NGINX Reverse Proxy on CentOS with SSL

Obsah:

Anonim

Reverzní proxy je služba, která přijímá požadavek klienta, odešle požadavek na jeden nebo více proxy serverů, vyvolá odpověď a doručí odpověď serveru klientovi.

Vzhledem ke svému výkonu a škálovatelnosti je NGINX často používán jako reverzní proxy pro servery HTTP a non-HTTP. Typickou konfigurací reverzního proxy je umístit Nginx před Node.js, Python nebo Java aplikace.

Použití Nginx jako reverzního proxy serveru vám přináší několik dalších výhod:

  • Load Balancing - Nginx může provádět vyrovnávání zatížení a distribuovat požadavky klientů na proxy servery, což zvyšuje výkon, škálovatelnost a spolehlivost. Ukládání do mezipaměti - S Nginx jako reverzním proxy serverem můžete ukládat do mezipaměti předem vykreslené verze stránek a urychlit tak načítání stránek. Funguje tak, že ukládá do mezipaměti obsah přijatý z odpovědí serverů proxy a používá jej k tomu, aby reagoval na klienty bez nutnosti kontaktovat server proxy se stejným obsahem pokaždé. Ukončení SSL - Nginx může sloužit jako koncový bod SSL pro spojení s klienty. Zpracovává a dešifruje příchozí připojení SSL a šifruje odpovědi serveru proxy. Komprese - Pokud server proxy neodesílá komprimované odpovědi, můžete nakonfigurovat Nginx tak, aby komprimoval odpovědi před jejich odesláním klientům. Zmírnění útoků DDoS - Můžete omezit příchozí požadavky a počet připojení na jednu IP adresu na hodnotu typickou pro běžné uživatele. Nginx také umožňuje blokovat nebo omezit přístup na základě umístění klienta a hodnoty záhlaví požadavků, například „User-Agent“ a „Referer“.

Tento článek popisuje kroky potřebné pro konfiguraci Nginx jako reverzního proxy.

Předpoklady

Předpokládáme, že máte Nginx nainstalovaný na serveru Ubuntu, CentOS nebo Debian.

Používání Nginx jako reverzního proxy

Chcete-li nakonfigurovat Nginx jako reverzní proxy k HTTP serveru, otevřete konfigurační soubor blokování serveru na doméně a určete umístění a proxy server uvnitř:

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

Adresa URL serveru proxy je nastavena pomocí direktivy proxy_pass a může použít HTTP nebo HTTPS jako protokol, doménové jméno nebo IP adresu a volitelný port a URI jako adresu.

Výše uvedená konfigurace říká Nginxu, aby předal všechny požadavky do umístění /app proxy serveru na adrese http://127.0.0.1:8080 .

V distribucích založených na Ubuntu a Debianu jsou soubory bloků serveru uloženy v adresáři /etc/nginx/sites-available , zatímco v CentOS v adresáři /etc/nginx/conf.d .

Abychom lépe ilustrovali, jak proxy_pass směrnice o location a proxy_pass , vezměme následující příklad:

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

Pokud návštěvník přistoupí na http://example.com/blog/my-post , Nginx tuto žádost proxy na http://node1.com:8000/wordpress/my-post .

Pokud adresa serveru proxy obsahuje URI ( /wordpress/ ), URI požadavku, který je předán serveru proxy, je nahrazen URI specifikovaným ve směrnici. Pokud je adresa serveru proxy zadána bez identifikátoru URI, je identifikátor URI úplného požadavku předán serveru proxy.

Předávání záhlaví žádosti

Když Nginx požadavek proxy, automaticky definuje dvě pole záhlaví v proxy požadavcích od klienta, Host a Connection a odstraní prázdné záhlaví. Host je nastaven na proměnnou $proxy_host a Connection je nastaveno na blízko.

Chcete-li upravit nebo nastavit záhlaví pro proxy připojení, použijte direktivu proxy_set_header následovanou hodnotou záhlaví. Zde najdete seznam všech dostupných záhlaví požadavků a jejich povolených hodnot. Pokud chcete zabránit předávání záhlaví na proxy server, nastavte jej na prázdný řetězec.

V následujícím příkladu změníme hodnotu pole záhlaví Host na $host a odstraníme pole záhlaví Accept-Encoding nastavením jeho hodnoty na prázdný řetězec.

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

Kdykoli změníte konfigurační soubor, musíte restartovat službu Nginx, aby se změny projevily.

Konfigurace Nginxu jako reverzního proxy serveru bez proxy serveru proxy

Chcete-li nakonfigurovat Nginx jako reverzní proxy na proxy server bez proxy, můžete použít následující směrnice:

  • fastcgi_pass - reverzní proxy k serveru FastCGI. uwsgi_pass - reverzní proxy k serveru uwsgi. scgi_pass - reverzní proxy k SCGI serveru. memcached_pass - reverzní proxy k serveru Memcached.

Jedním z nejčastějších příkladů je použití Nginx jako reverzního proxy pro PHP-FPM:

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

Běžné možnosti Nginx Reverse Proxy

Poskytování obsahu přes HTTPS se dnes stalo standardem. V této části vám ukážeme příklad konfigurace HTTPS Nginx pro reverzní proxy včetně doporučených parametrů a záhlaví Nginx proxy.

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 - Definuje verzi protokolu HTTP pro proxy, ve výchozím nastavení je nastavena na 1, 0. Pro Websockets a keepalive připojení musíte použít verzi 1.1. proxy_cache_bypass $http_upgrade - Nastavuje podmínky, za kterých nebude odpověď převzata z mezipaměti. Upgrade $http_upgrade a Connection "upgrade" - Tato pole záhlaví jsou vyžadována, pokud vaše aplikace používá Upgrade $http_upgrade . Host $host - Proměnná $host v následujícím pořadí priority obsahuje: název hostitele z řádku požadavku nebo název hostitele z pole hlavičky požadavku Host , nebo název serveru odpovídající požadavku. X-Real-IP $remote_addr - X-Real-IP $remote_addr skutečnou vzdálenou IP adresu návštěvníka na proxy server. X-Forwarded-For $proxy_add_x_forwarded_for - Seznam obsahující IP adresy všech serverů, přes které byl klient proxy připojen. X-Forwarded-Proto $scheme - Při použití uvnitř bloku serveru HTTPS je každá odpověď HTTP ze serveru proxy přepsána do X-Forwarded-Host $host - Definuje původního hostitele, který požaduje klient. X-Forwarded-Port $server_port - Definuje původní port požadovaný klientem.

Závěr

Naučili jste se, jak používat Nginx jako reverzní proxy. Také jsme vám ukázali, jak předat další parametry serveru a jak upravit a nastavit různá pole záhlaví v proxy požadavcích.

nginx