如何在 Nginx 中使用用户目录进行身份验证

如何在 Nginx 中使用用户目录进行身份验证

我使用的是基于 Debian 的主机,并使用 Nginx 和 PHP-FPM,我想在 nginx 中启用用户目录,并且希望使用基本身份验证支持多用户。这意味着当 Alex 打开 www.example.com/rutorrent 时;将提示输入登录名和密码,经过身份验证后,这应该指向位于 /home/alex/www/rutorrent 的他自己的 php 脚本版本;当 Bob 打开 www.example.com/rutorrent 时;将提示输入登录名和密码,经过身份验证后,这应该指向位于 /home/bob/www/rutorrent 的他的 php 脚本。

我已经尝试过位于此处的官方文档: http://wiki.nginx.org/UserDir

但我不确定如何将它们配置到默认文件中以便我可以获得我想要的功能,我的 nginx 默认配置文件在这里:

server {
    server_name localhost;

    location / {
          try_files $uri $uri/ /index.html;
    }

    location /doc/ {
           alias /usr/share/doc/;
           autoindex on;
           allow 127.0.0.1;
           allow ::1;
           deny all;
     }

     index index.php index.html index.htm;
     location ~ ^/~([^/]*)(.*)\.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            auth_basic "Restricted";
            auth_basic_user_file /etc/nginx/sites-available/.htpasswd;
            fastcgi_param SCRIPT_FILENAME /home/$1/www$2.php;
            include fastcgi_params;

     }

     location ~ ^/~([^/]*)(.*) {
            autoindex on;
            alias /home/$1/www$2;
            auth_basic "Restricted";
            auth_basic_user_file /etc/nginx/sites-available/.htpasswd;
     }

      location /RPC2 {
            include scgi_params;
            scgi_pass localhost:5000;
     }


}

有什么办法可以得到它吗?

答案1

感谢您的帮助,我得到了修复用户目录问题的线索,我在主 nginx 配置文件中使用 $remote_user 变量,当我们使用基本身份验证时,Nginx 在 $remote_user 变量中捕获用户名,因此如果我们以这种方式包含,那么使用用户目录的方法非常好且简单:

/home/$remote_user/..

答案2

您无法使用 nginx 配置文件执行此操作。您最好使用连接到数据库的 php 脚本进行身份验证,然后使用重定向。

相关内容