将用户名从 Nginx 传递或写入应用程序
Posted
技术标签:
【中文标题】将用户名从 Nginx 传递或写入应用程序【英文标题】:pass or write the username from Nginx into an app 【发布时间】:2021-12-28 21:07:08 【问题描述】:嗨,我是nginx
的绝对初学者!我在闪亮的服务器前使用 Nginx 作为反向代理,并认识到 Nginx 写入了两个文件 html
和 log
。在access.log
我可以看到用户名。我的 Nginx 配置文件的重要部分包含这部分
http
server_tokens off;
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/nginx_shiny_access.log;
sendfile on;
keepalive_timeout 65;
auth_ldap_cache_enabled on;
auth_ldap_cache_expiration_time 10000;
auth_ldap_cache_size 1000;
由于$remote_user
,我可以看到logs/nginx_shiny_access.log
中的用户名。
我如何获取html
文件中的用户名并且只是临时,因为我需要应用程序中的用户名但我不知道如何获取它们?
提前谢谢你。
【问题讨论】:
嗨,检查一下如何在 nginx 中转发自定义标头,serverfault.com/questions/391554/…,这将向您展示如何在闪亮的应用程序中访问它,***.com/questions/42442936/… 这不是 nginx 工作。$remote_user
nginx 变量包含基本身份验证提供的用户名。它是一个后端 Web 应用程序,可以检查 Authorization
HTTP 标头值并在生成 HTML 文档时使用它。
【参考方案1】:
在反向代理的情况下,nginx.conf
一般有如下结构:
http ...
...
ldap_server MY_WEBSITE
url ...
binddn ...;
binddn_passwd ...;
group_attribute member;
group_attribute_is_dn on;
server
listen 443 ssl http2;
server_name localhost *.example.com;
ssl_certificate /apps/my.cer;
ssl_certificate_key /apps/my.key;
proxy_max_temp_file_size 0;
add_header xv-nginx-remote_user $remote_user;
新是add_header xv-nginx-remote_user $remote_user;
然后,可以在ui.R
中定义一个java脚本函数:
library(shinyjs)
library(shiny)
shinyUI(fluidPage(
useShinyjs(), # Set up
tags$script('
shinyjs.init = function()
var client = new XMLHttpRequest();
client.open("GET", "" , true);
client.send();
return client.onreadystatechange = function()
var remote_user = client.getResponseHeader("xv-nginx-remote_user");
Shiny.onInputChange("USERNAME", remote_user);
;
'),
verbatimTextOutput("USERNAME")
))
并且必须在server.R
中询问 LDAP 组中的成员
if(Sys.info()["sysname"] == "Linux")
ldap.members <- paste("ldapsearch -LLL -x -h dcwi.org.com -b \"dc=org,dc=com\" -D \
"CN=",Sys.getenv("ldaptu"),",OU=...,DC=org,DC=com\" -w ",Sys.getenv("ldappwd"),"\"CN=....\" member")
....
【讨论】:
以上是关于将用户名从 Nginx 传递或写入应用程序的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 7.3,共享扩展,似乎无法将数据从扩展传递到容器应用程序