Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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
Nginx 反向代理背后的密钥斗篷_Nginx_Reverse Proxy_Keycloak - Fatal编程技术网

Nginx 反向代理背后的密钥斗篷

Nginx 反向代理背后的密钥斗篷,nginx,reverse-proxy,keycloak,Nginx,Reverse Proxy,Keycloak,我在一台服务器上安装了keydove standanlone,并尝试通过nginx在反向代理后使用它。 KeyClope绑定到127.0.0.1 这是我的nginx vhost配置: server { server_name auth.dp.net; location /auth { proxy_pass http://localhost:8080; proxy_http_version 1.1; proxy_set_header Host

我在一台服务器上安装了keydove standanlone,并尝试通过nginx在反向代理后使用它。 KeyClope绑定到127.0.0.1

这是我的nginx vhost配置:

server {
server_name auth.dp.net;
location /auth {
    proxy_pass  http://localhost:8080;
    proxy_http_version 1.1;

        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-Proto  $scheme;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/auth.dp.net/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/auth.dp.net/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

server {
if ($host = auth.dp.net) {
    return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name auth.dp.net;
return 404; # managed by Certbot
}
但当我访问时,我会得到以下KeyClope错误:

Invalid parameter: redirect_uri

我的配置中有什么错误

一两个
/
,也许还有一个
=

location /auth {
    proxy_pass  http://localhost:8080;
如果代理传递指令是裸的,即没有指定路径(如上所述),则整个请求路径将附加到代理传递url

因此,上面的配置将导致请求
https://auth.dp.net/auth
被代理到
http://localhost:8080/auth/

如果您添加了任何内容,即使只是在proxy pass指令中添加了一个斜杠,那么您添加的任何内容都将替换location指令中匹配的部分。因此,要将请求无路径地传递给代理,需要添加斜杠。因此,这可能会起作用:

location /auth {
    proxy_pass  http://localhost:8080/;
然而,由于Nginx喜欢在代理时添加一个尾随斜杠,如果请求url没有斜杠,它可能无法工作。因此,您可以通过将location指令更改为:

location = /auth {
或者您预计它将重写您的请求并将其更改为:

location /auth/ {
或者,如果你真的想成为一名职业选手,你可以创建两个完全相同的区块。一个带有
=/auth
,另一个带有
/auth/

这是因为:

  • 如果使用
    =/auth
    ,则请求
    https://auth.dp.net/auth/
    将不匹配,因此不获取代理
  • 如果您使用
    /auth/
    ,它将同时适用于这两种
    https://auth.dp.net/auth
    https://auth.dp.net/auth/
    ,但前者将触发Nginx内部重写以添加
    /
    ,从而有效地将身份验证请求的服务器负载增加一倍

转到KeyClope客户端的设置并将有效重定向Uri更改为*

有效的重定向Uri是KeyClope的一种安全机制,它限制重定向发生的位置。在生产中,应尽可能精确,以确保安全连接