Проксирование запросов в nginx с помощью proxy_pass

Рассмотрим такой пример. Допустим, у нас есть 1 сервер виртуализации , где установлен Debian+Proxmox с локальным IP 192.168.88.200 . В виртуальной среде Proxmox развернуто 2 контейнера на каждом из которых находится по 1 сайту. К примеру: example1.com расположенный на контейнере 101 c локальным ip адресом 192.168.88.10 и example2.com расположенный на контейнере 102 c локальным ip адресом 192.168.88.20 и один внешний белый ip адрес, в примере мы будем использовать 88.251.4.18. Итого:

Proxmox 192.168.88.200
Контейнер 101 с сайтом example1.com  192.168.88.10
Контейнер 102 с сайтом example2.com  192.168.88.20
Внешний белый ip адрес  88.251.4.18

Задача: Заставить работать 2 сайта на 1 внешнем ip адресе.

Решение: Создаем на Proxmox новый контейнер в нашем случаи с порядковым номером 103. В качестве операционной системы возьмем debian 10 и после установления ОС дополнительно устанавливаем туда nginx. Он и будет обрабатывать все запросы и проксировать их на контейнеры.

Переходим к настройке. На сервере 103 переходим к настройке ngnix:

/etc/nginx/sites-available

создаем конфигурацию (config)

reverse
server {
    listen 80;
    server_name example1.com;
    server_name_in_redirect on;
    access_log /var/log/nginx/example1.com;
    error_log /var/log/nginx/example1.com;

    location / {
        proxy_pass http://192.168.88.10:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
server {
    listen 80;
    server_name example2.com;
    server_name_in_redirect on;
    access_log /var/log/nginx/example2.com.log;
    error_log /var/log/nginx/example2.com.log;


    location / {
        proxy_pass  http://192.168.88.20:80;
        proxy_set_header    Host            $host;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

где listen 80; это порт приема трафика

название вашего домена server_name example1.com;

сохранение логов (log file) из access_log /var/log/nginx/example1.com;

здесь указываем куда будет транслироваться трафик на виртуальный сервер proxy_pass http://192.168.88.10:80;

Для изменения или создания заголовков прокси соединения воспользуйтесь директивой proxy_set_header. Например, чтобы отредактировать заголовок host и добавить в него несколько часто встречающихся заголовков при проксировании, мы можем поступить следующим образом:

заголовок host соответствующего запроса будет изменен на значение переменной $host. Которое должно содержать изначально запрошенный host. Заголовок X-Forwarded-Proto дает вышестоящему серверу знать о том, какая схема была использована при изначальном запросе (http/https);

X-Real-IP имеет значение IP адреса клиента. Заголовок X-Forwarded-For содержит список прокси серверов, по которым прошел запрос до настоящего момента. В данном примере мы присваиваем ему значение переменной $proxy_add_x_forwarded_for. Она содержит в себе полученный заголовок X-Forwarder-For плюс добавляет свой сервер в этот список.

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

Для ускорения ответа запроса можно использовать memcached

location /page {
        set            $memcached_key "$uri?$args";
        memcached_pass 192.168.89.252:11211;
        error_page     404 502 504 = @fallback;
	error_page        404 = @dynamic_request;
    }

Вставить его в основной конфиг proxy между location

0

Автор публикации

не в сети 5 месяцев

Чип и Дел Чип и Дел

0
Комментарии: 0Публикации: 10Регистрация: 02-11-2019

Проксирование запросов в nginx с помощью proxy_pass: 1 комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Авторизация
*
*

0   +   6   =  
Регистрация
*
*
*
Генерация пароля
%d такие блоггеры, как: