Nginx
拒絕 Nginx 中的文件夾導致 PHP-FPM 不優先
標題說明了一切,但我有一個非常有趣的問題,我很困惑。基本上,我有一個簡單的 WordPress 安裝,我希望拒絕一個文件夾(以及文件夾中的所有文件),比如說 /wp-content/themes/default/scripts 但允許某些 IP。
我可以拒絕這個文件夾的位置,
^~/wp-content/themes/default/scripts {deny all;}
就像任何 Nginx 大師會告訴你的那樣。但據我了解,“^”優先級更高,一旦找到正則表達式匹配,它將停止搜尋其他位置塊。因為我不想拒絕所有人的文件夾(當然,使用
allow (IP Address);
,我的^~/wp-content/...
位置塊完全抽出我的 PHP-FPM 位置塊以將文件傳遞給 FastCGI 伺服器。當然,當我嘗試查看任何文件時在該文件夾中,PHP 文件是直接下載的,因為 PHP 不對其進行解析。有人有想法嗎?我想阻止該文件夾,但要讓 PHP 同時為我決定允許的使用者工作。這是一個相當棘手的問題。我找不到問題的任何答案。
多謝你們!非常感謝您的幫助!
對於任何想知道的人,我目前的 Nginx 虛擬主機配置如下所示:
server { #..all of the common stuff you would expect include /folder/nginx.conf; #including some WordPress rewrites for W3 Total Cache # pass the PHP scripts to FastCGI server listening on UNIX socket location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; fastcgi_read_timeout 1900; } location / { #allowing some IPs... #deny everyone else deny all; #WordPress rewrite for slugs index index.php; if (!-e $request_filename) { rewrite ^(.*)$ /index.php last; } #rewrite for sitemaps rewrite ^(.*/)?sitemap.xml /wp-content/sitemap.php last; } # denying access to .htaccess files location ~ /\.ht { deny all; } }
終於找到了答案。當你做這樣的事情時,你需要重新聲明 PHP-FPM 設置(
location ~ \.php$ { (this code) }
塊中的所有東西。因此,為了避免冗餘,我將這些值放在另一個文件中,並留下如下內容:
server { # pass the PHP scripts to FastCGI server listening on UNIX socket location ~ \.php$ { include /etc/nginx/fastcgi_php_text; } location / { index index.php; } location ^~/folder/ { deny all; allow ...; include /etc/nginx/fastcgi_php_text; } }
不知道這是否是最好的方法,但這是我想出的唯一方法。