我为Redmine安装了一个服务器,使用Nginx / Passenger运行。 服务器还托pipeGitlab,并且进展顺利。
我为Redmine提供了一些SSO插件(我发现并安装了这个插件),它需要一个环境variables来填充用户名:这是一个棘手的问题。 到目前为止,我可以分开 :
但我不能直接设置用户名与转发的值,它看起来像$ http_x_forwarded_uservariables不被评估…
有一个很好的解决scheme吗? 我目前的Nginx / Passengerconfiguration:
upstream gitlab-workhorse { server unix:/var/opt/gitlab/gitlab-workhorse/socket fail_timeout=0; } server { listen 0.0.0.0:80; listen [::]:80 ipv6only=on default_server; server_name server.example.com server_tokens off; ## Don't show the nginx version number, a security best practice root /opt/gitlab/embedded/service/gitlab-rails/public; location / { proxy_read_timeout 300; proxy_connect_timeout 300; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Host $http_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; proxy_pass http://gitlab-workhorse; access_log /var/log/nginx/gitlab_access.log; error_log /var/log/nginx/gitlab_error.log; } location ~ ^/redmine(/.*|$) { alias /opt/redmine/public$1; passenger_base_uri /redmine; passenger_app_root /opt/redmine; passenger_document_root /opt/redmine/public; passenger_enabled on; access_log /var/log/nginx/redmine_access.log; error_log /var/log/nginx/redmine_error.log; # returns "dave", who is the connected user => great ! return 200 $http_x_forwarded_user; # connects on Redmine as Dave => marvelous ! passenger_env_var REMOTE_USER dave; # working but ugly solution if ($http_x_forwarded_user = "dave") { passenger_env_var REMOTE_USER dave; } if ($http_x_forwarded_user = "john") { passenger_env_var REMOTE_USER john; } # ... and so on for every single user having an account... # fails : "user does not exist in database" => $http_x_forwarded_user not being evaluated ?? passenger_env_var REMOTE_USER $http_x_forwarded_user; } }
根据这个错误报告 ,这是目前打破:
passenger_env_var VAR $nginx_var; 将VAR设置为$nginx_var,而不是它的值。
可能的解决方法:
passenger (但保持Nginx ) 旨在为构build托pipe服务开发一个完整的堆栈。
应用程序服务器(用于各种编程语言和协议),代理服务器,进程pipe理器和监视器都是使用通用api和通用configuration风格实现的。
由于其可插拔的架构,它可以扩展到支持更多的平台和语言。
目前,你可以用C,C ++和Objective-C编写插件。
名称中的“WSGI”部分是对同名Python标准的致敬,因为它是第一个为该项目开发的插件。
多function性,性能,低资源使用和可靠性是项目的优势(也是唯一遵循的规则)。
我自己在多个生产环境中使用,强烈推荐!