docker - 用于密钥斗篷的 Nginx 反向代理
问题描述
我已经在 localhost:7070 部署了一个 keycloak 服务器(在 Docker 容器中,它在 8080 上运行),现在我想为它设置一个反向代理。这是我的conf:
server {
listen 11080 ;
location /auth/ {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Server $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 $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:7070/auth/;
}
}
当我访问时http://my-ip:11080/auth
,我可以看到欢迎页面。但是当我尝试按照欢迎页面上的链接登录时,它显示错误并且现在的 url 是http://my-ip:auth/admin/
,但我希望http://my-ip:11080/auth/admin/
使用端口11080
当我手动输入http://my-ip:11080/auth/admin
并按 Enter 时,它会重定向到http://my-ip/auth/admin/master/console/
,但我希望http://my-ip:11080/auth/admin/master/console/
使用端口11080
我还尝试了许多我找到的解决方案,但现在没有运气。你能告诉我这里有什么问题吗?
更新: docker-compose.yml
version: "3.7"
services:
keycloak:
volumes:
- keycloak-pgdb:/var/lib/postgresql/data
build:
context: .
dockerfile: Dockerfile
ports:
- "7070:8080"
environment:
- KEYCLOAK_USER=admin
- KEYCLOAK_PASSWORD=password
- DB_VENDOR=postgres
- POSTGRES_PASSWORD=root
- POSTGRES_DB=keycloak
- DB_ADDR=localhost
- DB_USER=postgres
- DB_PASSWORD=root
- PROXY_ADDRESS_FORWARDING=true
volumes:
keycloak-pgdb:
码头工人ps:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
30ad65460a0c pic-keycloak_keycloak "entrypoint.sh" 38 minutes ago Up 38 minutes 5432/tcp, 0.0.0.0:7070->8080/tcp pic-keycloak_keycloak_1
解决方案
容器中的应用程序不知道您正在转发 port 11080
,因此当应用程序呈现响应时,如果它遵循X-Forwarded-xxxxx
标头,它将使用X-Forwarded-Poroto
来确定应该将重定向发送到哪里。
根据您的应用程序,您有 2 个选项可以处理这种情况:
X-Forwarded-Port
可以告诉 识别标头的应用程序重定向到特定端口,例如在这种情况下:proxy_set_header X-Forwarded-Port 11080
- 不遵守标头中提供的规则的遗留应用程序可以通过响应重写传递来处理。这是sub_filter的示例:
要使 sub_filter 工作,应安装并启用该模块sub_filter 'http:/my-ip/auth' 'http:/my-ip:11080/auth';
--with-http_sub_module
推荐阅读
- angular - Observable.Observable.of 不是函数 - 不能通过更改导入语句来解决
- pascal - 重复直到循环中的 if 语句
- python - 如何在 OPCUA 服务器中写入值
- python - Python-docx 在表格中查找和替换图像
- wordpress - 将现有的 wordpress 数据库连接到新安装
- pascal - FreePascal / Lazarus 和实现 nsurlconnectiondatadelegate
- node.js - 更新 npm 版本时出错
- php - 找不到类“Maatwebsite\Excel\Excel”
- html - 确保用户在使用 Odoo html 表单构建器时在提交时选择下拉列表中的值
- xml - XSL 复制所有内容并替换