如何将Nginx中$remote_user对应的用户名传递给后端Shiny应用
Nginx将$remote_user传入HTML的实现方案
针对你将Nginx作为Shiny反向代理的使用场景,以下两种方案都可以实现用户名传入HTML的需求,都支持临时部署,调整配置后执行nginx -s reload即可生效,不需要时删除对应配置重载就能恢复原样:
方案1:反向代理透传用户名到Shiny后端(最适配你的场景)
你已经通过LDAP认证拿到了$remote_user变量,只需要在Nginx代理Shiny的location配置块中添加自定义请求头,将用户名透传给后端即可:
location / { # 保留你原有的代理配置,比如 proxy_pass http://127.0.0.1:3838; proxy_set_header X-Remote-User $remote_user; }
Shiny应用可直接读取该请求头获取用户名,再将其注入到返回的HTML页面中,示例R代码:
# 在Shiny服务端代码中获取用户名 shinyServer(function(input, output, session) { current_user <- session$request$HTTP_X_REMOTE_USER # 后续将current_user渲染到HTML的对应位置即可 })
方案2:Nginx直接注入用户名到静态HTML(适合Nginx托管静态页的场景)
如果用户名需要直接写入Nginx返回的静态HTML文件,可开启SSI(服务器端包含)功能实现变量替换:
- 首先在对应静态资源的
location配置块中开启SSI:
location /static/ { root /你的静态HTML文件存放路径; ssi on; ssi_types text/html; }
- 在HTML文件中需要展示/存储用户名的位置插入SSI标记:
<!-- 可直接展示,也可以存为全局JS变量供后续调用 --> <p>当前登录用户:<!--#echo var="remote_user" --></p> <script> const currentUser = '<!--#echo var="remote_user" -->'; </script>
Nginx返回页面时会自动将标记替换为实际的用户名值。
注意事项
- 两种方案都依赖
$remote_user已通过认证模块正常赋值,你当前的LDAP认证配置已经满足前提 - 透传自定义请求头时,Nginx会自动覆盖客户端传递的同名请求头,不存在伪造风险
内容的提问来源于stack exchange,提问作者maniA
相关产品推荐
相关产品推荐

