Puncte:0

nginx reverse proxy 404 cu două servere

drapel va

Am o problemă cu configurația mea NGINX. Am două servere web care rulează pe servere Windows. Care este apelat din exterior cu 443 și apoi ar trebui să fie redirecționat către server cu 41001. Al doilea bloc de server ar trebui să fie numit FQDN și nginx ar trebui să îl trimită la FQDN.com/test. Intern si extern.

Pe primul bloc de server, acest lucru durează o veșnicie să se încarce și nimic nu pare să funcționeze. Cu al doilea bloc de server primesc un 404 înapoi.

Așa arată configurațiile mele și jurnalele de erori

Server {
    nume_server test.example.com;
    returnează 301 http://test.example.com/test$request_uri;
    }


Server {
        asculta 443 ssl http2;
        asculta [::]:443 ssl http2;
 
        access_log /var/log/nginx/test_service_access.log;
        error_log /var/log/nginx/test_service_error.log;

        ssl_certificate /etc/nginx/ssl/test.com.pem;
        ssl_certificate_key /etc/nginx/ssl/test.key;
        ssl_session_timeout 1d;
        ssl_session_tickets off;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-DHACH3820:-DHACH3840: -RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-G> ssl_prefer_server_ciphers dezactivat;

        locație /test {
        proxy_pass https://10.10.10.10/test/;
        }

        client_max_body_size 0;
        proxy_connect_timeout 90s;
        proxy_send_timeout 90s;
        proxy_read_timeout 90s;
        send_timeout 90;
    }

Server {
        nume_server test2.example.com;
        # Redirecționează toate solicitările HTTP către HTTPS cu un răspuns 301 Mutat permanent.
        returnează 301 https://test2.example.com$request_uri;
}

Server {
        asculta 443 ssl http2;
        asculta [::]:443 ssl http2;
        nume_server test2.example.com;

        access_log /var/log/nginx/test2_service_access.log;
        error_log /var/log/nginx/test2_service_error.log;

        certificat_ssl /etc/nginx/ssl/test2.example.com.pem;
        ssl_certificate_key /etc/nginx/ssl/test2example.key;

# ssl_session_cache shared:SSL:50m;
        ssl_session_timeout 1d;
        ssl_session_tickets off;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-DHACH3820:-DHACH3840: -RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-G>
        ssl_prefer_server_ciphers dezactivat;

        add_header Strict-Transport-Security max-age=15768000;

        Locație / {

# resolver 10.150.10.10 8.8.8.8;
        proxy_pass https://test2.example.com:41001/;
        proxy_redirect https://test2.example.com:41001/ https://test2.example.com/;

        client_max_body_size 0;
        proxy_connect_timeout 90s;
        proxy_send_timeout 90s;
        proxy_read_timeout 90s;
        send_timeout 90;
        }
    }
}

M-am uitat la error.logs și asta a apărut.

2022/02/13 12:54:58 [eroare] 2620#2620: *15 open() „/usr/share/nginx/html/DocuWare/Platform/LoginRedirect” a eșuat (2: Nu există un astfel de fișier sau director), client : xxx.xxx.xxx.xxx, server: , cerere: „GET /DocuWare/Platform/LoginRedirect?returnUrl=%2fdocuware%2fPlatform%2fWebClient%2f HTTP/2.0”, gazdă: „test2.domain.com”, referitor: „https://test.domain.com/docuware/Platform/WebClient/”

2022/02/13 12:35:17 [eroare] 2541#2541: *1 expirat în amonte (110: Conexiune a expirat) în timpul conectării la amonte, client:

In ceea ce priveste prima eroare, nu inteleg exact ce este in neregula

După cum am înțeles, trebuie să definesc un upstream pentru serverul cu portul 41001, este corect?

Oare imi scapa ceva aici?

ACTUALIZAȚI

Mi-am ajustat configurația la cea mai mică, astfel încât să pot testa asta. După cum urmează, configurația mea arată așa

#################################################################### ####################
   abacus în amonte {
      server 10.120.50.11; 
   }
   
   Server {
      asculta 80;
      nume_server abacus.example.com;
      returnează 301 https://abacus.example.com$request_uri;
   }
    
   Server {
      asculta 443 ssl;
      nume_server abacus.example.com;
      ssl_certificate /etc/nginx/ssl/xxx.com.pem;
      ssl_certificate_key /etc/nginx/ssl/xxx.key;
      ssl_protocols TLSv1.2 TLSv1.3;

      access_log /var/log/nginx/abacus_service_access.log;
      error_log /var/log/nginx/abacus_service_error.log;

   Locație / {
      proxy_pass http://abacus;
   }
}

