Mon fichier de configuration nginx comme ceci:
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;
}
}
Nous devons configurer le nginx pour satisfaire les éléments suivants:
1 、 Si l'url n'a pas de préfixe "/api/mobile/index.php", et que le port de la demande est 80, redirigez-le vers https 2 、 Si l'url a le préfixe" /api/mobile/index.php",
J'ajoute donc du contenu dans le fichier de configuration:
location ~ ^(?!/api/mobile/index\.php).*$ {
if ($server_port = "80") {
return 301 https://$server_name$request_uri;
}
rewrite /* $server_name$reqeust_uri last;
}
Maintenant, le contenu du fichier de configuration est:
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 demande correspond au premier emplacement, ne correspondra pas à l'autre emplacement.
Cela signifie que ces requêtes n'ont pas pu passer par le php cgi.
Y a-t-il quelqu'un qui sait comment résoudre le problème?
://$server_name$request_uri;
named
emplacement au lieu de dupliquer lesfastcgi
paramètres.Il y a la possibilité d'utiliser deux contextes de serveur séparés, et n'a pas utilisé l' instruction if (lisez pourquoi ici: https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/ ).
La configuration pourrait être:
la source