2016-07-19 47 views
0

我想了解的最好方式重定向流量,都https://app.company.com/https://app.company.com/app使用nginx的或導軌請求添加網址前綴

app.company.com是一個軌道,它使用的nginx服務靜態資產4.2服務器和獨角獸來處理軌道請求。

這個重定向應該發生在nginx還是rails?

背景故事:

幾年前,我決定支持上分別安裝使用URL加前綴,例如Intranet,一些Rails應用:

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

company.com跑哪路由流量到nginx的服務器每個應用服務器都基於url前綴。

每個應用程序服務器都運行nginx以提供靜態資產和獨角獸作爲rails服務器。

最近決定將company.com服務器的管理權移交給母公司。因此,決定通過DNS使用子域來代替nginx規則來路由到每個rails服務器。

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

各個應用服務器是大部分保持不變:

現在的應用程序將使用來訪問。他們仍然運行nginx和獨角獸。

我的主要問題是理解,推動流量爲根,以URL前綴

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

沒有網址的前綴根路徑之前從來沒有達到過軌服務器的最佳方式。

UPDATE

這裏是由Vashed的回答提出的原始增強我的nginx的配置文件。

我現在好奇,是否有一個改進,這將允許我的配置文件獨立於服務器名稱像以前一樣。

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

可以使用nginx的發出重定向:

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

非常感謝@Vasfed,這得到了它的工作。我很好奇,如果有一種方法可以實現這一點,而不會引入對域名的依賴(例如company.com)。爲了澄清,我將我的nginx配置文件添加到了問題中,並附上了您的建議。 – davew

+0

@davew你可以重定向到'https:// $ host/app1 /',它會從http頭部獲取主機 – Vasfed