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/
.