2009-06-05 10 views
20

के बजाय mod_proxy का उपयोग करना क्या कोई तरीका है कि मैं अपाचे को HTTP प्रॉक्सी का उपयोग करके टॉमकैट से कनेक्ट करता हूं जैसे कि टोमकैट को स्थानीयहोस्ट के बजाय सही आने वाले होस्ट नाम मिलते हैं? मैं अपाचे में इस निर्देश का उपयोग कर रहा:अपाचे + टॉमकैट: AJP

ProxyPass /path http://localhost:8080/path 

लेकिन यह के रूप में स्थानीय होस्ट के माध्यम से आता है, जो बेकार है जब हम एक ही सर्वर पर साइटों का एक समूह है। मैं सर्वर कॉन्फ़िगरेशन में मैन्युअल रूप से होस्ट सेट कर सकता हूं:

<Connector port="8080" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      proxyName="pretend.host" proxyPort="80" /> 

लेकिन यह फिर से एक से अधिक साइट परोसता नहीं है। और मुझे प्रत्येक साइट के लिए एक अलग आंतरिक बंदरगाह का उपयोग करने का विचार पसंद नहीं है, जो वास्तव में बदसूरत लगता है।

क्या पोर्ट को स्थानांतरित करने का कोई तरीका नहीं है जब मैं इसे प्रॉक्सी करता हूं?

(यदि आप से पूछना क्यों मैं सिर्फ AJP का उपयोग नहीं करते, इस सवाल का जवाब this error है। मैं सब कुछ मैं कर सकते हैं कोशिश कर रहा हूँ Tomcat and Apache entirely पर देने से पहले) मैं आपका सर्वश्रेष्ठ दांव लगता है कि अगर आप कई साइटों पर चाहते

उत्तर

36

सेटिंग्स आप देख रहे हैं कर रहे हैं:

<VirtualHost *:80> 
    ServerName public.server.name 

    ProxyRequests Off 
    ProxyPreserveHost On 

    <Proxy *> 
    Order deny,allow 
    Allow from all 
    </Proxy> 

    ProxyPass/http://localhost:8080/ 
    ProxyPassReverse/http://localhost:8080/ 
</VirtualHost> 

ध्यान दें कि हम प्रॉक्सी लक्ष्य के रूप में स्थानीय होस्ट का उपयोग कर रहे। हम ऐसा कर सकते हैं क्योंकि हम ProxyPreserveHost सक्षम करते हैं। प्रलेखन में कहा गया है कि

यह विशेष रूप से प्रॉक्सिड मास नाम-आधारित वर्चुअल होस्टिंग जैसे विशेष कॉन्फ़िगरेशन में उपयोगी है, जहां मूल होस्ट हेडर को बैकएंड सर्वर द्वारा मूल्यांकन करने की आवश्यकता है।

जो आपको लगता है कि आप क्या कर रहे हैं।

+1

बढ़िया, यह वही है जो मुझे चाहिए था। धन्यवाद! –

+0

आप स्थिर फाइलों को कैसे पूरा करेंगे? अर्थात। आप अपाचे को '/ static' से अनुरोध किए गए सब कुछ सर्वर पर कैसे बताएंगे, इसके लिए आप दस्तावेज़ रूट कैसे सेट करेंगे? – Luke

+0

@Luke - ProxyPassMatch आपको मदद करनी चाहिए: http://httpd.apache.org/docs/current/mod/mod_proxy.html#proxypassmatch –

5

वही सर्वर आपके अपाचे कॉन्फ़िगरेशन में वर्चुअल होस्ट का उपयोग करना है। यहाँ एक उदाहरण है: आप के रूप में server.domain.com अपने बाहरी DNS में पंजीकृत जब तक

<VirtualHost *:80> 
ServerName server.domain.com 

ProxyRequests Off 
<Proxy *> 
    Order deny,allow 
    Allow from all 
</Proxy> 

ProxyPass/http://server.domain.com:8080/ 
ProxyPassReverse/http://server.domain.com:8080/ 
<Location /> 
    Order allow,deny 
    Allow from all 
</Location> 

, भेजे होस्ट नाम ग्राहक यूआरएल में प्रदर्शित किया जाएगा। मैं इस विधि का उपयोग कर 3 अलग-अलग साइटों को होस्ट करने वाला एक सर्वर चला रहा हूं, जिसमें 3 शामिल हैं।

+0

हम निश्चित रूप अपाचे में आभासी मेजबान का उपयोग कर रहे हैं, लेकिन मैं में स्थानीय होस्ट उपयोग कर रहा था प्रॉक्सीपास निर्देश। इसके बजाय उचित डोमेन का उपयोग स्वीकार्य है, लेकिन बिल्कुल सही नहीं है - यह उस डोमेन को ओवरराइड करता है जिस पर अनुरोध आया था, जानकारी जो लाइन के नीचे उपयोग की जाती है। –

0

आप अभी भी एजेपी का उपयोग कर सकते हैं, और आपको HTTP से तेज़ होना चाहिए। बस http.conf में यह सक्षम करना सुनिश्चित करें:

LoadModule proxy_module modules/mod_proxy.so 
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so 

उस मामले में, इस विन्यास मेरे लिए काम करता है:

<VirtualHost *:80> 
    ServerName public.server.name 

    ProxyRequests Off 
    ProxyPreserveHost On 

    <Proxy *> 
    Order deny,allow 
    Allow from all 
    </Proxy> 

    ProxyPass/ajp://localhost:8080/ 
# ProxyPassReverse might not be needed, 
# it's only for redirecting from inside. 
# ProxyPassReverse/ajp://localhost:8080/ 
</VirtualHost>