问题:
GLPI 正在附加:80
到使用 Keycloak 进行 CAS 身份验证的回调 URL。在 Keycloak 上成功登录后,用户将被重定向到包含在 URL 中的 GLPI URL ,并在 Firefox 和其他浏览器上:80
遇到类似的错误页面。SSL_ERROR_RX_RECORD_TOO_LONG
细节:
我已经使用docker部署了GLPI 9.1.3,配置如下:
Environment: AWS EC2 Instance (Ubuntu 18.04)
Reverse-Proxy: Nginx
GLPI mapped to port 6969
这是我的docker-compose.yaml
文件:
version: "3.2"
services:
#Mysql Container
mysql:
image: mysql:5.7.23
container_name: mysql
hostname: mysql
command: --default-authentication-plugin=mysql_native_password
volumes:
- ./mysql_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_DATABASE=glpidb
- MYSQL_USER=glpi_user
- MYSQL_PASSWORD=glpi_password
restart: always
#GLPI Container
glpi:
build: .
container_name : glpi
hostname: glpi
depends_on:
- mysql
ports:
- 127.0.0.1:6969:80
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- ./html/glpi/:/var/www/html/glpi
- ./plugins:/var/www/html/glpi/plugins
environment:
- TIMEZONE=Europe/Brussels
restart: always
links:
- "mysql:mysql"
您可能会注意到,这不使用官方的 GLPI 图像。下面是我Dockerfile
构建图像的方法:
FROM diouxx/glpi
RUN echo 'ServerName glpi.example.com' >> /etc/apache2/apache2.conf
部署容器的命令:
docker-compose up --build
我还启用了 Keycloak 服务 CAS 身份验证github/jacekkow的项目。
GLPI 服务在 Nginx 代理后面运行,监听端口 80:
server {
listen 80;
server_name glpi.example.com;
location / {
proxy_pass http://localhost:6969;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_buffering off;
}
}
答案1
经过大量搜索,我发现这篇博客文章并了解到问题可能出在 PhpCAS 模块上。
正如文章中提到的,我在插件代码库中搜索了这一行:
$server_port = $_SERVER['HTTP_X_FORWARDED_PORT'];
Client.php
phpCAS 模块在以下路径下运行:$GLPI_ROOT_DIR/vendor/jasig/phpcas/source/CAS/Client.php
我注释掉了在末尾附加端口号的逻辑privat function _getClientUrl()
:
/* if (!strpos($server_url, ':')) {
if (empty($_SERVER['HTTP_X_FORWARDED_PORT'])) {
$server_port = $_SERVER['SERVER_PORT'];
} else {
$ports = explode(',', $_SERVER['HTTP_X_FORWARDED_PORT']);
$server_port = $ports[0];
}
if ( ($this->_isHttps() && $server_port!=443)
|| (!$this->_isHttps() && $server_port!=80)
) {
$server_url .= ':';
$server_url .= $server_port;
}
} */
保存更改后,GLPI 在重定向到 Keycloak 时正确设置了回调 URL。