Nginx - 密码保护 PHP 脚本
Posted
技术标签:
【中文标题】Nginx - 密码保护 PHP 脚本【英文标题】:Nginx - Password Protect PHP Script 【发布时间】:2011-05-18 02:13:00 【问题描述】:如何在 nginx 中使用密码保护单个 ph php 脚本。我使用 nginx 作为网络服务器并代理到 php-fastcgi。我无法让位置块按预期运行。
这是我正在尝试的内容。
location /admin\.php$
auth_basic "Valid User Required";
auth_basic_user_file /etc/nginx/http-auth;
location ~\.php$
root /var/www/nginx/vhosts/site;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass phpfcgi;
【问题讨论】:
【参考方案1】:位置 /admin\.php$ auth_basic "需要有效用户"; auth_basic_user_file /etc/nginx/http-auth; +根/var/www/nginx/vhosts/站点; + 包括 /etc/nginx/fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass phpfcgi;
这可能对你有帮助。
【讨论】:
【参考方案2】:第一期:
您正在匹配前缀字符串而不是正则表达式:
-
前缀字符串按字面意思匹配。
即使匹配前缀字符串,搜索也会继续使用下面的正则表达式 (
~\.php$
)。如果匹配,前缀字符串匹配将被忽略。
问题 #1 的解决方案:
添加~
以执行正则表达式匹配:~/admin\.php$
。
第二期:
现在你的块匹配了,你想将其中的 php 脚本传递给 fastcgi,否则它们将作为文本文件提供,而不被解析。
问题 #2 的解决方案:
在~/admin\.php$
位置块内嵌套一个~\.php$
位置块,最终结果如下所示:
location ~/admin\.php$
auth_basic "Valid User Required";
auth_basic_user_file /etc/nginx/http-auth;
location ~\.php$
root /var/www/nginx/vhosts/site;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass phpfcgi;
location ~\.php$
root /var/www/nginx/vhosts/site;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass phpfcgi;
参考:
请参阅此相关的post,此answer 上的位置块优先级,以及有关该主题的 Nginx docs。
【讨论】:
以上是关于Nginx - 密码保护 PHP 脚本的主要内容,如果未能解决你的问题,请参考以下文章