Настройка Nginx в качестве обратного прокси-сервера в Linux

12 set 2022 4 min di lettura
Настройка Nginx в качестве обратного прокси-сервера в Linux
Indice dei contenuti

Введение

Обратный прокси — это служба, которая принимает запрос клиента, отправляет запрос на один или несколько прокси-серверов, получает ответ и доставляет ответ сервера клиенту.

Благодаря своей производительности и масштабируемости NGINX часто используется в качестве обратного прокси-сервера для HTTP- и не-HTTP-серверов. Типичная установка обратного прокси-сервера — это использование Nginx перед приложениями Node.js, Python или Java.

Использование Nginx в качестве обратного прокси дает несколько дополнительных преимуществ:

  • Балансировка нагрузки: Nginx может выполнять балансировку нагрузки для распределения клиентских запросов между прокси-серверами, повышая производительность, масштабируемость и надежность.
  • Кэширование. Используя Nginx в качестве обратного прокси-сервера, можно кэшировать предварительно обработанные версии страниц, чтобы ускорить загрузку страниц. Он работает путем кэширования содержимого, полученного из ответов прокси-сервера, и использования его для ответа клиентам без необходимости каждый раз обращаться к прокси-серверу за одним и тем же содержимым.
  • Завершение SSL: Nginx может выступать в качестве конечной точки SSL для клиентских подключений. Он будет обрабатывать и расшифровывать входящие соединения SSL и шифровать ответы прокси-сервера.
  • Сжатие: если прокси-сервер не отправляет сжатые ответы, Nginx можно настроить на сжатие ответов перед их отправкой клиентам.
  • Смягчение DDoS-атак: вы можете ограничить входящие запросы и количество подключений на один IP-адрес значением, типичным для обычных пользователей. Nginx также позволяет блокировать или ограничивать доступ в зависимости от местоположения клиента и значения заголовков запроса, таких как «User-Agent» и «Referer».

В этой статье описаны шаги, необходимые для настройки Nginx в качестве обратного прокси.

Предпосылки

Допустим, на вашем сервере Ubuntu, CentOS или Debian установлен Nginx.

Используйте Nginx в качестве обратного прокси

Чтобы настроить Nginx в качестве обратного прокси-сервера для HTTP-сервера, откройте файл конфигурации блока доменного сервера и укажите в нем расположение и прокси-сервер:

server {
 listen 80;
 server_name www.example.com example.com;

 location /app {
 proxy_pass http://127.0.0.1:8080;
 }
 }

URL-адрес прокси-сервера задается с помощью директивы proxy_pass и может использовать HTTP или HTTPS в качестве протокола, доменного имени или IP-адреса, а также дополнительный порт и URI в качестве адреса.

Приведенная выше конфигурация указывает Nginx передавать все запросы к местоположению /app на прокси-сервер по адресу http://127.0.0.1:8080.

В дистрибутивах на основе Ubuntu и Debian файлы серверных блоков хранятся в каталоге /etc/nginx/sites-available, а в CentOS — в каталоге /etc/nginx/conf.d.

Чтобы лучше проиллюстрировать, как работают директивы location и proxy_pass, давайте возьмем следующий пример:

server {
 listen 80;
 server_name www.example.com example.com;

 location /blog {
 proxy_pass http://node1.com:8000/wordpress/;
 }
 }

Если посетитель заходит на http://example.com/blog/my-post, Nginx передает этот запрос на http://node1.com:8000/wordpress/my-post.

Когда адрес прокси-сервера содержит URI ( /wordpress/ ), URI запроса, который передается прокси-серверу, заменяется URI, указанным в директиве. Если адрес прокси-сервера указан без URI, на прокси-сервер передается полный URI запроса.

Управление заголовками

Чтобы настроить или установить заголовки для прокси-соединений, используйте директиву proxy_set_header, за которой следует значение заголовка. Список всех доступных заголовков запроса и их допустимые значения вы можете найти здесь. Если вы хотите предотвратить передачу заголовка прокси-серверу, установите для него пустую строку "".

В следующем примере мы меняем значение поля Host заголовка на $host и удаляем поле Accept-Encoding заголовка, присваивая его значение пустой строке.

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

Всякий раз, когда файл конфигурации изменяется, служба Nginx должна быть перезапущена, чтобы изменения вступили в силу.

Настройте Nginx на прокси-сервере, отличном от HTTP.

Чтобы настроить Nginx в качестве обратного прокси-сервера для прокси-сервера, отличного от HTTP, вы можете использовать следующие директивы:

  • fastcgi_pass - обратный прокси на сервер FastCGI.
  • uwsgi_pass — обратный прокси на сервер uwsgi.
  • scgi_pass - обратный прокси на сервер SCGI.
  • memcached_pass — обратный прокси на сервер Memcached.

Одним из наиболее распространенных примеров является использование Nginx в качестве обратного прокси для PHP-FPM:

server {

 #... altre configurazioni

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

Параметры обратного прокси Nginx

Публикация контента через HTTPS в настоящее время стала стандартом. В этом разделе мы предоставим пример конфигурации обратного прокси-сервера Nginx HTTPS, включая рекомендуемые заголовки и параметры прокси-сервера 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 — определяет версию протокола HTTP для прокси, по умолчанию установлено значение 1.0. Версия 1.1 должна использоваться для веб- keepalive и соединений проверки активности.
  • proxy_cache_bypass $http_upgrade — Устанавливает условия, при которых ответ не будет получен из кеша.
  • Upgrade $http_upgrade и Connection "upgrade" — эти поля заголовка обязательны, если приложение использует Websocket.
  • Host $host — Переменная $host в следующем порядке старшинства содержит: имя хоста из строки запроса или имя хоста из поля Host заголовка запроса или имя сервера, соответствующего запросу.
  • X-Real-IP $remote_addr - Перенаправляет удаленный IP-адрес реального посетителя на прокси-сервер.
  • X-Forwarded-For $proxy_add_x_forwarded_for — Список, содержащий IP-адреса каждого сервера, через который был отправлен прокси.
  • X-Forwarded-Proto $scheme — при использовании в блоке HTTPS-сервера каждый HTTP-ответ от прокси-сервера перезаписывается в HTTPS.
  • X-Forwarded-Host $host — определяет исходный хост, запрошенный клиентом.
  • X-Forwarded-Port $server_port — определяет исходный порт, запрошенный клиентом.

Вывод

В этом руководстве мы увидели, как настроить Nginx в качестве обратного прокси. Мы также показали, как передавать серверу дополнительные параметры и как изменять и устанавливать различные поля заголовков в прокси-запросах.

Прочтите эти статьи, чтобы узнать, как настроить Nginx в качестве обратного прокси-сервера Apache 2.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.