我们目前正在从Apache迁移到Nginx。除了迁移我们受限制的项目环境外,这一切都出人意料地好了。
在Apache中,我们有一个自定义登录表单,它取代了基本的http身份验证。我们使用AuthType form
和AuthFormProvider 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,所以我将处理帖子数据。