Какво е обратен прокси?
Прокси сървърът е този, който говори от интернет от ваше име. Например, ако мрежата на вашия колеж е блокирала https: // www.facebook.com / но домейнът https: // exampleproxy.com все още е достъпен, след което можете да го посетите и той ще препрати всички ваши заявки за сървъри на Facebook към Facebook и ще изпрати отговорите от Facebook обратно във вашия браузър.
За да обобщим, прокси изпраща заявки от името на един от повече клиенти до всички сървъри в Интернет. Обратният прокси се държи по подобен начин.
A обратен прокси получава заявка от всички и от всички клиенти от името на един или повече сървъри. Така че, ако имате няколко сървъра, хостващи ww1.пример.com и ww2.пример.com обратният прокси сървър може да приема заявки от името на двата сървъра, да ги препраща към съответните им крайни точки, където се генерира отговорът и да се изпраща обратно към обратния прокси сървър, за да се препраща обратно към клиентите.
Конфигурацията
Преди да започнем да променяме конфигурационните файлове на Nginx и да направим обратен прокси сървър. Искам да задам в камък как изглежда моята настройка, така че когато се опитвате да реализирате своя дизайн, това би било по-малко объркващо.
Използвах платформата на DigitalOcean, за да завъртя три VPS. Всички те са в една и съща мрежа, всеки със собствен частен IP и само един VPS има статичен публичен IP (Това ще бъде нашият обратен прокси сървър.)
VM / Име на хост | Частен IP | Публичен IP | Роля |
Обратен прокси | 10.135.123.187 | 159.89.108.14 | Обратен прокси, работещ Nginx |
Възел-1 | 10.135.123.183 | Няма данни | Стартиране на първия уебсайт |
Възел-2 | 10.135.123.186 | Няма данни | Стартиране на втори уебсайт |
Двата различни уебсайта, които се изпълняват, имат имена на домейни ww1.ranvirslog.com и ww2.ranvirslog.com и двата им записа A сочат към публичния IP на reverseproxy, т.е.д, 159.89.108.14
Идеята зад частния IP е, че трите виртуални машини могат да говорят помежду си чрез този частен IP, но отдалечен потребител има достъп само до обратната прокси виртуална машина при публичния си IP. Това е важно да се има предвид. Например не можете да влезете в ssh в никоя виртуална машина, използвайки нейния частен IP.
Освен това Node-1 и Node-2 имат уеб сървър на Apache, обслужващ две отделни уеб страници. Това ще ни помогне да различаваме едно от друго.
Първият уебсайт казва „УЕБСАЙТ 1 РАБОТИ!!!”
По същия начин вторият уебсайт показва това:
Вашите уебсайтове може да се различават, но ако искате да възпроизведете тази настройка като отправна точка, стартирайте apt install apache2 на Node-1 и Node-2. След това редактирайте файла / var / www / html / index.html, така че уеб сървърът да казва всичко, което искате да каже.
Обратната прокси VM все още е недокосната. Всички виртуални машини работят с Ubuntu 18.04 LTS, но можете да използвате всяка друга операционна система, която искате. Можете дори да емулирате това, като използвате контейнери на Docker. Чрез създаване на дефинирана от потребителя мостова мрежа на Docker и размножаване на контейнери върху нея, можете да присвоите на всеки контейнер частен IP и да препратите целия HTTP / HTTPS прокси до един контейнер, който би бил нашият Nginx обратен прокси контейнер.
Дотук добре.
Конфигурация по подразбиране на Nginx
Нека започнем с инсталиране на Nginx на обратния прокси сървър, използвам Ubuntu, така че apt е моят мениджър на пакети:
$ sudo apt инсталира nginxПремахване на конфигурацията по подразбиране, ако използвате дистрибуция, базирана на Debian
Преди да продължим по-нататък, малка бележка за конфигурацията на Nginx. Всички различни конфигурационни файлове се съхраняват в / etc / nginx, включително nginx.conf, който е основният конфигурационен файл. Ако разгледаме съдържанието на този файл (вътре в http блока), ще забележите следните два реда:
..включва / etc / nginx / conf.д/*.conf;
включва / etc / nginx / sites-enabled / *;
..
Вторият ред включва всички файлове в директорията с активирани сайтове към конфигурацията на Nginx. Това е стандартната практика за повечето дистрибуции, базирани на Debian. Например уеб страницата „Добре дошли в Nginx“ по подразбиране има съответния файл с име по подразбиране в местоположението / etc / nginx / sites-available / default със символна връзка към / etc / nginx / sites-enabled /, но ние не се нуждаем от това уеб страница по подразбиране, за да можем безопасно да премахнем символната връзка. Оригиналът все още е достъпен в директорията, достъпна за сайтове.
$ rm / etc / nginx / sites-enabled / defaultНо когато ще създадем обратна прокси конфигурация, ще го направим в conf.d директория (с името на нашия файл с .conf разширение) това е универсално, и работи във всички дистрибуции, не само в Debian или Ubuntu.
Премахване на конфигурацията по подразбиране за други дистрибуции
Ако не използвате дистрибуция, базирана на Debian, ще намерите подразбирането Страница за добре дошли конфигурация в / etc / nginx / conf.г / по подразбиране.conf просто преместете файла на безопасно място, ако искате да го използвате в бъдеще (тъй като това не е символна връзка)
$ mv / etc / nginx / conf.г / по подразбиране.conf ~ / по подразбиране.конфПонякога може да бъде намерен в / etc / nginx / default.г, защото хората просто не могат да се споразумеят за един прост стандарт! Така че трябва да направите малко ровене в директорията / etc / nginx, за да разберете това.
Добавяне на обратни прокси блокове
Както беше посочено по-горе, двете различни имена на домейни, които хоствам зад този прокси, са
- ranvirslog.com (УЕБСАЙТ 1) с IP 10.135.123.183
- ranvirslog.com (УЕБСАЙТ 2) с IP 10.135.123.186
Така че нека създадем по един файл на уебсайт в / etc / nginx / conf.г / папка. Така че сме добре организирани.
$ touch / etc / nginx / conf.г / ww1.конф$ touch / etc / nginx / conf.г / ww2.конф
Можете да назовавате файловете каквото пожелаете, стига да има .conf в края на името си.
В първия файл ww1.conf добавете следните редове:
сървърслушайте 80;
слушайте [::]: 80;
име на сървър ww1.ranvirslog.com;
местоположение /
proxy_pass http: // 10.135.123.183 /;
прокси_буфериране изключено;
proxy_set_header X-Real-IP $ remote_addr;
Операторите за слушане казват на Nginx да слуша на порт 80 както за IPv4, така и за IPv6 случаи. След това проверява дали името на сървъра е ww1.ranvirslog.com, след това блокът за местоположение започва и проксира заявката за http: // 10.135.123.183 / с изключен буфер. Освен това линията proxy_set_header… гарантира, че оригиналният IP адрес на клиента се препраща към проксирания сървър. Това е полезно в случай, че искате да изчислите броя на уникалните посетители и т.н. В противен случай прокси сървърът ще има само един посетител - сървърът Nginx.
Опцията за буфериране и опциите set_header са напълно незадължителни и са просто добавени, за да направят проксирането възможно най-прозрачно. За ww2.ranvirslog.com уебсайт, добавих следната конфигурация в / etc / nginx / conf.г / ww2.conf:
сървърслушайте 80;
слушайте [::]: 80;
име на сървър ww2.ranvirslog.com;
местоположение /
proxy_pass http: // 10.135.123.186 /;
прокси_буфериране изключено;
proxy_set_header X-Real-IP $ remote_addr;
Запазете и двете файлове и проверете дали общата конфигурация е валидна или не:
$ sudo nginx -tАко има грешки, изходът на горната команда ще ви помогне да ги намерите и поправите. Сега рестартирайте сървъра:
$ service nginx рестартиранеИ можете да тествате дали е работило или не, като посетите различните имена на домейни във вашия браузър и видите резултата.
Заключение
Случаят на употреба на всеки индивид е различен. Споменатата по-горе конфигурация може да се нуждае от малко промяна, за да работи за вашия сценарий. Може би изпълнявате множество сървъри на един и същ хост, но на различни портове, в този случай редът proxy_pass ... ще има http: // localhost: portNumber / като стойност.
Тези подробности зависят много от вашия случай на употреба. За повече подробности относно други опции и мелодии вижте официалните документи на Nginx.