shiny可以判断谁登录了nginx反向代理吗
Can shiny determine the use who logged in to nginx reverse proxy
我已经成功地为我的 shiny-server 实现了一个 nginx 反向代理,以便进行 SSL 和用户身份验证。但是,还是有一点想不通。有没有办法让我的 shiny 应用程序确定实际登录的用户?
这是我的 /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;
}
}
在我的位置的最后两行中,我希望有一个 header 和用户名。我发现提示 here. I found this 允许我查看我的 header 信息,但我看到的 header 中的 none 是我的用户名。
编辑:
根据 Bert Neef 的引用,我明白了为什么上述方法不起作用。但是,服务器确实可以访问跨会话唯一的 HTTP_SEC_WEBSOCKET_KEY header。似乎如果我们可以让 Nginx 记录该值,那么服务器可以查看该代码以将 header 与实际用户匹配。话虽如此,我不知道这是否可行,我也不知道如何让 Nginx 记录该值。
基于 Shiny Docs 这只是一个 Shiny Server Professional 功能,您需要使用 whitelist_headers 指令来获取这些 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.
更新:刚刚在 non-pro 闪亮服务器安装中测试了 whitelist-headers 选项,我无法显示自定义 headers。我确实通过使用 netcat 向我显示传入数据(nc -l 8080 并在 nginx.conf 文件中快速更改为 proxy_pass 来验证 headers 是由 nginx 发送的。
更新 2:无法让 NGINX 记录 HTTP_SEC_WEBSOCKET_KEY header(授权 header 在日志规范中指定后记录)而且我看不到它在 nginx 和 Shiny Server 之间的流量中,我认为它要么归结为获得 Shiny Server Professional 或修改 shiny 源代码以将授权 header 传递给应用程序。
我已经成功地为我的 shiny-server 实现了一个 nginx 反向代理,以便进行 SSL 和用户身份验证。但是,还是有一点想不通。有没有办法让我的 shiny 应用程序确定实际登录的用户?
这是我的 /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;
}
}
在我的位置的最后两行中,我希望有一个 header 和用户名。我发现提示 here. I found this 允许我查看我的 header 信息,但我看到的 header 中的 none 是我的用户名。
编辑:
根据 Bert Neef 的引用,我明白了为什么上述方法不起作用。但是,服务器确实可以访问跨会话唯一的 HTTP_SEC_WEBSOCKET_KEY header。似乎如果我们可以让 Nginx 记录该值,那么服务器可以查看该代码以将 header 与实际用户匹配。话虽如此,我不知道这是否可行,我也不知道如何让 Nginx 记录该值。
基于 Shiny Docs 这只是一个 Shiny Server Professional 功能,您需要使用 whitelist_headers 指令来获取这些 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.
更新:刚刚在 non-pro 闪亮服务器安装中测试了 whitelist-headers 选项,我无法显示自定义 headers。我确实通过使用 netcat 向我显示传入数据(nc -l 8080 并在 nginx.conf 文件中快速更改为 proxy_pass 来验证 headers 是由 nginx 发送的。
更新 2:无法让 NGINX 记录 HTTP_SEC_WEBSOCKET_KEY header(授权 header 在日志规范中指定后记录)而且我看不到它在 nginx 和 Shiny Server 之间的流量中,我认为它要么归结为获得 Shiny Server Professional 或修改 shiny 源代码以将授权 header 传递给应用程序。