nginx как прокси для нескольких веб серверов

Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок

Модераторы: vadim64, terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Northward
проходил мимо
Сообщения: 7
Зарегистрирован: 2014-09-05 12:59:16

nginx как прокси для нескольких веб серверов

Непрочитанное сообщение Northward » 2015-08-06 14:51:00

Исходные данные: есть домен example.ru, есть 3 виртуальные машины (1-веб сервер apache с сайтом IP=192.168.1.1, 2-почтовый сервер, на нем же веб сервер apache с веб мордой для почтового сервера IP=192.168.1.2, 3-nginx IP=192.168.1.3). Все http запросы снаружи редиректятся на 1 виртуалку IP=192.168.1.1, все smtp, pop, imap соответственно на 2 виртуалку IP=192.168.1.2.
Задача: как настроить nginx, что бы при вводе в браузере адреса http://example.ru http запросы редиректились на 1 виртуалку IP=192.168.1.1, а при вводе http://example.ru/mail или http://mail.example.ru http запросы редиректились на виртуалку 2 IP=192.168.1.2.
Возможно ли такое настроить с помощью nginx, если да, то подкиньте пример конфига, если нет, то с помощью каких инструментов такое можно реализовать. Заранее благодарю за ответы.
Последний раз редактировалось f_andrey 2015-08-06 15:09:55, всего редактировалось 1 раз.
Причина: Автору. пожалуйста, выбирайте соответствующий раздел форума.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
skeletor
майор
Сообщения: 2548
Зарегистрирован: 2007-11-16 18:22:04

nginx как прокси для нескольких веб серверов

Непрочитанное сообщение skeletor » 2015-08-07 14:26:52

да, proxy_path

Northward
проходил мимо
Сообщения: 7
Зарегистрирован: 2014-09-05 12:59:16

nginx как прокси для нескольких веб серверов

Непрочитанное сообщение Northward » 2015-08-07 14:57:07

начал разбираться с proxy_path. Вот такой конфиг:

Код: Выделить всё

location /main/ {
                proxy_pass http://192.168.1.1: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;
                index index.php;
                rewrite 192.168.1.1 example.ru;
        }

        location /mail/ {
                proxy_pass http://192.168.1.2: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;
                index index.php;
                rewrite 192.168.1.2 example.ru;
        }
но чего-то не хватает, потому, что при переходе по адресу http://example.ru/main картинки с веб морды не подгружаются, при переходе по адресу http://example.ru/mail при авторизации через веб морду для почтового сервера выдается ошибка.

outlander
рядовой
Сообщения: 44
Зарегистрирован: 2009-10-15 23:01:33

nginx как прокси для нескольких веб серверов

Непрочитанное сообщение outlander » 2015-08-07 15:03:39

Апстрим вроде забыл
upstream 192.168.1.2 {
server сервер_куда_апстримишь;
}
server {
listen 80;
server_name 192.168.1.2;
root /dev/null;

Northward
проходил мимо
Сообщения: 7
Зарегистрирован: 2014-09-05 12:59:16

nginx как прокси для нескольких веб серверов

Непрочитанное сообщение Northward » 2015-08-07 15:38:36

С upstream конфиг стал еще проще:

Код: Выделить всё

upstream main {
        server 192.168.1.1;
}

upstream mail {
        server 192.168.1.2;
}

server {
        listen 80;

        server_name example.ru;

        root /var/www/html;
        index index.nginx-debian.html;

        location / {
                root /var/www/html;
        }

        location /main/ {
                proxy_pass http://main/;
        }

        location /mail/ {
                proxy_pass http://mail/;
        }
}
на веб морде http://example.ru/mail авторизация проходит нормально, все работает, а вот картинки с основного сайта http://example.ru/main по прежнему не подгружаются.

Аватара пользователя
Amadeus
ст. сержант
Сообщения: 332
Зарегистрирован: 2008-10-05 12:42:44
Откуда: Kiev

nginx как прокси для нескольких веб серверов

Непрочитанное сообщение Amadeus » 2015-08-07 15:50:37

Эх..)
1) Upstream можно использовать для подобного вида запросов, но это все равно что апач из rc.local методом

Код: Выделить всё

/usr/local/bin/apachectl start
Загружать. :)

2) Самый простой пример, proxy_parth, который будет отдавать нормально два сайта на разных урлах

Код: Выделить всё

location  / {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_pass   http://10.21.0.5:80;
            proxy_connect_timeout      120;
            proxy_send_timeout         120;
            proxy_read_timeout         120;
            proxy_send_lowat           12000;
            index  index.php index.html index.htm;
}



location  /test1 {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_pass   http://10.21.0.1:80;
            proxy_connect_timeout      120;
            proxy_send_timeout         120;
            proxy_read_timeout         120;
            proxy_send_lowat           12000;
            index  index.php index.html index.htm;
}

}
3) Картинки не загружаются у Вас, потому что

Код: Выделить всё

location  /test1
Т.е для начала посмотрите, какой линк на картинку полный в GET запросе
Нет ничего невозможного

Northward
проходил мимо
Сообщения: 7
Зарегистрирован: 2014-09-05 12:59:16

nginx как прокси для нескольких веб серверов

Непрочитанное сообщение Northward » 2015-08-07 16:06:02

да у картинок url http://example.ru/images/news/cg_3.JPG, а должен быть, что бы все работало http://example.ru/main/images/news/cg_3.JPG

Аватара пользователя
Amadeus
ст. сержант
Сообщения: 332
Зарегистрирован: 2008-10-05 12:42:44
Откуда: Kiev

nginx как прокси для нескольких веб серверов

Непрочитанное сообщение Amadeus » 2015-08-07 16:10:57

Ну вот, исправьте это, и будем все хорошо.

А насчет upstream - почитайте, документацию - его используют в полной мере для балансировки между хостами. Никто не говорит что так нельзя, но это как микроскопом забивать гвозди. что ли. Это ИМХО.
Нет ничего невозможного

Northward
проходил мимо
Сообщения: 7
Зарегистрирован: 2014-09-05 12:59:16

nginx как прокси для нескольких веб серверов

Непрочитанное сообщение Northward » 2015-08-07 16:32:52

Amadeus, я попробовал Ваш пример, с ним перестает работать веб морда почтовика, выдаёт ошибку соединения с сервером.