正如标题所说,我需要两个 HTTP_X_ACCEL_MAPPING
Nginx 中服务器块中的环境变量。
简单地指定两次配置不起作用,因为第二个会覆盖第一个。
这就是我所拥有的(不起作用):
server {
listen 80;
root /var/www/mysite/public;
server_name www.mysite.com;
passenger_enabled on;
rails_env production;
passenger_env_var HTTP_X_ACCEL_MAPPING /var/www/mysite/myfolder/=/loc/;
passenger_env_var HTTP_X_ACCEL_MAPPING /var/www/mysite/myotherfolder/=/loc2/;
passenger_pass_header X-Accel-Redirect;
location /loc {
root /var/www/mysite/myfolder;
internal;
}
location /loc2 {
root /var/www/mysite/myfolder;
internal;
}
}
只有一个
HTTP_X_ACCEL_MAPPING
一切正常但我无法指定多个。我尝试通过用逗号分隔它们来指定多个值,如下所示:passenger_env_var HTTP_X_ACCEL_MAPPING /var/www/mysite/myfolder/=/loc/,/var/www/mysite/myotherfolder/=/loc2/;
但这没有用。
任何人都知道如何做到这一点?
最佳答案
2021/01 更新:
根据评论,Rack 现在支持:https://github.com/rack/rack/issues/1387#issuecomment-573355784
原答案:
根据机架 gem 的当前实现,这是不可能的。这是rack 2.0.1 (lib/rack/sendfile.rb)中的代码
def map_accel_path(env, path)
if mapping = @mappings.find { |internal,_| internal =~ path }
path.sub(*mapping)
elsif mapping = env['HTTP_X_ACCEL_MAPPING']
internal, external = mapping.split('=', 2).map(&:strip)
path.sub(/^#{internal}/i, external)
end
end
如您所见,此代码仅查找第一个 '=' 并假设它之前的所有内容都是内部路径,之后的所有内容都是外部路径。
关于nginx - 一个服务器 block 中有多个 HTTP_X_ACCEL_MAPPING,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36026098/