相关疑难解决方法(0)

如何在 nginx 的子位置中全局使用 FastCGI 和基本身份验证?

我最近部署了我的第一个 nginx 设置,一切都非常好,除了位置解析让我发疯。我有一个简单的 php fastcgi 设置,如下所示:

location ~ \.php {
    if (!-e $request_filename) {
            return 404;
    }

    include /etc/nginx/fastcgi.conf;
    keepalive_timeout 0;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass 127.0.0.1:9000;
}
Run Code Online (Sandbox Code Playgroud)

现在我想用这样的基本身份验证来保护一些位置:

 location /madmin {
         auth_basic "Restricted";
         auth_basic_user_file /var/www/localhost/admincp/.htpasswd;
 }
Run Code Online (Sandbox Code Playgroud)

使用他的设置,nginx 在访问 /madmin 时会要求输入密码,但不会在 /madmin/foo.php 上询问。如果我将身份验证位置更改为“位置 ~ ^/madmin”,那么 nginx 将提供 php 文件以供下载...

是不是可以在 nginx 中配置多个位置?如果没有,这里的解决方法是什么?

谢谢你的帮助。

php nginx

6
推荐指数
1
解决办法
1万
查看次数

有没有一种干净的方法来组合 nginx 位置规则?

假设在我的 nginx 服务器中我想完成这两个要求:

1)所有*.php文件都将传递给php解释器

2)目录/private/需要http认证

如果我写

location /private/  {
  auth_basic            "Restricted";
  ....
}

location ~ \.php$ {
    fastcgi_pass   127.0.0.1:9000;
     .... more settings
}
Run Code Online (Sandbox Code Playgroud)

那么(如果我没记错的话)身份验证将仅适用于非 php 文件。相反,如果我将^~标志添加到location块中,那么我就会丢失 php 位置。这是符合逻辑的,因为 nginx 只匹配一个位置块。

看来剩下的唯一选择是使用嵌套位置:

location /private/  {
  auth_basic            "Restricted";
  ....
    location ~ \.php$ {
       fastcgi_pass   127.0.0.1:9000;
         .... more settings
    }
}

location ~ \.php$ {
    fastcgi_pass   127.0.0.1:9000;
     .... more settings
}
Run Code Online (Sandbox Code Playgroud)

这对我来说看起来相当笨拙和脆弱:每次我添加受保护的目录位置(或具有某些特殊设置的目录)时,我必须记住为 PHP(也许还有其他文件类型)添加嵌套位置。但这似乎是唯一的出路。是这样吗?谁能提出更好的解决方案?

nginx

4
推荐指数
1
解决办法
5179
查看次数

标签 统计

nginx ×2

php ×1