Mój plik konfiguracyjny nginx wygląda następująco:
server {
listen 80;
listen 443 ssl;
server_name XXX.com;
error_log /log/nginx/xxx.com_error.log;
access_log /log/nginx/xxx.com_access.log main;
root /data/www/;
index index.php index.html index.htm;
location ~ \.php$ {
add_header X-Frame-Options SAMEORIGIN;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Musimy skonfigurować nginx, aby spełnić następujące wymagania:
1 、 Jeśli adres URL nie ma prefiksu „/api/mobile/index.php" ,, a port żądania to 80, przekieruj go do https 2 、 Jeśli adres URL ma prefiks” /api/mobile/index.php"; wystarczy kontynuować
Dodaję więc zawartość do pliku konfiguracyjnego:
location ~ ^(?!/api/mobile/index\.php).*$ {
if ($server_port = "80") {
return 301 https://$server_name$request_uri;
}
rewrite /* $server_name$reqeust_uri last;
}
Teraz zawartość pliku konfiguracyjnego to:
server {
listen 80;
listen 443 ssl;
server_name XXX.com;
error_log /log/nginx/xxx.com_error.log;
access_log /log/nginx/xxx.com_access.log main;
root /data/www/;
index index.php index.html index.htm;
location ~ ^(?!/api/mobile/index\.php).*$ {
if ($server_port = "80") {
return 301 https://$server_name$request_uri;
}
rewrite /* $server_name$reqeust_uri last;
}
location ~ \.php$ {
add_header X-Frame-Options SAMEORIGIN;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Niż żądanie pasuje do pierwszej lokalizacji, nie pasuje do drugiej lokalizacji.
Oznacza to, że te żądania nie mogły przejść przez php cgi.
Czy jest ktoś, kto wie, jak rozwiązać problem?
://$server_name$request_uri;
named
lokalizacji zamiast powielać parametryfastcgi
.Istnieje opcja użycia dwóch oddzielnych kontekstów serwera i nie użyto instrukcji if (czytaj tutaj: https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/ ).
Konfiguracja może być:
źródło