如何在CentOS 7系统的NGINX服务器上配置Shibboleth SP?
配置Shibboleth Service Provider(SP)适配Nginx(CentOS 7)
我之前也碰到过一模一样的窘境——手里已经拿到IDP的Metadata,在CentOS 7上顺利装好了Shibboleth,跟着一款针对Apache的教程走得特别顺,结果换到Nginx直接抓瞎,翻遍官网也没找到官方的配置指南。下面是我折腾出来的可行方案,亲测能跑通:
1. 确保Shibboleth守护进程正常运行
首先得确认shibd服务已经启动并设为开机自启:
systemctl start shibd systemctl enable shibd
验证运行状态:
systemctl status shibd
看到输出里显示active (running)就没问题。
2. 配置Shibboleth与Nginx的通信
Shibboleth SP默认通过Unix套接字或TCP端口和Web服务器交互,用Unix套接字更高效:
- 编辑Shibboleth主配置文件
/etc/shibboleth/shibboleth2.xml,找到<Listener>段落,确保包含以下配置(二选一即可):
<!-- TCP端口方式 --> <Listener type="tcp" port="16001" address="127.0.0.1" /> <!-- Unix套接字方式(推荐) --> <Listener type="unix" socket="/var/run/shibboleth/shibd.sock" />
- 给Nginx进程赋予访问套接字的权限,把Nginx加入Shibboleth默认的
shibd用户组:
usermod -aG shibd nginx
重启Nginx让权限生效:
systemctl restart nginx
3. 配置Nginx转发认证请求到Shibboleth
在你的Nginx站点配置文件(比如/etc/nginx/conf.d/your-site.conf)里,添加以下配置片段,指定需要Shibboleth认证的路径:
server { listen 443 ssl; server_name your-domain.com; # 替换成你的SSL证书路径 ssl_certificate /path/to/your/cert.pem; ssl_certificate_key /path/to/your/key.pem; # 处理Shibboleth的回调请求 location /Shibboleth.sso { proxy_pass http://127.0.0.1:16001; 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; } # 需要认证的路径示例(比如后台/admin) location /admin { # 检查是否已通过Shibboleth认证 auth_request /Shibboleth.sso/Session; # 提取Shibboleth返回的用户属性(可按需调整) auth_request_set $shib_user $upstream_http_shib_identity_provider; auth_request_set $shib_mail $upstream_http_shib_mail; # 未认证则重定向到Shibboleth登录页 error_page 401 = @shib_login; # 你的站点内容配置 root /var/www/your-site; index index.html; } # 重定向到Shibboleth登录端点 location @shib_login { return 302 https://your-domain.com/Shibboleth.sso/Login?target=$scheme://$host$request_uri; } }
4. 导入IDP Metadata
把你拿到的IDP Metadata文件(比如idp-metadata.xml)放到/etc/shibboleth/目录下,然后编辑shibboleth2.xml,找到<MetadataProvider>部分,添加:
<MetadataProvider type="XML" path="/etc/shibboleth/idp-metadata.xml" />
保存后重启shibd服务:
systemctl restart shibd
5. 测试认证流程
访问你配置的需要认证的路径(比如https://your-domain.com/admin),正常情况下会被重定向到IDP的登录页面,登录成功后会跳回你的站点,此时可以通过浏览器开发者工具查看请求头,确认Shibboleth的用户属性是否正常传递。
内容的提问来源于stack exchange,提问作者Rafi Mahmud
相关产品推荐
相关产品推荐

