Apache“AuthType表单”身份验证Nginx替代

时间:2015-08-04 12:54:32

标签: php nginx

我们目前正在从Apache迁移到Nginx。除了迁移我们受限制的项目环境外,这一切都出人意料地好了。

在Apache中,我们有一个自定义登录表单,它取代了基本的http身份验证。我们使用AuthType formAuthFormProvider dbd来实现这一目标。默认情况下,Nginx不支持此功能。它尝试使用auth_request模块而没有任何运气。

我想要实现的目标: 受自定义登录表单保护的虚拟主机。在帖子上它应该在mysql数据库中进行查找以验证用户名密码和组。

我当前的设置:

server{
    listen *:8081;

    location /auth {

        include fcgi.conf;
        ....

        alias /var/*******/htdocs/auth/auth.php;
     }
}

server {
    listen *:80;

    server_name ~^(?<sname>.+?).projects.#######.com$ ~^(?<sname>.+?).projects.migrate.#######.com$;

    access_log /var/log/nginx/projects#######com.access.log;
    error_log /var/log/nginx/projects#######com.error.log;

    root /var/*******/htdocs/$sname/;
    index index.html index.htm index.php;

    error_page 401 = /login;
    error_page 404 = /404.html;

    location /login {
        auth_request off;
        ....

        alias /var/*******/htdocs/auth/login.php;
    }

    location /auth{
        proxy_pass http://localhost:8081;
        proxy_pass_request_body off;

        proxy_set_header Content-Length "";
        proxy_set_header X-Original-URI $request_uri;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Auth-Key "**************";
    }

    location /404.html{
        alias /var/*******/htdocs/auth/404.html;
    }

    location / {
        auth_request /auth;
    }

    location ~ [^/]\.php(/|$) {
        ....
    }
}

我现在面临的问题是我无法获得登录时发布的POST vars。

更新

基本上问题是重定向到401.在此过程中,POST数据被禁止。

  

收到301后自动重定向POST请求   状态代码,一些现有的HTTP / 1.0用户代理将错误地   将其更改为GET请求。

让这个工作的唯一方法是欺骗nginx,所以我将处理帖子数据。

0 个答案:

没有答案