下载nginx PHP文件而不是执行

我正试图实现以下的事情。 我有根域目录下的主要网站。 这工作正常。 即PHP文件被执行。 一段时间后,我添加了基本的HTTP身份validation“auth”目录。 接下来,我将PHP程序上传到“auth”目录,但PHP文件正在下载而不是执行。

  • domain.name/test.php – >执行
  • domain.name/sub/file.php – >执行
  • domain.name/auth/protected.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

免责声明:我不是亲,所以如果你看到错误很好,只是让我知道,我希望更新。