在Nginx / Passenger中托pipe的Ruby / Rails应用程序的头文件中设置环境variables

我为Redmine安装了一个服务器,使用Nginx / Passenger运行。 服务器还托pipeGitlab,并且进展顺利。

我为Redmine提供了一些SSO插件(我发现并安装了这个插件),它需要一个环境variables来填充用户名:这是一个棘手的问题。 到目前为止,我可以分开

  • 从X-Forwarded-User头获取用户名
  • 自动连接到Redmine传递用户名作为一个常数值
  • 自动连接到Redmine传递正确的用户名作为一个常数值testing当前转发的值=>这是丑陋的,需要做每个现有的用户testing

但我不能直接设置用户名与转发的值,它看起来像$ 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
  • 通过uwsgi设置redmine,哪个

旨在为构build托pipe服务开发一个完整的堆栈。

应用程序服务器(用于各种编程语言和协议),代理服务器,进程pipe理器和监视器都是使用通用api和通用configuration风格实现的。

由于其可插拔的架构,它可以扩展到支持更多的平台和语言。

目前,你可以用C,C ++和Objective-C编写插件。

名称中的“WSGI”部分是对同名Python标准的致敬,因为它是第一个为该项目开发的插件。

多function性,性能,低资源使用和可靠性是项目的优势(也是唯一遵循的规则)。

我自己在多个生产环境中使用,强烈推荐!