Jak korzystać z Nginx jako serwera proxy HTTP / HTTPS? [Zamknięte]

16

Czy można używać Nginx jako serwera proxy HTTP / HTTPS?

Vlad
źródło

Odpowiedzi:

14

Po kilku testach stwierdziłem, że działa dla mnie następująca konfiguracja.

server {
  server_name ~^(www\.)?(?<domain>.+)$;
  access_log /var/log/nginx/proxy.access.log main;
  error_log /var/log/nginx/proxy.error.log crit;
  listen 10.255.1.13:8080;
  resolver 8.8.8.8;
  location / {
    proxy_pass http://$domain;
    proxy_redirect off;
    proxy_set_header Host $host;
    # Optional headers 
    # proxy_set_header X-Real-IP $remote_addr;
    # proxy_set_header X-Forwarded-For
    # $proxy_add_x_forwarded_for;
  }
}

Ta konfiguracja działa tylko dla HTTP, a nie dla HTTPS.

Vlad
źródło
4
Dobra robota! Kilka wskazówek. 1: listen ... default_server. 2: server_name ""lub server_name _. 2: proxy_pass $scheme://$http_host. Ograniczenia: odkurzanie do potoków tylko z portem 80; nie przetwarza przekierowań.
Aleksander Azarow
Schemat $ jest użyteczny tylko wtedy, gdy vhost słucha również na https - ale wtedy masz do czynienia z pośrednimi ryzykami i błędami certyfikatu https, z którymi trzeba się zmagać ... oba są dużymi problemami bezpieczeństwa do rozważenia
anthonysomerset
8

myślę, że krótka odpowiedź brzmi „nie”, nie została napisana z myślą o przekazywaniu dalej

AKTUALIZACJA

aby wyjaśnić moje stwierdzenie powyżej:

NGINX nigdy nie został napisany z myślą o przekazywaniu danych do przodu - chociaż zdalnie możliwe jest, aby jakoś jerrigować konfigurację, aby zrobić to, co chcesz, musisz zrozumieć następujące ograniczenia:

  • Obsługa pamięci podręcznej prawie nie istnieje (jeden z głównych powodów używania proxy)
  • Nie można używać do żadnego innego ruchu niż port 80 (tj. Bez logowania się do skrzynek cpanel)
  • Brak obsługi ruchu opartego na protokole SSL
  • Brak obsługi standardowych nagłówków proxy i nagłówków pamięci podręcznej http (rozumiem, że po prostu są one przekazywane
  • Brak obsługi innych protokołów obsługujących serwery proxy - np. VPN itp

Możliwe inne kwestie, które są obecnie nieznane:

  • Możliwe jest DoS twojego serwera proxy, ponieważ nie ma realnej możliwości dokładnej szczegółowej kontroli / uwierzytelnienia dostępu (nginx obsługuje różne metody kontroli dostępu, ale nie jest jasne, jak to może się zachowywać w kontekście przekazywania proxy)
  • Możliwe zagrożenia bezpieczeństwa dla komputera, na którym jest zainstalowany Nginx, ponieważ mogą istnieć luki w zabezpieczeniach, które nie zostaną wzięte pod uwagę, ponieważ są używane w sposób, w jaki nie został zaprojektowany
anthonysomerset
źródło
Przeciwprzykład, patrz: ef.gy/using-nginx-as-a-proxy-server
kkurian
być może moja odpowiedź powinna być jaśniejsza, ponieważ nie została zaprojektowana do przekazywania dalej proxy - wysiłki w zakresie łatania małp nie będą oferować pełnego wsparcia proxy, takiego jak żądania proxy do niestandardowych portów (port 80)
anthonysomerset
3

Jeśli chcesz korzystać z proxy HTTP / HTTPS, powinieneś użyć Squid. Zostało napisane, aby zrobić dokładnie to. Nginx został napisany tak, aby działał jako odwrotny serwer proxy i moduł równoważenia obciążenia, ale nie jako proxy proxy.

MikeyB
źródło
Wiem o squid / oops / tinyproxy / itp. Po prostu zadaję to pytanie ze względu na zainteresowania akademickie
vlad