मैं एक ही सर्वर पर एक अलग पोर्ट पर उप-डोमेन कैसे पुनर्निर्देशित करूं?


67

मेरे पास कुछ उप डोमेन हैं जो मैं एक ही सर्वर पर विशिष्ट बंदरगाहों पर पुनर्निर्देशित करना चाहता हूं। बोलो मेरे पास है

dev.mydomain.com 

मैं dev.mydomain.comपारदर्शी रूप से पुनर्निर्देशित mydomain.com:8080करना चाहता हूं और मैं ब्राउज़र के मूल उप-डोमेन नाम को संरक्षित करना चाहता हूं।

मैं अपाचे 2.2 के साथ यह कैसे करूं? मेरे पास Apache 2.2 डिफॉल्ट पोर्ट पर चल रहा है 80। ऐसा होने के लिए मैं लेखन विन्यास का पता नहीं लगा सकता।

मैं dev.mydomain.comDNS में हल करने के लिए पहले से ही सेट अप कर चुका हूं mydomain.com

यह एक इंट्रानेट डेवलपमेंट सर्वर के लिए है, जिसका नॉन-रूटेबल आईपी एड्रेस है, इसलिए मैं कारनामों और सुरक्षा के बारे में इतना चिंतित नहीं हूं जो सार्वजनिक रूप से सामना करने वाले सर्वर के साथ समझौता करेगा।

जवाबों:


69

उपाय

यहाँ पर मीलों एरिकसन द्वारा सही दिशा में स्थापित किए जाने के बाद मैं आखिरकार क्या कर रहा हूं। मैं चाहता था कि पता बार अनुरोध के मूल उपडोमेन / डोमेन को प्रतिबिंबित करे और पुनर्निर्देशित सर्वर और पोर्ट को नहीं, लेकिन उसने मुझे एक समाधान का उपयोग करके Google के लिए सही रास्ते पर रखा VirtualHostऔर मुझे एक समाधान मिला जिसमें इसका उपयोग शामिल था mod_proxy

<VirtualHost *:80>
    ServerAdmin me@mydomain.com
    ServerName dev.mydomain.com
    ProxyPreserveHost On

    # setup the proxy
    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>
    ProxyPass / http://localhost:8888/
    ProxyPassReverse / http://localhost:8888/
</VirtualHost>

7
इस उत्तर के लिए काम नहीं करने वाले सभी लोगों के लिए, ध्यान रखें कि आपको मॉड्स mod_proxyको भी सक्षम करना होगा proxy_http
matewka

9

यह मानते हुए कि dev.mydomain.com को mydomain.com के IP में हल किया जा सकता है, आप निम्नलिखित को अपने httpd.conf में जोड़ सकते हैं:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName dev.mydomain.com
    redirect / http://mydomain.com:8080/
</VirtualHost>

प्रासंगिक अपाचे प्रलेखन:

  1. नाम-आधारित वर्चुअल होस्ट बनाने के लिए गाइड
  2. VirtualHost और NameVirtualHost सहित कोर
  3. पुन: निर्देशित

संबंधित प्रश्न: अपाचे पुनर्निर्देशित होस्टनाम पर आधारित है

(नोट: इस उत्तर के मूल संस्करण ने गलत तरीके से RedirectMatch के उपयोग का सुझाव दिया, जो @ChrisS के रूप में इंगित किया गया है, URL के डोमेन भाग को पार्स नहीं कर सकता है।)


1
मैंने जो वास्तव में उपयोग किया था, उसके लिए अपना स्वयं का प्रदान किया गया उत्तर देखें, जो कि रीडायरेक्ट करने के बजाय मूल होस्ट को संरक्षित करने के लिए mod_proxy के साथ VirtualHost का यह विचार है। यह एक आंतरिक सर्वर है इसलिए मुझे mod_proxy की सुरक्षा या कारनामों से कोई सरोकार नहीं है।

1
कई अन्य सुझाव मिले लेकिन यह अंततः मेरे लिए विंडोज सर्वर 2008 R2 / अपाचे 2.2.25 पर काम किया।
HPWD

1
इस समाधान के साथ समस्या यह है कि आपके भाई में, आप पहले डोमेन पर नहीं रहते हैं, आपको 302 से दूसरे नंबर पर मिलता है।
प्लेमोर

