我正在努力实现以下目标。我在域根目录下有主网站。它工作正常。即执行 PHP 文件。一段时间后,我添加了具有基本 HTTP 身份验证的“auth”目录。接下来,我将 PHP 程序上传到“auth”目录,但 PHP 文件正在下载而不是执行。
这是站点可用的配置文件
服务器 {
字符集 utf-8;
听 80 default_server;
听 [::]:80 default_server;
根 /var/www/html;
# 如果您使用的是 PHP,请将 index.php 添加到列表中
index index.php index.html index.htm index.nginx-debian.html;
server_name xxx.com;
地点 / {
# 首先尝试将请求作为文件提供服务,然后
# 作为目录,然后回退到显示 404。
# try_files $uri $uri/ =404;
try_files $uri $uri//index.php?$args;
}
位置 ^~ /auth {
auth_basic "受限内容";
auth_basic_user_file /var/www/html/auth/.htpasswd;
}
位置 ^~ /protected {
否认一切;
}
位置 ~ \.php$ {
包括片段/fastcgi-php.conf;
# 使用 php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
位置 ~ /\.(ht|git|svn) {
否认一切;
}
}
目前我正在遵循解决方案,但我认为这不是正确的方法。
位置 ^~ /auth {
auth_basic "受限内容";
auth_basic_user_file /var/www/html/auth/.htpasswd;
位置 ~ \.php$ {
包括片段/fastcgi-php.conf;
# 使用 php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
}
以下解决方案不起作用
位置 ^~ /auth {
auth_basic "受限内容";
auth_basic_user_file /var/www/html/auth/.htpasswd;
try_files $uri @php-fpm;
}
位置@php-fpm {
包括片段/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
有同样的问题!
在这里找到答案,http://www.ceus-now.com/nginx-password-protect-directory-downloads-source-code/
因为我们正在添加 ^~ 我们留下了一些其他设置(不知道为什么我们需要添加它,但这是让它实际提取身份验证的唯一方法:()
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/lib/php5-fpm/web11.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
Run Code Online (Sandbox Code Playgroud)
我尝试了各种组合来查看需要/不需要什么以及需要每一行。我希望我能更好地理解这些事情。
更新:2016 年 7 月 27 日:
所以我做了一些阅读,终于明白为什么我们会遇到这个问题。
简而言之,当我们安装 FastCGI 和 php-fpm 时,它会在 nginx 服务器文件中创建一个指令(哪个文件取决于您的服务器安装)。
所以在我的我有以下...
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php7.0-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php7.0-fpm:
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
Run Code Online (Sandbox Code Playgroud)
你会注意到这些指令在 location / 而不是在全局设置中。由于我们要保护特定文件夹,因此不会继承这些指令。因此,我们需要再次声明。
如果我们想遵循 DRY(“不要重复自己”)原则,那么我们将在全局设置中声明 PHP-fpm 和 FastCGI。我们可以通过将它移动到下面来做到这一点(例如,但它只需要在 location 指令之外)。这是一个例子。
root /var/www/html;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。我通过阅读https://www.digitalocean.com/community/tutorials/understanding-and-implementing-fastcgi-proxying-in-nginx意识到了上述问题
免责声明:我不是专业人士,所以如果你看到错误是好的,请告诉我,我会希望更新。
| 归档时间: |
|
| 查看次数: |
15294 次 |
| 最近记录: |