正如标题所说,我需要在Nginx的服务器块中有两个HTTP_X_ACCEL_MAPPING
环境变量。
简单地指定两次配置并不起作用,因为第二个配置会覆盖第一个配置。
这就是我所拥有的(不起作用):
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/;
但那并没有奏效。 谁知道怎么做?
答案 0 :(得分:0)
根据架子宝石的当前实现,这是不可能的。这是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
正如您所看到的,此代码仅查找第一个'='并假设它是内部路径之前的所有内容,之后的所有内容都是外部路径。