Nginx odwrotny proxy

Nginx odwrotny proxy

Co to jest odwrotny proxy?

Serwer proxy to ten, który rozmawia z Internetem w Twoim imieniu. Na przykład, jeśli sieć uczelni zablokowała https: // www.Facebook.com/ale domena https: // przykładProxy.COM jest nadal dostępny, a następnie możesz odwiedzić to drugie i przekazać wszystkie Twoje prośby o serwer na Facebooku na Facebooku i wysłać odpowiedzi z Facebooka z powrotem do przeglądarki.

Podsumowując, proxy wysyła żądania w imieniu jednego z większej liczby klientów na wszystkie serwery w Internecie. Odwrotna proxy zachowuje się w podobny sposób.

A Odwrotne proxy otrzymuje żądanie od wszystkich klientów w imieniu jednego lub więcej serwery. Więc jeśli masz kilka serwerów hostujących II wojnę światową.przykład.com i WW2.przykład.COM A odwrotni serwer proxy może przyjmować żądania w imieniu dwóch serwerów, przekazaj te żądania do ich odpowiednich punktów końcowych, w których odpowiedź jest generowana i wysyłana z powrotem do odwrotnej proxy, aby zostać przekazane klientom.

Ustawić

Zanim zaczniemy poprawić pliki konfiguracyjne Nginx i stworzyć odwrotny serwer proxy. Chcę ustawić w kamieniu, jak wygląda moja konfiguracja, więc kiedy próbujesz wdrożyć swój projekt, byłoby mniej mylące.

Użyłem platformy Digitalocean do kręcenia trzech VPS. Wszystkie są w tej samej sieci z własnym prywatnym adresem IP, a tylko jeden VPS ma statyczny publiczny adres IP (będzie to nasz odwrotny serwer proxy.)

VM/nazwa hosta Prywatny IP Publiczne IP Rola
Odwrotna proksja 10.135.123.187 159.89.108.14 Odwrotna proxy, działająca nginx
Węzeł 1 10.135.123.183 Nie dotyczy Uruchomienie pierwszej strony internetowej
Node-2 10.135.123.186 Nie dotyczy Uruchomienie drugiej strony internetowej

Dwie różne uruchomione strony internetowe mają nazwy domen WW1.Ranvirslog.com I WW2.Ranvirslog.com i oba ich rekordy wskazują na publiczny adres IP odwrotnego, i.E, 159.89.108.14

Idea prywatnego adresu IP polega na tym, że trzy maszyny wirtualne mogą rozmawiać ze sobą za pośrednictwem tego prywatnego adresu IP, ale zdalny użytkownik może uzyskać dostęp tylko do VM odwrotnego proxy Na publicznym adresie IP. Należy pamiętać o tym. Na przykład nie możesz ssh do żadnej maszyny wirtualnej za pomocą prywatnego adresu IP.

Ponadto, zarówno węzeł 1, jak i Node-2 mają serwer WWW Apache, który obsługuje dwie odrębne strony internetowe. Pomoże nam to odróżnić się od drugiego.

Pierwsza strona internetowa mówi: „Witryna 1 działa!!!"

Podobnie pokazuje to druga strona internetowa:

Twoje strony internetowe mogą się różnić, ale jeśli chcesz powtórzyć tę konfigurację jako punkt początkowy, uruchom apt instaluj apache2 w węźle-1 i węzła-2. Następnie edytuj plik/var/www/html/index.html, aby serwer WWW powiedział, co chcesz, aby powiedzieć.

VM odwrotnej prokroksy jest nadal nietknięta. Wszystkie maszyny wirtualne działają Ubuntu 18.04 LTS, ale możesz korzystać z dowolnego innego systemu operacyjnego. Możesz nawet naśladować to za pomocą kontenerów Docker. Tworząc na niej zdefiniowaną przez użytkownika sieć Docker Bridge i spawningowe kontenery, możesz przypisać każdemu kontenerowi prywatny adres IP i przekazać całą proxy HTTP/HTTPS do jednego kontenera, który byłby naszym kontenerem Nginx Reverse Contener.

Jak na razie dobrze.

Nginx Domyślna konfiguracja

Zacznijmy od zainstalowania Nginx na serwerze ReverseProxy, używam Ubuntu, więc apt jest moim menedżerem pakietów:

$ sudo apt instal nginx

Usuwanie domyślnej konfiguracji, jeśli używasz dystrybucji opartej na debian

Zanim przejdziemy dalej, niewielka uwaga na temat konfiguracji Nginx. Wszystkie różne pliki konfiguracyjne są przechowywane w /etc /nginx, w tym nginx.plik CONF, który jest głównym plik konfiguracyjnym. Jeśli spojrzymy na zawartość tego pliku (wewnątrz bloku HTTP), zauważysz następujące dwa wiersze:


