Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/nginx/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 授权请求+;登录屏幕与浏览器重定向_Php_Nginx_Nginx Location_Nginx Reverse Proxy - Fatal编程技术网

Php 授权请求+;登录屏幕与浏览器重定向

Php 授权请求+;登录屏幕与浏览器重定向,php,nginx,nginx-location,nginx-reverse-proxy,Php,Nginx,Nginx Location,Nginx Reverse Proxy,当有人访问某个站点时,我希望他有一个特定的cookie集。 这样的cookie是通过auth_请求进行检查的,403应该会出现在登录屏幕上(需要HTML/PHP,所以不需要auth_basic)。 成功认证后,应重定向至“foo.example.org”。 所以我在代理中编写了一个配置和一些东西来完成所有这些 问题是:浏览器进入foo.example.org,记住以前的重定向,并继续重定向到登录屏幕 我可以更改什么以使浏览器不重定向(从缓存中重定向)? 像“foo.example.org?aut

当有人访问某个站点时,我希望他有一个特定的cookie集。 这样的cookie是通过auth_请求进行检查的,403应该会出现在登录屏幕上(需要HTML/PHP,所以不需要auth_basic)。 成功认证后,应重定向至“foo.example.org”。 所以我在代理中编写了一个配置和一些东西来完成所有这些

问题是:浏览器进入foo.example.org,记住以前的重定向,并继续重定向到登录屏幕

我可以更改什么以使浏览器不重定向(从缓存中重定向)? 像“foo.example.org?auth”这样的东西可能是一个东西,或者让auth完全内部化

server {

    server_name foo.example.org;

    location / {
        auth_request /restricted;
        error_page 403 = @error403;

        proxy_pass http://10.12.34.56;
        resolver 127.0.0.11 ipv6=off;

        proxy_redirect   off;
        proxy_set_header Host $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-Host $server_name;
    }

    location @error403 {
        return 307 /restricted;
    }

    location /restricted {
        proxy_pass http://auth_server;

        proxy_redirect   off;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Host $server_name;
    }
}

您返回的是
307临时重定向
响应,而不是
403禁止的
,它可能只是缓存在浏览器中,因此会继续重定向。它只是做你让它做的事

不管怎么说,你让自己的生活变得很艰难,其实这样做要容易得多

使用map指令检查cookie并基于其值设置自定义变量。让我们假设他们需要cookie
secret
来获取值
password

map $cookie_secret $notloggedin {
  default  1;
  password 0;
}
现在,
$notloggedin
将始终设置为
1
,除非客户端请求具有cookie
secret=password
,否则它将被设置为
0
,这在Nginx中也等同于空/未设置

现在我们将该变量放入location块中的if条件中。在不同地点使用if条件存在一些混乱,很多人会告诉你不应该使用它们,但明确指出:

如果在某个位置,唯一可以在室内完成的100%安全的事情 背景是:

返回。。。; 重写最后

这样就可以了

location / {
  if ($notloggedin) {
    return https://example.com/login;
  }

没有cookie的用户现在将被重定向到登录页面。

感谢您的写作。以这种方式打开基本身份验证是否正常?还是我做错了什么?我认为未经授权的客户端会看到自定义登录屏幕。但现在我看到了基本的auth登录,然后是自定义登录屏幕。我实际上意识到我也在让它变得比需要的更难。我已经编辑了我的答案