NGINX: Przykłady błędnej konfiguracji serwera
Spisu treści:
- Wymagania wstępne
- Używanie Nginx jako odwrotnego proxy
- Przekazywanie nagłówków żądań
- Konfigurowanie Nginx jako odwrotnego proxy do serwera proxy niebędącego HTTP
- Typowe opcje odwrotnego proxy Nginx
- Wniosek
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
.
/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ń typukeepalivenależ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_upgradeiConnection "upgrade"- Te pola nagłówka są wymagane, jeśli twoja aplikacja korzysta z Websockets.Host $host- Zmienna$hostw następującej kolejności pierwszeństwa zawiera: nazwa hosta z wiersza żądania lub nazwa hosta z pola nagłówka żądaniaHostlub 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 doX-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.
nginxSkonfiguruj odoo z nginx jako odwrotnym proxy
Odoo ma wbudowany serwer WWW, ale w większości przypadków zaleca się posiadanie przed nim odwrotnego serwera proxy, który będzie działał jako pośrednik między klientami a serwerem Odoo. Ten przewodnik zawiera instrukcje używania Nginx jako odwrotnego serwera proxy dla Odoo.
Konfigurowanie błędu nginx i dziennika dostępu
Nginx zapisuje swoje zdarzenia w dwóch typach dzienników: dzienników dostępu i dzienników błędów. Dzienniki dostępu zapisują informacje o żądaniach klientów, a dzienniki błędów zapisują informacje o problemach z serwerem i aplikacjami.
Konfigurowanie i konfigurowanie serwera poczty
W tej serii pokażemy, jak skonfigurować kompletny system wirtualnej poczty użytkownika na serwerze Ubuntu.