7

टर्मिनल पर निम्न पंक्ति चलाएँ (अपने डोमेन और उप डोमेन नाम को सही ढंग से निर्दिष्ट करें)

sudo nano /etc/apache2/sites-available/subdomain.example.com.conf 

निम्नलिखित कोड पेस्ट करें और अपनी आवश्यकता के अनुसार बदलें

<VirtualHost *:80>
        ServerAdmin admin@example.com
        ServerName subdomain.example.com
        ServerAlias subdomain.example.com
        ProxyRequests Off

        #ProxyPass / http://localhost:8080/
        <Location />
                ProxyPreserveHost On
                ProxyPass http://example.com:8080/
                ProxyPassReverse http://example.com:8080/
        </Location>
     # Uncomment the line below if your site uses SSL.
     #SSLProxyEngine On
</VirtualHost>

टर्मिनल पर निम्न पंक्तियाँ चलाएँ (अपने डोमेन और उप डोमेन नाम को सही ढंग से निर्दिष्ट करें)

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2ensite subdomain.example.com.conf
sudo service apache2 restart

3
क्या इस और स्वीकृत उत्तर के बीच कोई आवश्यक अंतर है?
कास्परड

1
ज्यादातर लोग जोड़ना भूल जाते हैं sudo a2enmod proxy_httpताकि उन्हें ठीक से चलने में दिक्कतों का सामना करना पड़े। इसके अलावा, मैं और अधिक acculturate मदद करने के लिए एक क्रम में शुरू से अंत तक पूरी प्रक्रिया देने की कोशिश करते हैं। आपके प्रश्न के लिए धन्यवाद।
मेक रिपन

1
+1 "प्रोक्सीरसाइस्ट्स ऑफ" का उल्लेख करने के कारण
सेबस्टियन

1
यह सिर्फ मेरे लिए काम नहीं करता है। 'sudo a2enmod subdomain.domain.com.conf' का कहना है कि "त्रुटि: मॉड्यूल xyz मौजूद नहीं है!" क्या इसे 'डिफ़ॉल्ट' कॉन्फ़िगरेशन में उल्लिखित किया जाना है?
डिर्क शूमाकर

2
उपडोमेन रजिस्टर करने में सुधार sudo a2ensite sub.yourdomain.com
अली अजहर

5

अपने मुख्य vhost कॉन्फ़िगरेशन में निम्न पंक्तियाँ जोड़ें:

ProxyPreserveHost On
ProxyPass / http://example.com:8080/
ProxyPassReverse / http://example:8080/

ध्यान दें कि इसके लिए Apache पर mod_proxy की आवश्यकता होती है।


यह अनुप्रेषित नहीं है; यह कनेक्शन को सम्‍मिलित करता है। यदि आप इसे बहुत सावधानी से कॉन्फ़िगर नहीं कर रहे हैं, तो mod_proxy को सक्रिय करना बेहद आसान हो सकता है। मैं इसके खिलाफ अत्यधिक सिफारिश करूंगा।
क्रिस एस

4
वह अपने ओपी के अनुसार पुनर्निर्देशन नहीं चाहता है। वह चाहता है कि मूल URL पता बार में बना रहे; इसका मतलब है कि mod_proxy या mod_rewrite, और y'all का बेहतर उपयोग करके mod_rewrite से बचें।
एडेप्टर

4

आप mod_rewrite की तलाश कर रहे हैं। यह है अपाचे के प्रलेखन के लिए लिंक जिसमें बुनियादी और उन्नत विन्यास के लिए कई उदाहरण शामिल हैं ।

और यदि आप स्वयं दस्तावेज़ की व्याख्या करने में असमर्थ हैं, तो इसे httpd.conf में जोड़ने का प्रयास करें:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^dev\.example\.com$ [NC]        
RewriteRule ^(.*)$ http://example.com:8080$1 [R=301]    

और अगर यह एक स्पष्ट उदाहरण नहीं है, तो यहां एक mod_rewrite शुरुआती गाइड का लिंक भी है।


1
मैं साझा होस्टिंग पर हूँ। फिर से लिखना एकमात्र विकल्प है। मैं एक .htaccess फ़ाइल बना सकता हूं, लेकिन प्रॉक्सी या वर्चुअल होस्ट नहीं।
अबल्टर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.