将用户名从 Nginx 传递或写入应用程序
pass or write the username from Nginx into an app
嗨,我是 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;
我可以在 logs/nginx_shiny_access.log
中看到用户名,因为 $remote_user
。
如何获取 html
文件中的用户名,只是 临时 因为我需要应用程序中的用户名,但我不知道如何获取他们?
提前谢谢你。
在反向代理的情况下,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
的绝对初学者!我在闪亮的服务器前使用 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;
我可以在 logs/nginx_shiny_access.log
中看到用户名,因为 $remote_user
。
如何获取 html
文件中的用户名,只是 临时 因为我需要应用程序中的用户名,但我不知道如何获取他们?
提前谢谢你。
在反向代理的情况下,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
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")
....
}