Puncte:0

Serverul Nginx sub echilibrul de încărcare, când /folderul este găsit redirecționează către /folder/, dar modifică adresa URL a gazdei

drapel yt

Am configurarea serverului nginx în google cloud. Serverul este accesat de pe un domeniu gazdă prin indicarea gcloud.

Ca aceasta:

https://server.com/test/ indică un grup de instanțe cu una dintre instanțe cu ip http://39.99.99.99.55/project/

Și totul funcționează bine dacă nu intri

https://server.com/test/folder fără bara oblică principală

Când faceți asta, serverul gazdă redirecționează către https://server.com/project/folder/ care nu este un folder alocat pe domeniul gazdă.

Dar dacă îl introduci corect: https://server.com/test/folder/ funcționează corect rezolvând la serverul IP și obținerea rezultatului.

Deci, serverul cu nginx încearcă să găsească folderul și face redirecționarea.

Cu toate acestea, nu vreau să se redirecționeze folosind calea relativă a serverului, vreau să aibă calea gazdă echilibrată, astfel: https://server.com/test/folder ar trebui să redirecționeze către https://server.com/test/folder/ nu https://server.com/project/folder/

Iată fișierul meu de configurare nginx:

Server {
    asculta 80 default_server;
    asculta [::]:80 default_server;

    root /home/.www;

    # Adăugați index.php la listă dacă utilizați PHP
    index index.php index.html;

    numele serverului _;

    # autoindex activat;

    # serviți direct fișiere statice
    locație ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ {
        access_log off;
        #expires max;
    }

    error_log /home/.log/xerror.log;

    access_log /home/.log/xaccess.log compresie;

    # include proiectul
    locație ^~ /proiect {
      alias /home/.www/project/public;
      try_files $uri $uri/ @proiect;

      locație ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_read_timeout 180;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $request_filename;
      }
    }

    locație @proiect {
        rescrie /project/(.*)$ /project/index.php ultimul;
    }



    Locație / {

        # Mai întâi încercați să serviți cererea ca fișier, apoi
        # ca director, apoi reveniți la afișarea unui 404.
        try_files $uri $uri/ /index.php?$args;

    }

    # treceți scripturile PHP către serverul FastCGI
    locație ~ \.php$ {
        include snippets/fastcgi-php.conf;

        # Cu php-fpm (sau alte socket-uri Unix):
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        fastcgi_read_timeout 180;
        # Cu php-cgi (sau alte socket-uri tcp):
        # fastcgi_pass 127.0.0.1:9000;
    }
} 

Cum să faci ca serverul să nu redirecționeze așa la găsirea folderului?

Editare 1 @Ivan Shatsky

a cerut să primească curl -v server.com/test/folder ieșire din requset, aici este:

* Încercând 35.***.160.34:443...
* TCP_NODELAY setat
* Conectat la server.com (35.***.160.34) portul 443 (#0)
* ALPN, oferind h2
* ALPN, oferind http/1.1
* setați cu succes locațiile de verificare a certificatelor:
* CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), strângere de mână TLS, salut client (1):
* TLSv1.3 (IN), strângere de mână TLS, salut server (2):
* TLSv1.3 (IN), strângere de mână TLS, extensii criptate (8):
* TLSv1.3 (IN), strângere de mână TLS, Certificat (11):
* TLSv1.3 (IN), strângere de mână TLS, verificare CERT (15):
* TLSv1.3 (IN), strângere de mână TLS, Terminat (20):
* TLSv1.3 (OUT), TLS schimbă cifra, Schimbă specificația cifrului (1):
* TLSv1.3 (OUT), TLS handshake, Terminat (20):
* Conexiune SSL folosind TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server acceptat să utilizeze h2
* Certificat de server:
* subiect: CN=server.com
* data începerii: 25 aprilie 19:19:01 2022 GMT
* data expirării: 24 iulie 19:19:00 2022 GMT
* subjectAltName: gazda „server.com” a corespuns certificatului „server.com”
* emitent: C=US; O=Google Trust Services LLC; CN=GTS CA 1D4
* Verificare certificat SSL ok.
* Utilizând HTTP2, serverul acceptă utilizarea multiplă
* Starea conexiunii a fost schimbată (HTTP/2 confirmat)
* Copierea datelor HTTP/2 din bufferul de flux în bufferul de conexiune după actualizare: len=0
* Folosind ID-ul fluxului: 1 (mâner ușor 0x556617a0f2f0)
> GET /test/quasar HTTP/2
> Gazdă: server.com
> user-agent: curl/7.68.0
> accept: */*
>
* TLSv1.3 (IN), strângere de mână TLS, bilet pentru sesiune de știri (4):
* TLSv1.3 (IN), strângere de mână TLS, bilet pentru sesiune de știri (4):
* vechiul ID de sesiune SSL este învechit, se elimină
* Starea conexiunii a fost schimbată (MAX_CONCURRENT_STREAMS == 100)!
< HTTP/2 301
< server: nginx/1.20.2
< data: Luni, 23 mai 2022 21:04:50 GMT
< tipul de conținut: text/html
< lungimea conținutului: 169
< locație: http://server.com/project/folder/
< prin: 1.1 google
< alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
<
<html>
<head><title>301 mutat permanent</title></head>
<corp>
<center><h1>301 mutat permanent</h1></center>
<hr><center>nginx/1.20.2</center>
</corp>
</html>
* Conexiunea #0 la host server.com a rămas intactă

Deci, se pare că ajunge la serverul meu nginx și returnează redirecționarea 301, dar sub folderul pe care îl are în interior folderul /project/folder/ care este corect pentru acel server, dar devine incorect odată ce se propagă la serverul gazdă, care ar trebui să fie server.com/test/folder/ si nu server.com/project/folder/.

Ivan Shatsky avatar
drapel gr
Nu văd nimic în configurația dvs. care poate produce acel tip de redirecționare. Puteți rula `curl -v https://server.com/test/folder` și adăugați rezultatul la întrebarea dvs.?
drapel yt
@IvanShatsky, tocmai a adăugat rezultatul „curl -v”.
Ivan Shatsky avatar
drapel gr
Sunt complet pierdut. În primul rând, vă plângeți că `https://server.com/test/folder` redirecționează către `https://server.com/project/folder/`. Apoi, afișați cererea în care „https://server.com/project/folder” este redirecționat către „https://server.com/project/folder/” (care este un comportament așteptat dacă acel „/home/ .www/project/folder` este un director existent pe sistemul dvs. de fișiere local. Care este întrebarea dvs. de fapt?
drapel yt
@IvanShatsky Ne pare rău că am editat editarea, am solicitat la `https://server.com/test/folder` și redirecționează către `https://server.com/project/folder/`. Nu am greșit în cererea mea de bucle, tocmai când ți-am tastat răspunsul.
drapel yt
@IvanShatsky, orice idee ar fi apreciată, mulțumesc
Richard Smith avatar
drapel jp
Cea mai simplă soluție este să folosim `test` în loc de `project` în configurația dvs. Nginx, astfel încât gcloud indică `/test` la `/test`.

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.