Пусть молчит тот, кто дал. Пусть говорит тот, кто получил (М. Сервантес).

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

4 мин для чтения
FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
3 февраля 2019
Как настроить блоков сервера Nginx на Ubuntu и CentOS
Обратный прокси-сервер – это служба, которая принимает запрос клиента, отправляет запрос одному или нескольким прокси-серверам, извлекает ответ и доставляет ответ сервера клиенту.

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

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

Балансировка нагрузки – Nginx может выполнять балансировку нагрузки для распределения клиентских запросов по прокси-серверам, что повышает производительность, масштабируемость и надежность. Кэширование – Nginx может кэшировать контент, полученный от ответов прокси-серверов, и использовать его для ответа клиентам, не обращаясь к прокси-серверу для получения одного и того же контента каждый раз. Завершение SSL – Nginx может выступать в качестве конечной точки SSL для соединений с клиентами. Он будет обрабатывать и дешифровать входящие соединения SSL и шифровать ответы прокси-сервера. Сжатие – если прокси-сервер не отправляет сжатые ответы, вы можете настроить Nginx для сжатия ответов перед их отправкой клиентам.

В этой статье описаны шаги по настройке Nginx в качестве обратного прокси-сервера.

 

Мы предполагаем, что на вашем UbuntuCentOS или 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, вы можете использовать следующие директивы:

  • 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;
    }
}

Обслуживание контента через 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”- эти поля заголовка обязательны, если ваше приложение использует веб-сокеты.
  • 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 – Определяет исходный порт, запрошенный клиентом.

Если у вас нет действующего сертификата SSL/TLS, вы можете использовать  бесплатный SSL-сертификат Let’s Encrypt на вашем Ubuntu 18.04, CentOS 7 или Debian.

 

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Просмотров: 66

Если статья понравилась, то поделитесь ей в социальных сетях:

Отправить ответ

Войти с помощью: 
avatar
  Подписаться  
Уведомление о

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close