我试图了解将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;
}
答案 0 :(得分:1)
您可以使用nginx发出重定向:
server{
server_name app1.company.com;
listen 443 ssl;
# other setup
location = / {
rewrite ^ https://app1.company.com/app1/;
}
location / {
# as before
}
}