2012-05-10 20 views
10

पारित मैं पुनर्लेखन इन दो प्रकार की जरूरत है:nginx उप डोमेन और डोमेन पुनर्लेखन डब्ल्यू प्रॉक्सी

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

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

मेरे समस्या यह है कि मैं उपयोगकर्ता subdomain.domain.com देखना चाहते है, और otherdomain.com, नहीं पुनर्निर्देशित संस्करण। nginx में मेरे वर्तमान फिर से लिखने से काम करता है, लेकिन उपयोगकर्ता के URL रीराइट से पता चलता है, और मैं इस किसी भी विचार ?:

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

यहाँ कुछ रोचक लगा: http://blog.martinfjordvald.com/2011/02/nginx-primer- 2-से-अपाचे करने वाली nginx /। यह कहता है "Nginx पुनर्लेखन के बारे में एक और बात यह है कि डिफ़ॉल्ट रूप से वे आंतरिक पुनर्लेखन होते हैं, जिसका अर्थ है कि वे यूआरआई को ब्राउज़र को नहीं देख पाएंगे। वे केवल तभी ऐसा करेंगे जब आप" रीडायरेक्ट "या" स्थायी "फिर से लिखना ध्वज निर्दिष्ट करते हैं या यदि आप http: // part सहित एक पूर्ण यूआरएल को फिर से लिखते हैं। " समाधान के साथ आने के लिए इसका उपयोग करने की कोशिश कर रहा है ... – pyramation

उत्तर

24
nginx आप बिल्कुल पुनर्लेखन की जरूरत नहीं है के साथ

उपयोगकर्ता, के लिए पारदर्शी होना चाहता हूँ।

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

महान प्रतिक्रिया के लिए धन्यवाद, हालांकि, /var/www/domain.com/userdomain/$host मौजूद नहीं है, लेकिन URL domain.com/userdomain/$ मेजबान करता है विचार यह था कि उपयोगकर्ता को उस URL पर पारदर्शी रूप से प्रॉक्सी करना था जब वे सर्वर – pyramation

+1

पर इंगित करते हुए अपने डोमेन का उपयोग करते हैं, तो बस 'proxy_pass http: // domain_server/userdomain/$ होस्ट का उपयोग करें; ' – VBart

+0

मैंने अपनी कॉन्फ़िगरेशन अपडेट की है तदनुसार उदाहरण। Proxy_pass का उपयोग कर – VBart

संबंधित मुद्दे