мой PHP включает:
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php5.socket;
include /etc/nginx/fastcgi_params;
}
Я пытаюсь разрешить доступ к файлам в каталоге по местоположению:
location ~ /internal {
allow IP;
deny all;
}
Это работает, но файлы php в этом каталоге нельзя загрузить.
решение1
Имейте в виду, что: Nginx всегда выбирает только один блок местоположения для соответствия запросу. Порядок поиска:
=
^~
None
~
~*
@
Итак, запрос сначала /internal/foo.php
сопоставляется с префиксом location /internal
, затем поиск прекращается, а регулярное выражение не проверяется. Вот почему вы получаете диалог загрузки при запросе файлов PHP.
Чтобы избежать дублирования, поместите общую директиву в отдельный файл и используйтеinclude
директива, что-то вроде этого:
/etc/nginx/php.conf
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php5.socket;
include /etc/nginx/fastcgi_params;
/etc/nginx/nginx.conf
location /internal {
allow IP;
deny all;
location ~ ^/internal(.*\.php)$ {
include php.conf;
}
}
location ~ \.php$ {
include php.conf;
}
решение2
Попробуйте добавить расположение php внутри расположения /internal, например:
location ~ /internal/\.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php5.socket;
include /etc/nginx/fastcgi_params;
}