Puncte:3

nginx refuză toate cererile către o gazdă virtuală. cererile vin de la un forwarder nginx tcp

drapel gb

Rezumat - trebuie să adăugați IP-uri pe lista albă la mysite1.example.com. acum, când sunt adăugate, nu funcționează, deoarece fiecare cerere vine așa cum provine de la serverul de echilibrare a încărcăturii.

Lucrez la o configurare cu o gazdă Nginx cu poziție frontală cu un backend în amonte pentru a echilibra toate pachetele tcp de pe portul 443 către serverele backend.

Configurația nginx a serverului Loadbalancer care rulează nginx - serverul C este ca mai jos

curent {
        în amonte stream_backend {
                hash $remote_addr consistent;
                server 10.15.15.3:443; ## serverul A
                server 10.15.15.9:443; ## serverul B
        }


        Server {
                asculta 443;
                proxy_pass stream_backend;
                proxy_timeout 5s;
                proxy_connect_timeout 5s;
        }
}

serverul A și serverul B au mai jos nginx.conf. sunt servere identice cu aplicații.

are două gazde virtuale care rulează în fiecare. functioneaza bine.

http {

    Server {
        server_name mysite1.example.com;
        asculta *:443 ssl;
        asculta [::]:443 ssl;
        
        permite 123.45.85.220; # asta pare să nu funcționeze
        nega totul; # doar asta funcționează

        
        locație ^~ /static/ {
            ...
        }
        ...
        
        ssl_certificate file.pem;
        ssl_certificat_key file.key;
    }


    Server {
        server_name mysite2.example.com;
        asculta *:443 ssl;
        asculta [::]:443 ssl;
        
        
        locație /ceva {
            ...
        }
        locație /ceva2{
            ...
        }
        
        ssl_certificate file.pem;
        ssl_certificat_key file.key;
    }
}

ceea ce am nevoie este să pun pe lista albă doar câteva ip-uri la gazda virtuală mysite1.example.com. Problema cu care mă confrunt este că nginx care rulează pe Serverul A și B văd Ip-ul de echilibrare a încărcăturii ca IP-ul client. deci atunci când ați încercat să adăugați permis IP; nega totul. nu funcționează pentru nicio gazdă, deoarece are IP-ul de echilibrare a încărcăturii la toate solicitările ca IP client.

Poate cineva să mă ghideze cu privire la adăugarea de configurații IP proxy pentru a realiza configurarea menționată mai sus să funcționeze bine. Configurarea este completă, cu excepția problemei listei albe de IP.

p.s Terminarea SSl are loc la serverele back-end, serverul A și serverul B

Am căutat pe web și le-am găsit utile, dar tot nu mi-am putut da seama cum să funcționeze totul.

https://stackoverflow.com/questions/40873393/nginx-real-client-ip-to-tcp-stream-backend https://www.cyberciti.biz/faq/nginx-redirect-backend-traffic-based-upon-client-ip-address/

djdomi avatar
drapel za
Este foarte greu de înțeles cererea inițială - poate fi mai precis și formatați întrebarea pentru a fi mai ușor de citit?
drapel gb
a adăugat rezumatul și comentariile la config. trebuie să găsiți o modalitate de a pune pe lista albă IP-urile și de a respinge toate celelalte IP-uri din mysite.example.com
djdomi avatar
drapel za
modalitatea mai ușoară de a restricționa accesul este utilizarea de permite și refuza, dar mai întâi deny și apoi permit
Puncte:5
drapel cz

Acest lucru se întâmplă deoarece echilibratorul de încărcare nginx realizează o nouă conexiune TCP la serverele dvs. web nginx, determinând pierderea adresei IP originale a clientului.

Puteți rezolva acest lucru folosind protocolul PROXY. Acest protocol trimite informațiile originale despre adresa IP atunci când noua conexiune este deschisă, astfel încât serverele dvs. web să poată fi conștienți de aceasta.

Pentru a-l configura, trebuie să faceți următoarele modificări:

  • Pe echilibrul de încărcare, setați proxy_protocol activat;:

    curent {
        Server {
            proxy_pass undeva;
            proxy_protocol activat;
    
  • Pe serverul web, acceptați protocolul PROXY și activați funcționalitatea IP reală pentru adresa IP a echilibratorului de încărcare.

    Server {
        asculta 443 ssl http2 proxy_protocol;
        asculta [::]:443 ssl http2 proxy_protocol;
        real_ip_header proxy_protocol;
        set_real_ip_from <IP-ul echilibratorului de încărcare>;
    

Există modificări suplimentare pe care le puteți face protocolului PROXY în care le puteți găsi documentația nginx dar asta ar trebui să te înceapă și să rezolvi problema imediată.

Puncte:4
drapel tz

Abordarea mea ar fi:

Filtrați în echilibrul de încărcare folosind SNI:

Practic: SNI permite proxy-ului să vadă numele domeniului, fără a termina TLS. Aici este un ghid. Și aici sunt documente nginx pentru a o combina într-o soluție. Dacă poți face acest lucru, atunci poți nega pe baza $ssl_preread_server_name.

if ( $ssl_preread_server_name ~* mysite1.example.com && $remote_addr !~* <whitelisted_ip> ) {
           întoarce 404;

Modulul real_ip pare, de asemenea, o soluție bună.

Editați | ×

The Protocolul PROXY ar fi de fapt mai bun decât real_ip. Dar asta ar însemna totuși că serverele tale backend sunt lovite de solicitări pe care le-ar ajunge să le blocheze. Soluția SNI îi prinde la load-balancer.

drapel co
Retransmiterea pe SNI nu este de încredere, deoarece browserele acceptă extensiile ESNI și ECH
Puncte:0
drapel in

pare că proxy-ul tău nu trece IP-ul real încercați să adăugați acest parametru

proxy_set_header X-Real-IP $adresă_la distanță;

poti verifica jurnalele de acces care ip acolo?

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.