我正试图实现以下的事情。 我有根域目录下的主要网站。 这工作正常。 即PHP文件被执行。 一段时间后,我添加了基本的HTTP身份validation“auth”目录。 接下来,我将PHP程序上传到“auth”目录,但PHP文件正在下载而不是执行。
这里是网站可用的conf
服务器{
charset utf-8;
听80 default_server;
听[::]:80 default_server;
root / 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;
}
位置^〜/保护{
否认一切;
}
位置〜\ .php $ {
包括snippets / fastcgi-php.conf;
#使用php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
location〜/\.(ht|git|svn){
否认一切;
}
}
目前我有以下解决scheme,但我认为这不是一个正确的方法。
位置^〜/ auth {
auth_basic“受限内容”;
auth_basic_user_file /var/www/html/auth/.htpasswd;
位置〜\ .php $ {
包括snippets / fastcgi-php.conf;
#使用php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
}
以下解决scheme不起作用
位置^〜/ auth {
auth_basic“受限内容”;
auth_basic_user_file /var/www/html/auth/.htpasswd;
try_files $ uri @ php-fpm;
}
location @ php-fpm {
包括snippets / fastcgi-php.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
有同样的问题!
在这里find答案, http://www.ceus-now.com/nginx-password-protect-directory-downloads-source-code/
因为我们正在添加^〜,所以我们留下了一些其他的设置(不知道为什么我们需要添加这个,但它是唯一的方法来让它实际上拉起authentication:()
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;
我尝试了各种组合,看看什么是/不需要的,每一行都是需要的。 我希望我能更好地理解这些事情。
更新:2016年7月27日:
所以我做了一些阅读,最后明白了为什么我们有这个问题。
简而言之,当我们安装FastCGI和php-fpm时,它会在nginx服务器文件中创build一个指令(哪个文件取决于您的服务器安装)。
所以在我的我有以下…
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;
你会注意到这些指令位于/不在全局设置中。 由于我们想要保护一个特定的文件夹,这些指令不会被inheritance。 因此,我们需要再次声明。
如果我们想遵循DRY(“不要重复自己”)原则,那么我们将在全局设置中声明PHP-fpm和FastCGI。 我们可以通过将它移动到下面来做到这一点(例如,但它只需要在位置指令之外)。 这是一个例子。
root /var/www/html; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_index index.php;
希望这可以帮助。 我通过阅读https://www.digitalocean.com/community/tutorials/understanding-and-implementing-fastcgi-proxying-in-nginx
免责声明:我不是亲,所以如果你看到错误很好,只是让我知道,我希望更新。