Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Linux/Debian] Debian i Nginx jako reverse proxy

DarekMich 09 Sie 2015 11:36 5814 0
  • #1 09 Sie 2015 11:36
    DarekMich
    Poziom 15  

    [Linux/Debian] Debian i Nginx jako reverse proxy

    Witam, chciałbym przedstawić najprostszy sposób na realizacje tzw "reverse proxy".

    Zakładając, że większość czytelników wie co to jest proxy ( w uproszczeniu jest to "bramka" za pośrednictwem której można dokonywać połączeń internetowych, adres ip pod jakim użytkownik jest "widziany" w internecie - można uzyskać dostęp do zasobów dostępnych tylko dla danej grupy IP - np tor, czy strony z innego kontynentu które są blokowane w naszym kraju: NP Rosja, Japonia, USA, GB itp).

    Reverse proxy wykorzystuje tę samą technikę jednak działa w drugą stronę.

    Największym zastosowaniem takiego rozwiązania jest wiele serwerów świadczących dostęp WWW jednak znajdujących się na różnych maszynach(wirtualnych lub fizycznych) za jedną wspólna bramką (współdzielone pojedyńczy zewnętrzny adres IP). Np komputer od naszego inteligentnego domu jest sterowany przez WWW,, jednocześnie posiadamy jeszcze serwer WWW,, będąc w sieci ze znajomymi / klientami oni również mogą udostępniać WWW ze swojego własnego serwera.

    Wadą oczywiście jest dodatkowe urządzenie(komputer/serwer), choć w dobie wirtualizacji dla osoby która chce takie rozwiązanie stosować nie wymaga to zbyt dużych nakładów środków(usługa może być uruchomiona równolegle na naszym podstawowym serwerze www na innym porcie niż domyślny 80).

    Dla naszego przykładu wymyślmy 2 domeny: domena.pl oraz domena kolega.pl (nie jestem właścicielem domen, te nazwy zostały użyte tutaj jedynie dla przykładu aplikacji w jakiej można zastosować reverse proxy).

    wewnętrzna pula IP w naszej sieci niech będzie 192.168.1.0/24

    Nasz router/bramka posiada 192.168.1.1
    Nasz serwer reverse proxy 192.168.1.2
    Nasz serwer www 192.168.1.100 dostępny pod domeną domena.pl/www.domena.pl
    Nasz inteligenty dom z adresem ip 192.168.1.10 dostępny pod adresem dom.domena.pl
    server www kolegi niech będzie 192.168.1.200 dostępny pod domeną kolega.pl/www.kolega.pl

    W naszej bramce ustawiamy przekierowania dla portu 80 na port 80 naszego serwera reverse proxy: BRAMKA:80 <-> 192.168.1.2:80

    Teraz zabierzmy się za konfiguracje naszego serwera:
    W tym celu należy pobrać płytę iso debiana tzw Netiso i instalujemy nasz system jedynie z usługą SSH, zupełnie nic innego nie będzie nam więcej potrzebne.

    Po poprawnie przeprowadzonej instalacji zabieramy się za wstępną konfigurację

    Kod: bash
    Zaloguj się, aby zobaczyć kod


    każde pojedyncze przekierowanie typu domena -> serwer wygląda następująco:

    Code:
    server {
    
        listen 80;
        server_name domena.pl www.domena.pl;

        location / {
            proxy_pass http://192.168.1.100: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;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }


    Zatem chcąc w pełni wykorzystać nasz przypadek przekierowań całość będzie wyglądała następująco:
    Code:

    server {
        listen 80;
        server_name domena.pl www.domena.pl;

        location / {
            proxy_pass http://192.168.1.100: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;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
    server {
        listen 80;
        server_name dom.domena.pl;

        location / {
            proxy_pass http://192.168.1.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;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
    server {
        listen 80;
        server_name kolega.pl www.kolega.pl;

        location / {
            proxy_pass http://192.168.1.200: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;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }


    chcąc zmienić adres www np dostępu do naszej aplikacji php dla poczty mail która np wygląda tak: http://192.168.1.100/webmail
    można ustawić np następujący wpis:

    Code:
    server {
    
        listen 80;
        server_name mail.domena.pl;

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


    oczywiście nie jesteśmy uwiązani jedynie do adresów IP, można stosować również zwykłe adresy www:

    Code:
    ...        
    
    proxy_pass http://domena.pl/webmail/;
    ...


    całość po naszej konfiguracji należy uaktywnić by program wiedział, żeby ją ładował po każdorazowym uruchomieniu:

    Kod: bash
    Zaloguj się, aby zobaczyć kod


    żeby sprawdzić czy nie zjedliśmy jakiegoś znaku w naszej konfiguracji i czy chociaż jej zapis jest poprawny możemy całość przetestować w następujący sposób:

    Kod: bash
    Zaloguj się, aby zobaczyć kod


    a następnie przełądować:

    sposób1 (jeżeli nginx już działa):

    Kod: bash
    Zaloguj się, aby zobaczyć kod


    jeżeli chcemy całkowicie go zrestartować:

    Kod: bash
    Zaloguj się, aby zobaczyć kod


    lub zatrzyma i uruchomić:

    Kod: bash
    Zaloguj się, aby zobaczyć kod




    Wszystkie polecenia są oczywiście wykonywane z poziomu root systemu.
    w tej instalacji wykorzystano opcję minimal z płyty netiso dystrybucji debiana. Żadne inne programy i części systemu nie zostały na nim zainstalowane oprócz serwera nginx.

    Ja u siebie zainstalowałem lighttpd wraz z obsługą php działającą na innym porcie który pozwala mi na późniejsza edycję z poziomu przeglądarki.

    wystarczy dać jedynie prawa zapisu do pliku /etc/nginx/sites-available/proxy oraz użytkownik pod którym uruchamiany jest lighttpd powinien posiadać uprawnienia SUDO bez wpisywania hasła (w celu przeładowania ngnix za pomocą funkcji exec w php).

    Zdaje sobie sprawę, ze istnieje możliwość uruchomienia wielu domen na jednym komputerze tzw virtualhost, jednak przypadek stosowania reverse proxy jest zupełnie inny, choć dla większości osób może wyglądać identycznie.

    Ja w ten sposób uzyskuje dostęp do własnego serwera poczty, www,, zarządzania NAS-em, routera/bramki, ogrzewania domem i wielu wielu innych, przy czym każde urządzenie jest odrębną maszyną działającą w sieci domowej a co za tym idzie posiadające własny adres ip.

    Większość zastosowań jest wizualizowana (dedykowana maszyna dla poczty, www,, bazy danych).

    Powyższy przypadek jest jedynie najprostszą metodą wykorzystania znanego serwer ngnix jako reverse proxy(w najprostszym zastosowaniu), tak samo można skonfigurować również apache, czy inne dedykowane wyłącznie do tego programy jak squid, varnish(te są z opcją buforowania zapytań - tzw cache).

    Pozdrawiam i życzę milej zabawy.

  • Ups