2016-07-19 14 views
0

Ich versuche, die beste Art und Weise zu verstehen, den gesamten Datenverkehr für https://app.company.com/ zu https://app.company.com/appURL hinzufügen Präfix auf Anfragen mit nginx oder Schienen

zu umleiten app.company.com ist ein Schienen 4.2-Server, der statische Vermögenswerte dienen nginx verwendet und Einhorn, um die Schienenanforderungen zu behandeln.

Sollte diese Umleitung in nginx oder Rails passieren?

Zurück Geschichte:

Vor ein paar Jahren unterstützte ich einige Schienen-Anwendungen, die auf dem Intranet URL Vorfixieren installiert wurden, wie:

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

company.com lief einen nginx-Server, der Verkehr geroutet Jeder App-Server basiert auf dem URL-Präfix.

Jeder App-Server führt nginx aus, um statische Assets und Unicorn als Rails-Server bereitzustellen.

Kürzlich wurde eine Entscheidung getroffen, das Management des Servers von company.com an die Muttergesellschaft zu übergeben. Als Ergebnis wurde eine Entscheidung getroffen, zu jedem Rails-Server über DNS zu verzweigen, wobei anstelle von Nginx-Regeln Subdomains verwendet wurden.

Vorerst Anwendungen werden unter Verwendung zugegriffen werden:

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

Einzelne Applikationsserver weitgehend unverändert sind. Sie laufen immer noch Nginx und Einhorn.

Mein Hauptproblem ist das Verständnis des besten Weges, um Traffic für die Wurzel zu dem URL-Präfix

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

Die Wurzel Route ohne den URL-Präfix zu schieben nie den Schienen-Server erreicht.

UPDATE

Hier ist meine nginx Konfigurationsdatei mit den vorgeschlagenen ursprünglichen Erweiterung von Vashed Antwort.

Ich bin jetzt neugierig, wenn es eine Verfeinerung zu diesem gibt, die meine Konfigurationsdatei erlauben würde, vom Servernamen wie vorher unabhängig zu sein.

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; 
} 

Antwort

1

können Sie eine Umleitung Ausgabe von nginx mit:

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

Vielen Dank @Vasfed, dies habe es funktioniert. Ich bin gespannt, ob es einen Weg gibt, dies zu erreichen, ohne eine Abhängigkeit vom Domain-Namen (zB company.com) einzuführen. Zur Klarstellung habe ich meine nginx-Konfigurationsdatei zu der Frage hinzugefügt, zusammen mit meinem Vorschlag. – davew

+0

@davew können Sie auf 'https: // $ host/app1 /' umleiten, es wird Host von http-Header übernehmen – Vasfed