Android

Настройка обратного прокси nginx

"Ил-2 Штурмовик" нового поколения - "Битва за Сталинград" и "Битва за Москву" #13

"Ил-2 Штурмовик" нового поколения - "Битва за Сталинград" и "Битва за Москву" #13

Оглавление:

Anonim

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

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

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

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

В этой статье описываются шаги, необходимые для настройки 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 директивы 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 .

Чтобы лучше проиллюстрировать, как proxy_pass директивы 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 запроса передается на прокси-сервер.

Заголовки прохождения запроса

Когда Nginx проксирует запрос, он автоматически определяет два поля заголовка в прокси-запросах от клиента, Host и Connection , и удаляет пустые заголовки. Host установлена ​​переменная $proxy_host , а для Connection установлено закрытие.

Чтобы настроить или установить заголовки для прокси-соединений, используйте директиву 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 { #… other directives location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.2-fpm.sock; } }

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

Обслуживание контента через HTTPS стало стандартом в наши дни. В этом разделе мы приведем пример конфигурации обратного прокси-сервера HTTPS Nginx, включая рекомендуемые параметры прокси-сервера 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. Для веб-сокетов и keepalive соединений вам необходимо использовать версию 1.1. proxy_cache_bypass $http_upgrade - устанавливает условия, при которых ответ не будет взят из кэша. Upgrade $http_upgrade и Connection "upgrade" - эти поля заголовка обязательны, если ваше приложение использует Websockets. 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-ответ прокси-сервера переписывается в X-Forwarded-Host $host - Определяет исходный хост, запрошенный клиентом. X-Forwarded-Port $server_port - Определяет исходный порт, запрошенный клиентом.

Вывод

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

Nginx