我的 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
透過前綴位置進行匹配/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
嘗試在 /internal 位置內部新增一個 php 位置,例如:
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;
}