我在/ var / files中有2个html文件:host1.html和host2.html。 我希望nginx根据rails响应提供任何服务(作为索引文件),例如http://localhost - 应该呈现host1.html或host2.html。
这是Rails控制器:
class HomeController < ApplicationController
def index
response.headers['X-Accel-Redirect'] = 'host1.html'
head :ok
end
end
和nginx配置:
upstream app_server {
server 0.0.0.0:3000 fail_timeout=0;
}
server {
listen 8080 default;
location /{
proxy_pass http://app_server;
internal;
root /var/files/;
}
}
这不起作用。
如果删除内部 - 请求代理到Rails,但没有发生内部重定向...
另外,我不仅要提供html文件 - 实际上也是如此。
请指教。 感谢。
答案 0 :(得分:2)
我会用这样的东西
nginx config:
upstream app_server {
server 0.0.0.0:3000 fail_timeout=0;
}
server {
listen 8080 default;
location / {
proxy_pass http://app_server;
}
location /internal/ {
internal;
alias /var/files/;
}
}
Rails控制器:
class HomeController < ApplicationController
def index
response.headers['X-Accel-Redirect'] = '/internal/host1.html'
head :ok
end
end
这里我们定义将提供静态文件的“虚拟”文件夹/internal/
。当Rails“重定向”到/internal/host1.html
时,nginx会将其与location /internal/
匹配,请将/internal/
替换为/var/files/
(有关详细信息,请参阅alias)并提供静态文件{{ 1}}。但如果用户将浏览器指向/var/files/host1.html
,则由于/internal/host1.html
指令而导致404错误。