#################################################################### #####################
   docuware upstream {
      server 10.120.50.10; 
   }
   
   Server {
      asculta 80;
      nume_server docuware.example.com;
      returnează 301 https://docuware.example.com$request_uri;
   }
   
   Server {
      asculta 443 ssl;
      nume_server docuware.example.com;
      ssl_certificate /etc/nginx/ssl/xxx.pem;
      ssl_certificate_key /etc/nginx/ssl/xxx.key;
      ssl_protocols TLSv1.2 TLSv1.3;

      access_log /var/log/nginx/docuware_service_access.log;
      error_log /var/log/nginx/docuware_service_error.log;
      
   Locație / {
      proxy_pass http://docuware/docuware;
   }
}
}

Când accesez serverul „abacus.example.com”, ajung la pagina de pornire a IIS. Deci aici trebuie să definesc că vin din afară cu 443 (HTTPS) și sunt redirecționat către portul 23001.

Dacă accesez serverul „docuware.example.com/docuware”, primesc un 404 - Fișierul sau directorul nu a fost găsit. Deci aici trebuie să definesc cumva că poate accesa serverul cu subpath.

În rețeaua internă aceasta funcționează fără probleme. Sunt redirecționat către „docuware.example.com/DocuWare/Platform/WebClient/ClientAccount/xxx”.

Vedeți aici ce trebuie să ajustez? M-am bătut cu capul de ore întregi.

djdomi avatar
drapel za
proxy_pass este setat greșit
drapel us
Vă rugăm să adăugați exemple de solicitări, adresa URL exactă pe care încercați să o solicitați și care este rezultatul așteptat și rezultatul real.
drapel va
Mi-am editat postarea pentru mai multe informații
drapel va
@TeroKilkanen A adăugat actualizările pentru solicitări
drapel us
Folosiți exact aceeași adresă URL când accesați prin rețea internă și rețea externă?
drapel va
@TeroKilkanen Da. Din interior accesez cu „https://docuware.domain.com/docuware” și „https://abacus.domain.com” și funcționează. Deci, de aceea mă chinui cum pot face ca asta să funcționeze din exterior. Pentru serverul Abacus ar funcționa un proxypass cu „:23001” și redirecționare? și pentru docuware-ul cu subpath "/docuware" de la extern... chiar nu am nicio idee cum să rezolv asta.
Puncte:0
drapel cl

Prima eroare spune că nginx nu poate găsi fișierul specific în locația pe care o are. O modalitate de a rezolva acest lucru este de a oferi nginx un folder specific pentru fișierele care sunt solicitate. Așa funcționează serverele web.

Nu sunt sigur dacă puteți redirecționa utilizatorul cu nginx de la traficul non-SSL la traficul SSL. Atât cererea, cât și răspunsul ar trebui să fie aceleași criptate/necriptate, indiferent de câți pași sunt pentru a accesa serverul țintă din browserul web al utilizatorului.

Uitați-vă în jurnalele nginx dacă nginx intră în buclă, în timp ce cererea este trimisă către același server care este redirecționat.

drapel va
si cum pot sa fac asta? Am reușit acum să obțin prima pagină IIS cu „docuware.domain.com/docuware”, dar acum sunt blocat din nou...
pbies avatar
drapel cl
@Cyanmodex9 ce faci?
Puncte:0
drapel us

Un lucru care este probabil necesar este setarea antetului gazdă adecvat pentru anteturile proxy:

Pentru abacus:

Locație / {
    proxy_set_header Gazdă abacus.example.com;
    proxy_pass http://abacus;
}

Pentru docuware:

locație / docuware {
    proxy_set_header Gazdă docuware.example.com;
    proxy_pass http://docuware/docuware/;
}
drapel va
Mulțumesc mult! asta mi-a rezolvat problema cu abacul. Acum merge. Încă mai am probleme cu docuware. Primesc o pagină 404 care nu a fost găsită, dar URL-ul se schimbă în „/Platform/WebClient/”. Jurnalul de erori spune „/usr/share/nginx/html/Platform/WebClient/index.html” nu a fost găsit”
drapel us
Care este adresa URL completă în care se schimbă?
drapel va
salut Tero! Mulțumesc mult pentru cunoștințe și ajutor. Am reușit să-l fac să funcționeze. Am setat gazda antetului și proxy_pass-ul cu / la sfârșit și am setat read_timeout.Să știi că totul funcționează! Ultimul lucru este să schimbați automat URL-ul „docuware.domain.com” în „docuware.domain.com/docuware” atunci când îl accesați prin browser. cred ca pot rezolva asta :)

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.