Nginx reverse proxy настройка centos

Обновлено: 03.07.2024

Настройка DNS

Установка nginx-сервера

Введите следующие команды консоли, что бы установить nginx:

Пример ответа в консоли сервера:

Настройка сервера web-сервера nginx как реверс-прокси

Отредактируйте файл /etc/nginx/conf.d/default.conf:

Добавив к нему, или изменим существующие строки:

Включаем nginx

Введите следующие команды:

Настраиваем брандмауэр

Для установки этих параметров произведем следующие действия:

/etc/sysctl.conf

Отредактируем /etc/sysctl.conf следующим образом:

Загрузим новые настройки ядра Linux следующей командой:

Для детальной информации об указанных директивах настройки ядра Linux читайте в соответствующем faq.

Безопасность сервера nginx

Топ-практики безопасности LAMP-стека

Заключение

Надеюсь, данное руководство послужит хорошим подспорьем при настройке виртуальных машин, а информация окажется, в достаточной мере, полезной, что бы вы смогли начать настройку собственного web-стека на вашем CentOS /RHEL сервере самостоятельно.

  • Пара строк о запуске iptables : основные команды
  • Пара строк об изменении sysctl-параметров ядра
  • Пара строк о расширении диапозона доступных IP-портов

Что мне самому сейчас интересно, т.е. что я планирую перевести в самые ближайшие дни — в нижнем списке. Если есть что-то, что требует перевода или дубляжа и имеет такую запредельную ценность, как доклады Yoshinori Matsunobu — предлагайте, будем читать/переводить.

  • Linux and H/W optimizations — Yoshinori Matsunobu web
  • MySQL and Linux Tuning — Better Together .pptweb

От вас — ссылка на материал, от меня — перевод и поклон.

Если знаете конференции, помимо (O’Reilly Velocity, NJ-LOPSA PICC, Tech Ed, LinuxCon), публикующие материалы/презентации/видео — расскажите нам всем, а мы будем выбирать темы на ваш/свой вкус и делать переводы.

Разберём, что такое Reverse Proxy. А также я покажу как настроить Nginx в качестве Reverse Proxy (обратного прокси сервера).

Теоретическая часть

Иногда бывает нужно чтобы различные url запросы обрабатывались на разных серверах, но первоначально приходили на один сервер. Например вы пробросили порт на своем роутере на один веб-сервер в вашей внутренней сети. Но хотите чтобы каталог /xxx открывался на втором веб-сервере, а /yyy открывался на третьем, и не хотите пробрасывать порты на каждый web-сервер. Получается вот такая схема:

Reverse Proxy

То что мы хотим сделать из сервера web1, называется reverse proxy (обратный прокси).

В то время как forward proxy (прямой прокси) работают от имени клиентов, то есть нам нужно настраивать браузер (клиент), чтобы тот ходил через прямой прокси сервер. Обратные же прокси работают от имени серверов, то есть клиент не знает, что он обращается на прокси сервер.

Reverse proxy принимает запросы от клиентов для того чтобы проксировать их на проксируемые web-сервера (как показано на рисунке).

В качестве обратного прокси сервера для веб серверов может выступать apace или nginx. Есть и другие решения, но в этой статье разберём настройку nginx. На официальном сайте nginx есть небольшой раздел, посвящённый reverse proxy.

Схема нашей лаборатории

Я буду использовать операционную систему Devuan, это облегченный вариант Debian без systemd. Про установку Devuan я уже писал здесь.

У нас будет три сервера:

  • proxy – reverse proxy (ip 192.168.5.82) – установлен nginx;
  • web1 – backend web server (ip 192.168.5.84) – установлен apache2;
  • web2 – backend web server (ip 192.168.5.83) – установлен apache2;

Практическая часть

Настраиваем nginx

Устанавливаем nginx на сервере proxy:

У меня установился nginx такой версией:

Для настройки прокси создадим новый виртуальный хост:

Разбор конфига

На основных настройках я не буду заострять внимание, потому как они не относятся к настройке reverse proxy. Если вкратце там мы указали какие порты слушает наш сервер, корень сайта, индексные страницы и имя сервера.

А следующие строки отвечают за настройку работы буферной памяти для проксируемой информации:

  • proxy_buffering on; – включаем буфер для прокси сервера;
  • proxy_buffer_size 8k; – размер буфера для первой части ответа получаемого от проксируемого сервера, такая часть ответа включает в себя только заголовки и хранится отдельно от остальной информации;
  • proxy_buffers 8 8k; – число и размер буферов для одного соединения, а вот сюда помещается ответ от проксируемого сервера.

Теперь разберем часть где мы указываем что проксировать и куда проксировать:

Отключим конфиг “default“, включим созданный нами конфиг “proxy” и перезагрузим службу сервера:

Настраиваем backend сервера

На обоих серверах проделаем одно и тоже! Во-первых установим apache2, затем создадим новый каталог /var/www/html/test. В этом каталоге сделаем индексную страничку index.html в которую запишем имя сервера. Вдобавок поменяем владельца нового каталога на www-data.

Проделываем следующее на обоих серверах:

Проверка

Используя адрес прокси сервера, откроем xxx:


Используя адрес прокси сервера, откроем yyy:


Как видим у нас открылись разные странички, которые лежат на разных серверах:

Резервирование серверов

Теперь сделаем так, чтобы один и тот же запрос ходил по следующим правилам:

