Мой конфигурационный файл nginx выглядит так:
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;
}
}
Нам нужно сконфигурировать nginx для удовлетворения следующего:
1 、 Если URL не имеет префикса "/api/mobile/index.php",, а порт запроса равен 80, перенаправьте его на https 2 、 Если URL имеет префикс" /api/mobile/index.php",просто продолжайте
Поэтому я добавляю контент в файл конфигурации:
location ~ ^(?!/api/mobile/index\.php).*$ {
if ($server_port = "80") {
return 301 https://$server_name$request_uri;
}
rewrite /* $server_name$reqeust_uri last;
}
Теперь содержимое файла конфигурации:
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;
}
}
Чем запрос совпадает с первым местоположением, не будет совпадать с другим местоположением.
Это означает, что этот запрос не может пройти через php cgi.
Есть кто-нибудь, кто знает, как решить проблему?
://$server_name$request_uri;
named
местоположение вместо дублированияfastcgi
параметров.Существует возможность использовать два отдельных серверных контекста и не использовать оператор if (см. Почему здесь: https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/ ).
Конфигурация может быть:
источник