基于rails服务器响应,使用nginx提供静态html页面

时间:2015-09-03 16:10:05

标签: ruby-on-rails nginx

我在/ 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文件 - 实际上也是如此。

请指教。 感谢。

1 个答案:

答案 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错误。