我正在尝试在 nginx 中为所有服务设置单一身份验证。我已经让它工作了basic_auth
,现在我尝试让它工作,auth_request
它几乎正常工作,唯一的问题是我必须以某种方式在 nginx 中设置用户名,因为 gerrit 使用它来知道哪个用户已经过身份验证。
php 脚本的工作原理auth_request /action/check.php;
是,如果用户通过身份验证,则返回 202,如果未通过身份验证,则返回 401,然后将您带到登录页面。不起作用的部分是 header Authorization
。由于它是空的,gerrit 不知道哪个用户通过了身份验证,因此会引发错误。我需要做的是在 header 中check.php
设置$http_authorization
nginx 使用的变量。
server {
listen 80 default_server;
listen [::]:80 default_server;
root /srv/proxy;
index index.html index.php;
server_name 192.168.1.107;
location /gerrit/login/ {
auth_request /action/check.php;
error_page 401 = /;
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Forwarded_For $remote_addr;
proxy_set_header Host $host;
#auth_basic "Gerrit";
#auth_basic_user_file /srv/.htpassword;
proxy_set_header Authorization $http_authorization;
proxy_pass_header Authorization;
}
location /gerrit/ {
auth_request /action/check.php;
error_page 401 = /;
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Forwarded_For $remote_addr;
#proxy_set_header Host $host;
#auth_basic "Gerrit";
proxy_set_header Authorization $http_authorization;
proxy_pass_header Authorization;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php5-fpm.sock;
}
location / {
try_files $uri $uri/ =404;
}
}