使用nginx或rails

时间:2016-07-19 16:25:41

标签: ruby-on-rails nginx

我试图了解将https://app.company.com/的所有流量重定向到https://app.company.com/app的最佳方式

app.company.com是一个rails 4.2服务器,它使用nginx来提供静态资产,使用unicorn来处理rails请求。

这种重定向应该发生在nginx还是rails?

背景故事:

几年前,我支持使用URL Prefixing在Intranet上安装的一些rails应用程序,例如:

https://company.com/app1/
https://company.com/app2/
https://company.com/app3/

company.com运行了一个nginx服务器,该服务器根据网址前缀将流量路由到每个应用服务器。

每个应用服务器运行nginx以提供静态资产,并将独角兽作为rails服务器运行。

最近决定将company.com服务器的管理权交给母公司。因此,决定使用子域代替nginx规则通过DNS路由到每个rails服务器。

现在可以使用以下方式访问应用:

https://app1.company.com/app1/
https://app2.company.com/app2/
https://app3.company.com/app3/

个人应用服务器基本没有变化。他们仍然运行nginx和独角兽。

我的主要问题是了解将根的流量推送到网址前缀的最佳方法

https://app1.company.com/  -->  https://app1.company.com/app1/

没有url前缀的根路由之前从未到达rails服务器。

更新

这是我的nginx配置文件,其中包含Vashed的答案提出的原始增强功能。

我现在很好奇是否有一个改进,这将允许我的配置文件像以前一样独立于服务器名称。

upstream unicorn {
  server unix:/tmp/unicorn.app1.sock fail_timeout=0;
}

server {
  listen 80 deferred;

  # ADDED THIS LOCATION BLOCK PER VASFED'S ANSWER
  location = / {
    rewrite ^ https://app1.company.com/app1;
  }

  location /app1/assets {
    alias /var/www/application/current/public/app1/assets;
  }

  # Serve file uploads from nginx
  location /app1/system {
    alias /var/www/application/current/public/app1/system;
  }

  try_files $uri $uri/ @unicorn;

  location @unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://unicorn;
  }

  client_max_body_size 1G;
  keepalive_timeout 10;
}

1 个答案:

答案 0 :(得分:1)

您可以使用nginx发出重定向:

server{
  server_name app1.company.com;
  listen 443 ssl;
  # other setup
  location = / {
    rewrite ^ https://app1.company.com/app1/;
  }
  location / {
    # as before
  }
}