反向代理后面的密钥斗篷

时间:2018-08-07 20:11:11

标签: nginx reverse-proxy keycloak

我在服务器上安装了keycloak standanlone,并尝试通过nginx在反向代理后面使用它。 密钥斗篷已绑定到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
}

但是当我访问https://auth.dp.net/auth时,出现以下密钥隐藏错误:

Invalid parameter: redirect_uri

我的配置中缺少什么?

2 个答案:

答案 0 :(得分:0)

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

location /auth {
    proxy_pass  http://localhost:8080;

如果您的代理通过指令为裸机,即未指定路径(如上所示),则整个请求路径将附加到代理通过网址。

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

如果您添加任何内容,甚至在代理传递指令中仅添加一个斜线,那么您添加的任何内容都会替换您位置指令中匹配的部分。因此,要将请求传递到没有路径的代理,您需要添加一个斜杠。所以这可能有效:

location /auth {
    proxy_pass  http://localhost:8080/;

但是,由于Nginx希望在代理URL时添加一个尾部斜杠(如果请求网址中没有该斜杠),因此它可能无法工作。因此,您可以通过将location指令更改为以下内容来告诉Nginx完全匹配:

location = /auth {

或者您可以预料到它将重写您的请求并将其更改为:

location /auth/ {

或者,如果您真的想成为专业人士,则可以创建两个相同的模块。一个带有= /auth,另一个带有/auth/

这是因为:

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

答案 1 :(得分:0)

转到Keycloak客户端的设置,然后将“有效重定向Uri”更改为*。

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