Обратный прокси-сервер — это служба, которая принимает запрос клиента, отправляет запрос одному или нескольким прокси-серверам, извлекает ответ и доставляет ответ сервера клиенту.
Из-за своей производительности и масштабируемости NGINX часто используется в качестве обратного прокси-сервера для серверов HTTP и не HTTP. Обычная конфигурация обратного прокси-сервера помещает Nginx перед приложениями Node.js , Python или Java.
Использование Nginx в качестве обратного прокси-сервера дает вам несколько дополнительных преимуществ:
Балансировка нагрузки — Nginx может выполнять балансировку нагрузки для распределения клиентских запросов по прокси-серверам, что повышает производительность, масштабируемость и надежность. Кэширование — Nginx может кэшировать контент, полученный от ответов прокси-серверов, и использовать его для ответа клиентам, не обращаясь к прокси-серверу для получения одного и того же контента каждый раз. Завершение SSL — Nginx может выступать в качестве конечной точки SSL для соединений с клиентами. Он будет обрабатывать и дешифровать входящие соединения SSL и шифровать ответы прокси-сервера. Сжатие — если прокси-сервер не отправляет сжатые ответы, вы можете настроить Nginx для сжатия ответов перед их отправкой клиентам.
В этой статье описаны шаги по настройке Nginx в качестве обратного прокси-сервера.
Мы предполагаем, что на вашем Ubuntu, CentOS или Debian установлен 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 запроса передается на прокси-сервер.
Когда 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 в качестве обратного прокси-сервера к прокси-серверу без HTTP, вы можете использовать следующие директивы:
Одним из наиболее распространенных примеров является использование Nginx в качестве обратного прокси-сервера для PHP-FPM:
server { # ... other directives location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.2-fpm.sock; } }
Обслуживание контента через 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; }
Если у вас нет действующего сертификата SSL/TLS, вы можете использовать бесплатный SSL-сертификат Let’s Encrypt на вашем Ubuntu 18.04, CentOS 7 или Debian.
Вы узнали, как использовать Nginx в качестве обратного прокси. Мы также показали, как передавать дополнительные параметры на сервер, а также изменять и устанавливать различные поля заголовка в прокси-запросах.
Привет прочитал твою инструкцию и не понял схемы. Можно по подробней как спрятать сервер через прокси. Спасибо.