Mi archivo de configuración nginx como este:
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;
}
}
Necesitamos configurar el nginx para satisfacer lo siguiente:
1 、 Si la url no tiene el prefijo "/api/mobile/index.php", y el puerto de la solicitud es 80, rediríjalo a https 2 、 Si la url tiene el prefijo" /api/mobile/index.php", simplemente continúe
Entonces agrego contenido en el archivo de configuración:
location ~ ^(?!/api/mobile/index\.php).*$ {
if ($server_port = "80") {
return 301 https://$server_name$request_uri;
}
rewrite /* $server_name$reqeust_uri last;
}
Ahora el contenido del archivo de configuración es:
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;
}
}
Que la solicitud coincida con la primera ubicación, no coincidirá con la otra ubicación.
Eso significa que esta solicitud no pudo pasar por el php cgi.
¿Hay alguien que sepa cómo resolver el problema?
://$server_name$request_uri;
named
ubicación en lugar de duplicar losfastcgi
parámetros.Existe la opción de usar dos contextos de servidor separados, y no usó la declaración if (lea por qué aquí: https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/ ).
La configuración podría ser:
fuente