obejmują/etc/nginx/conf.D/*.conf;
obejmują/etc/nginx/Sites-obsługę/*;

Drugi wiersz zawiera wszystkie pliki w katalogu obsługującym witryny do konfiguracji Nginx. Jest to standardowa praktyka w większości dystrybucji opartych na debian. Na przykład domyślna strona internetowa „Witamy w Nginx” ma odpowiedni plik o nazwie domyślny w lokalizacji/etc/nginx/witryn-dostępny/domyślny z symbolizacją do/etc/nginx/witryny/, ale nie potrzebujemy tego Domyślna strona internetowa, abyśmy mogli bezpiecznie usunąć symbol. Oryginał jest nadal dostępny w katalogu dostępnym w witrynach.

$ rm/etc/nginx/witryny-obserwowane/domyślne

Ale kiedy utworzymy odwrotną konfigurację proxy, zrobimy to w Conf.katalog d (z naszą nazwą pliku ma .rozszerzenie Con) To jest uniwersalne, i działa we wszystkich dystrybucjach nie tylko Debian lub Ubuntu.

Usuwanie domyślnej konfiguracji dla innych dystrybów

Jeśli nie korzystasz z dystrybucji opartej na debian, domyślnie znajdziesz Strona powitalna Konfiguracja at/etc/nginx/conf.d/domyślnie.Po prostu przenieś plik do miejsca bezpiecznego miejsca, jeśli chcesz go użyć w przyszłości (ponieważ to nie jest symbolizja)

$ mv/etc/nginx/conf.d/domyślnie.conf ~/default.conf

Czasami można go znaleźć w/etc/nginx/domyślnie.D Ponieważ ludzie po prostu nie mogą zgodzić się na jeden prosty standard! Musisz więc wykopać się w katalogu /etc /nginx, aby to rozgryźć.

Dodawanie odwrotnych bloków proxy

Jak wspomniano wcześniej, dwie różne nazwy domen, które hostuję za tym proxy

  1. Ranvirslog.com (strona internetowa 1) z IP 10.135.123.183
  2. Ranvirslog.com (strona internetowa 2) z IP 10.135.123.186

Utwórzmy jeden plik na stronę internetową w/etc/nginx/conf.D/ Folder. Więc jesteśmy dobrze zorganizowani.

$ touch/etc/nginx/conf.D/WW1.conf
$ touch/etc/nginx/conf.D/WW2.conf

Możesz nazwać pliki, co chcesz, o ile ma .conf na końcu swojej nazwy.

W pierwszym pliku WW1.COND Dodaj następujące wiersze:

serwer
Posłuchaj 80;
Posłuchaj [::]: 80;
Server_name WW1.Ranvirslog.com;
Lokalizacja /
proxy_pass http: // 10.135.123.183/;
Proxy_Buffering Off;
proxy_set_header x-real-ip $ remote_addr;

Instrukcje słuchania informują Nginx, aby słuchał w porcie 80 zarówno w przypadku IPv4, jak i IPv6. Następnie sprawdza, czy nazwa_wokowa jest WW1.Ranvirslog.com, a następnie blok lokalizacji rozpoczyna się i zastępuje żądanie do http: // 10.135.123.183/ z buforowaniem wyłączonym. Ponadto linia proxy_set_header zapewnia, że ​​oryginalny adres IP klienta jest przekazywany do serwera serwera proxied. Jest to pomocne na wypadek, gdybyś chciał obliczyć liczbę unikalnych odwiedzających itp. W przeciwnym razie serwer serwera miałby tylko jednego gościa - serwer Nginx.

Opcja buforowania i opcje set_header są całkowicie opcjonalne i są po prostu dodawane, aby proxying był jak najbardziej przezroczysty. Dla II wojny światowej.Ranvirslog.Witryna com, dodałem następującą konfigurację w/etc/nginx/conf.D/WW2.Conf:

serwer
Posłuchaj 80;
Posłuchaj [::]: 80;
Server_name WW2.Ranvirslog.com;
Lokalizacja /
proxy_pass http: // 10.135.123.186/;
Proxy_Buffering Off;
proxy_set_header x-real-ip $ remote_addr;

Zapisz zarówno pliki i sprawdź, czy ogólna konfiguracja jest poprawna, czy nie:

$ sudo nginx -t

Jeśli pojawią się błędy, wyjście powyższego polecenia pomoże Ci je znaleźć i naprawić. Teraz uruchom ponownie serwer:

$ Service nginx restart

I możesz sprawdzić, czy działało, czy nie, odwiedzając różne nazwy domen w przeglądarce i widząc wynik.

Wniosek

Przypadek użycia każdej osoby jest inny. Konfiguracja wymieniona powyżej może wymagać trochę poprawki, aby działać na Twój scenariusz. Może uruchamiasz wiele serwerów na tym samym hoście, ale w różnych portach, w takim przypadku proxy_pass… linia będzie miała http: // localhost: PortNumber/jako jego wartość.

Te szczegóły zależą w dużej mierze od twojego przypadku użycia. Więcej informacji na temat innych opcji i tunelek można znaleźć w oficjalnych dokumentach Nginx.