可以闪亮确定登录nginx反向代理的用户

提问

我已成功为我的闪亮服务器实现了一个nginx反向代理,以便进行SSL和用户身份验证.但是,仍然存在一个我无法弄清楚的差距.我的闪亮应用程序有没有办法确定哪个用户实际登录?

这是我的/ etc / nginx / sites-available / default

server {
listen 80;
return 301 https://$host$request_uri;
}

server {

listen 443;
server_name myserver.com;

ssl_certificate           /etc/nginx/cert.crt;
ssl_certificate_key       /etc/nginx/cert.key;

ssl on;
ssl_session_cache  builtin:1000  shared:SSL:10m;
ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;

access_log            /var/log/nginx/shiny.log;

location / {

  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;

  # Fix the “It appears that your reverse proxy set up is broken" error.
  proxy_pass          http://localhost:3838;
  proxy_read_timeout  90;

  proxy_redirect      http://localhost:3838 https://myserver.com;
  auth_basic "Restricted";
  auth_basic_user_file /etc/nginx/.htpasswd;
  proxy_set_header Authorization $http_authorization;
  proxy_pass_header  Authorization;
}
  }

使用我的位置的最后两行,我希望有一个带有用户名的标题.我发现提示here.我发现this允许我查看我的标题信息,但我看到的标题都不是我的用户名.

编辑:

根据Bert Neef的引用,我明白为什么以上不起作用.但是,服务器确实可以访问HTTP_SEC_WEBSOCKET_KEY标头,该标头在会话中是唯一的.似乎如果我们可以让Nginx记录该值,那么服务器可以查看该代码以将标头与实际用户匹配.话虽如此,我不知道这是否可行,我不知道如何让Nginx记录该值.

最佳答案

基于Shiny Docs仅限Shiny Server Professional功能,您需要使用whitelist_headers指令来获取这些标头:

4.9 Proxied Headers
Typically, HTTP headers sent to Shiny Server will not be forwarded to the underlying Shiny application. However, Shiny
Server Professional is able to forward specified headers into the
Shiny application using the whitelist_headers configuration directive,
which can be set globally or for a particular server or location.

更新:刚刚在非专业闪亮服务器安装中测试了whitelist-headers选项,我无法显示自定义标题.我确实通过使用netcat来验证头文件是由nginx发送的,以显示传入的数据(nc -l 8080和nginx.conf文件中对proxy_pass的快速更改).

更新2:无法让NGINX记录HTTP_SEC_WEBSOCKET_KEY标头(在日志规范中指定授权标头后记录)并且我无法在nginx和Shiny Server之间的流量中看到它,我认为它可以归结为获取Shiny Server Professional或修改闪亮的源代码以将授权标头传递给应用程序.