Meu arquivo de configuração nginx assim:
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;
}
}
Precisamos configurar o nginx para satisfazer o seguinte:
1 、 Se o URL não tiver o prefixo "/api/mobile/index.php",e a porta da solicitação for 80, redirecione-o para https 2 、 Se o URL tiver o prefixo" /api/mobile/index.php",junte
Então, adiciono conteúdo no arquivo de configuração:
location ~ ^(?!/api/mobile/index\.php).*$ {
if ($server_port = "80") {
return 301 https://$server_name$request_uri;
}
rewrite /* $server_name$reqeust_uri last;
}
Agora o conteúdo do arquivo de configuração é:
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;
}
}
Se a solicitação corresponder ao primeiro local, não corresponderá ao outro local.
Isso significa que essa solicitação não pôde passar pelo php cgi.
Existe alguém que sabe como resolver o problema?
://$server_name$request_uri;
named
local em vez de duplicar osfastcgi
parâmetros.Existe a opção de usar dois contextos de servidor separados e não usou a instrução if (leia o porquê aqui: https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/ ).
A configuração pode ser:
fonte