2016-09-12 4 views
2

Ich habe eine Rails-App auf Digital Ocean mit Unicorn, NGINX auf Ubuntu und ich versuche mit einer Reihe von Subdomains wie app1.example.com, app2.example.com, usw.Mehrere Subdomains leiten weiter zum Root-Pfad

In meinen Routen mir das tue:

constraints(Subdomain) do 
    match '/', to: 'pages#landing', via: [:get, :post] 
end 

Was ich fange Sub-Domain-Präfixe und zeigt die entsprechende Zielseite von der Steuerung unterstützt. Lokal funktioniert es großartig, aber NGINX scheint auf jeden Fall zum Root-Pfad der App umzuleiten.

Hier ist meine NGINX config:

upstream app_server { 
    server unix:/var/run/unicorn.sock fail_timeout=0; 
} 

server { 
    listen 80; 
    server_name example.com *.example.com; 
    return 301 https://$server_name$request_uri; 
} 

#When the wildcard above didn't work, 
#I tried hardcoding below but still nothing 
server { 
    listen 80; 
    server_name app1.example.com; 
    return 301 https://$server_name$request_uri; 
} 


server { 
    root /home/rails/example/public; 
    index index.htm index.html; 
    listen 443 ssl spdy; 
    listen [::]:443 ssl spdy; 
    ... 
    ssl_protocols TLSv1.1 TLSv1.2; 
    # ssl_ciphers 
    ssl_prefer_server_ciphers on; 
    add_header Strict-Transport-Security max-age=15768000; 
    ssl_stapling on; 
    ... 
    resolver 8.8.8.8 8.8.4.4 valid=86400; 
    resolver_timeout 10; 

    location/{ 
    try_files $uri/index.html $uri.html $uri @app; 
    } 

    location ~* ^.+\.(jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|mp3|flv|mpeg|avi)$ { 
    try_files $uri @app; 
    } 

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

Was soll ich hier fehlt?

Antwort

1

Ich denke, Sie sollten die Variable $ host statt $ servername verwenden, da $ servername nur der erste Wert in der Liste der Hostnamen sein kann und Sie den Hostnamen verwenden möchten, den der Benutzer in den http-Headern angegeben hat.

server { 
    listen 80; 
    server_name example.com *.example.com; 
    return 301 https://$host$request_uri; 
} 

Auch wenn Ihr hart codiert Beispiel ist nach dem Platzhalter-Server Block dann wäre es nicht immer angepasst bekommen, weil die Anforderungen immer das überein wahrscheinlich, bevor es und das ist, warum das nicht funktioniert.

Related Question

+0

Dies schien es für mich zu tun! Jetzt auf ssl; Vielen Dank!! – albaba

0
server { 
    listen 80; 
    server_name example.com; 
} 

Das oben sollte alles, was Sie brauchen werden. Sie müssen nicht umleiten, um Subdomains zu akzeptieren, noch müssen Sie einen Platzhalter verwenden. Und entfernen Sie die "Rückkehr" s

Verwandte Themen