Для этого поправим наш конфиг /etc/nginx/sites-enabled/proxy и перед блоком server добавим блок upstream:

В этом блоке указываем оба web-сервера. При этом webбудет основным сервером. Но если proxy в течении 120 секунд получит три ошибки при обращении к web1, то на 120 секунд все запросы пойдут на web2.

Ниже в блоке server, где мы указывали что на что проксировать (блоки location), поменяем записи. Вместо ip-адреса web-сервера укажем название апстрима, которое мы придумали выше (backend). Второй блок (location /yyy) – удаляем. Получится так:

Полностью конфиг будет выглядеть так:

Проверка резервирования

В браузере, используя адрес прокси сервера, открываем /xxx:


Затем отключаем сервер web1 и обновляем страничку:


Как видим мы перешли на второй сервер. Теперь включим обратно первый сервер и обновим страничку еще раз:


Теперь мы вернулись на первый сервер.

Таким образом вы можете создать два одинаковых веб сайта и в случае неисправности первого сервера, ваш сайт продолжит работать на втором сервере. Клиенты могут даже ничего не заметить.

Favorite

Добавить в избранное

Главное меню » Операционная система Linux » Настройка обратного прокси Nginx на Linux

(4 оценок, среднее: 4,00 из 5)

Как настроить блоков сервера Nginx на Ubuntu и CentOS

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

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

Предпосылки

Мы предполагаем, что на вашем Ubuntu, CentOS или Debian установлен Nginx.

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

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

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

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

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

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

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

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

Заключение

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

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

Если интересно, читаем дальше.

Всё описанное в этой статье приведено только в обучающих целях и не должно быть использовано для противоправных действий. Админитсрация сайта не несёт ответсвенность за действия третьих лиц, использующих инструкции из данной статьи. Все скриншоты и адреса сайтов в этой статье являются художественным вымыслом, совпадения с реальными адресами и сайтами случано.

Лучше всего показывать на реальных примерах. Нам понадобится VPS с минимальными характеристиками. Nginx не требователен к ресурсам. Главное, чтобы хватило лимитов трафика под Вашу задачу. В данной статье для скриншотов будет использоваться VPS с операционной системой CentOS 7. Для других операционных систем конфиги абсолютно аналогичны. Старайтесь и

пользовать минимальную конфигурацию операционной системы без дополнительных пакетов.


Как арендовать и первично настроить VPS описано здесь, здесь и здесь. Должен быть разрешён доступ к серверу по портам tcp/22, tcp/80 и tcp/443. Если вы используете эту статью для настройки файрволла, то конфиг ipt-set будет выглядеть так:

Ставим собственно Nginx


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

Вывод команды должен выглядеть так:


Если возникли проблемы и служба не запускается, то скорее всего вы используете не минимальный дистрибутив операционной системы и в системе уже установлен какой-то web-сервер, который занимает порт. Чтобы проверить это, установим сетевые утилиты

И проверим, кто занимает порт

В выводе команды вы можете увидеть, например:

А потом пробуем запустить службу Nginx как описано выше. Если всё хорошо, добавляем её в автозагрузку:

Переходим к конфигу Nginx. Откройте файл /etc/nginx/nginx.conf

Напомню, все манипуляции с фалами я делаю с помощью программ WinSCP, как это описано в этой статье. В качестве редактора рекомендую использовать программу Notepad++. Установите её на свой компьютер и укажите в настройках WinSCP путь к редактору в меню Options->Preferences->Editors. Он должен быть первым в списке для использования по умолчанию.


В конфиге уже есть секция


Вводим свой действующий e-mail. На него будут приходить в уведомления. Например, если срок сертификата истекает и его необходимо продлить.

Далее принимаем соглашение и отказываемся от рассылок, вводим, соответственно, A и N



Сохраним файл и перезапустим службу Nginx. Перезапускать службу нужно каждый раз, когда вы меняете конфиги Nginx.

В конфиге /etc/nginx/nginx.conf обратите внимание на строчку

Это значит, что если мы в папке /etc/nginx/conf.d/ разместим файл с расширением .conf, то он будет включен в основной конфиг и выполнен вместе с ним. Так и будем делать. Файл /etc/nginx/nginx.conf закрываем и больше не трогаем.

Категорически рекомендую использовать для проксирования только домены третьего уровня. Если какому-то регулятору не понравится то, что у вас по этому адресу расположено, он забанит именно домен третьего уровня и не забанит домен второго уровня. По крайней мере, скорее всего не забанит :).

Должны корректно пройти три пинга

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

смотрим, в чём ошибка. Обычно Nginx достаточно внятно пишет, что ему не нравиться, и даже укавает номер строки конфига, где есть ошибка.


Это позволит обеспечить корректную работу куков и нормальную авторизацию на проксируемом сайте. Получится так (показан кусок конфига, только с параметрами проксирования):

Сохряняем конфиг, перезапускаем службу Nginx и с помощью комбинации Ctrl+F5 (чтобы игнорировать кэш браузера) обновляем страницу в браузере. Получится как-то так 🙂


Если Вам нужно добавить ещё одно зеркало, то порядок действий такой:

Еще можно добавить ключ для алгоритма Диффи-Хелмана. Настроить автообновлене сертификатов. Как сделать, описано в этой статье.

Рубрики: Защита трафика и анонимность, Личная безопасность Теги: VPS, настройка Linux, letsencrypt, Nginx, revers-proxy

Читайте также: