2012-05-10 7 views
10

passieren Ich brauche diese beiden Arten von umschreibt:nginx Sub-Domain und Domain-Rewrite w Proxy

subdomain.domain.com => domain.com/website/subdomain

otherdomain.com => domain.com/userdomain/otherdomain.com

Mein Problem ist, dass ich der Benutzer möchte subdomain.domain.com sehen, und otherdomain.com, nicht die umgeleitete Version. Mein aktueller Rewrite in nginx funktioniert, aber die URL des Benutzers zeigt das Umschreiben, und ich möchte diese für den Benutzer transparent sein, irgendwelche Ideen ?:

upstream domain_server { server localhost:8000 fail_timeout=0; }  

server { 
     listen 80; 
     root /var/www/domain.com; 

     server_name domain.com ~^(?<subdomain>.*)\.domain\.com$ ~^(?<otherdomain>.*)$; 
     if ($subdomain) { 
       rewrite^http://domain.com/website/$subdomain break; 
     } 
     if ($otherdomain) { 
       rewrite^http://domain.com/userdomain/$otherdomain break; 
     } 

     location/{ 
       proxy_redirect off; 
       proxy_buffering off; 
       proxy_set_header Host $http_host; 
       proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for; 
       if (!-f $request_filename) { 
         proxy_pass http://domain_server; 
         break; 
       } 
     } 

} 
+0

hier etwas Interessantes gefunden: http://blog.martinfjordvald.com/2011/02/nginx-primer- 2-von-Apache-zu-Nginx /. Es sagt "Eine andere Sache über Nginx umschreibt ist, dass sie standardmäßig interne Umschreibungen sind, was bedeutet, dass sie die URI, die der Browser sieht, nicht ändern. Sie werden das nur tun, wenn Sie das Umleitungsflag oder" permanent "umschreiben wenn Sie eine absolute URL mit dem http: // Teil umschreiben. ". Versuchen, dies zu verwenden, um mit einer Lösung zu kommen ... – pyramation

Antwort

24

Mit nginx Sie nicht Schreibungen überhaupt brauchen.

upstream domain_server { server localhost:8000 fail_timeout=0; } 

proxy_set_header Host domain.com; 
proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for; 

server { 
    listen 80 default_server; 

    location/{ 
     proxy_pass http://domain_server/userdomain/$http_host; 
    } 
} 

server { 
    listen 80; 
    server_name domain.com; 

    root /var/www/domain.com; 

    location/{ 
     try_files $uri @backend; 
    } 

    location @backend { 
     proxy_pass http://domain_server; 
    } 
} 

server { 
    listen 80; 
    server_name ~^(?<subdomain>.+)\.domain\.com$; 

    location/{ 
     proxy_pass http://domain_server/website/$subdomain$request_uri; 
    } 
} 
+0

Danke für die große Antwort, jedoch, /var/www/domain.com/userdomain/$host existiert nicht, aber die URL domain.com/userdomain/$ Gastgeber tut es. Die Idee war, den Benutzer transparent zu dieser URL Proxy, wenn sie ihre eigene Domain verwenden, die auf den Server – pyramation

+1

verwiesen wird. Also, verwenden Sie einfach Proxy_pass http: // Domain-Server/Userdomäne/$ Host; – VBart

+0

Ich habe meine Konfiguration aktualisiert Beispiel entsprechend. – VBart