अपाचे प्रॉक्सी: कोई प्रोटोकॉल हैंडलर मान्य नहीं था


192

मैं दूसरे सर्वर पर एक उपनिर्देशिका प्रॉक्सी करने की कोशिश कर रहा हूं। मेरा httpd.conf:

RewriteEngine On
ProxyPreserveHost On
RewriteRule .*subdir/ https://anotherserver/subdir/ [P]

समस्या यह है कि अपाचे हमेशा यह लॉगिंग है:

AH01144: No protocol handler was valid for the URL /subdir/. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule., referer: http://localhost/

इसलिए इंटरनेट सर्च करने के बाद, मैंने इन मॉड्यूल्स को सक्रिय कर दिया है:

LoadModule headers_module modules/mod_headers.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_express_module modules/mod_proxy_express.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_html_module modules/mod_proxy_html.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
LoadModule rewrite_module modules/mod_rewrite.so

(मुझे पता है कि मुझे उन सभी की आवश्यकता नहीं है, लेकिन मैंने उन्हें सक्रिय करने के लिए सुनिश्चित किया है कि मैं एक लापता नहीं हूं)

लेकिन यह त्रुटि अभी भी प्रकट होती है और क्लाइंट को HTTP 500 मिलता है।

मैं इसे कैसे ठीक करूं?


ऐसा लगता है कि प्रॉक्सी अनुरोध के लिए कुछ HTTPS हैंडलर की जरूरत है। इसके बजाय HTTP का प्रयास करें ...
डेडोशका

9
मुझे लगता है कि आपको जरूरत है mod_sslऔर SSLProxyEngineसाथProxyPass
डेडोशका

@Deadooshka हाँ, यह काम कर रहा है। यदि आप इसे उत्तर के रूप में पोस्ट करते हैं, तो मैं इसे स्वीकार कर सकता हूं
das_j

जवाबों:


421

यदि आप mod_proxy_httpसक्षम नहीं हैं, तो यह हो सकता है

sudo a2enmod proxy_http

मुझे अपना https आधारित लोड बैलेंसर काम करवाने के लिए, मुझे निम्नलिखित को सक्षम करना था:

sudo a2enmod ssl
sudo a2enmod proxy
sudo a2enmod proxy_balancer
sudo a2enmod proxy_http

23
मुझे अपने उपयोग के मामले के लिए एक 'sudo a2enmodxy_wstunnel' भी करना था।
जिमजेटी

8
मेरे लिए यह था LoadModule ssl_module modules/mod_ssl.so। मुझे भी इस्तेमाल करना था SSLProxyEngine on
क्लो

1
मुझे भी सक्षम होना थाmod_slotmem_shm
सिगिंगएफ

2
WAMP पर मेरे लिए, मैंने मेनू के माध्यम से ऊपर के मॉड्यूल स्थापित किए और LoadModule slotmem_shm_module modules/mod_slotmem_shm.sohttpd.conf
Flion

1
मुझे जरूरत थी sudo a2enmod proxy_connect, जो CONNECT
राउल नोहे गुडनेस

22

मेरे Apache2.4 + php5-fpm की स्थापना के लिए काम करना शुरू करने के लिए, मुझे निम्नलिखित अपाचे मॉड्यूल को सक्रिय करने की आवश्यकता है:

sudo a2enmod proxy
sudo a2enmod proxy_fcgi

इसके लिए कोई ज़रूरत नहीं है proxy_http, और यह वही है जो सभी .phpफ़ाइलों को सीधे php5-fpm पर भेजता है:

<FilesMatch \.php$>
    SetHandler "proxy:unix:/var/run/php5-fpm.sock|fcgi://localhost"
</FilesMatch>

हाँ, fcgi के लिए यह सच है, लेकिन मेरे पास एक HTTP प्रॉक्सी था। :)
das_j

10

मेरे मामले में, मुझे proxy_ajpमॉड्यूल की आवश्यकता थी ।

a2enmod proxy proxy_http proxy_ajp 

8

यह मेरे लिए मेरे Apache / 2.4.18 (Ubuntu) सेटअप में हो रहा था। मेरे मामले में, मैं जो त्रुटि देख रहा था वह थी:

... AH01144: No protocol handler was valid for the URL /~socket.io/. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.

इससे संबंधित विन्यास था:

  ProxyPass /~socket.io/ ws://127.0.0.1:8090/~socket.io/
  ProxyPassReverse /~socket.io/ ws://127.0.0.1:8090/~socket.io/

" No protocol handler was valid for the URL /~socket.io/" इसका मतलब है कि अपाचे " ws://127.0.0.1:8090/~socket.io/" को भेजे जा रहे अनुरोध को संभाल नहीं सका

मैंने proxy_httpलोड किया था , लेकिन जरूरत भी थी proxy_wstunnel। एक बार सक्षम होने के बाद सब अच्छा था।


6

भविष्य के संदर्भ के लिए स्पष्ट करने के लिए, a2enmod, जैसा कि ऊपर कई उत्तरों में सुझाया गया है, डेबियन / उबंटू के लिए है। Red Hat इसका उपयोग Apache मॉड्यूल को सक्षम करने के लिए नहीं करता है - इसके बजाय यह httpd.conf में LoadModule कथनों का उपयोग करता है।

यहां अधिक: /server/56394/how-do-i-enable-apache-modules-from-the-command-line-in-redhat

संकल्प / सही उत्तर ओपी पर टिप्पणियों में है:

मुझे लगता है कि आपको ProxyPass के साथ mod_ssl और SSLProxyEngine की आवश्यकता है - डेडोशका मई 29 '14 को 07:40 बजे

@Deadooshka हां, यह काम कर रहा है। यदि आप इसे उत्तर के रूप में पोस्ट करते हैं, तो मैं इसे स्वीकार कर सकता हूं - das_j 29 मई '14 को 12:04 बजे


4

मैं यहां एक उत्तर पोस्ट कर रहा हूं, क्योंकि मेरे पास एक अलग कारण के लिए एक ही त्रुटि संदेश था।

यह त्रुटि संदेश हो सकता है, उदाहरण के लिए, यदि आप प्रोटोकॉल बी पर लक्षित करने के लिए प्रोटोकॉल ए पर स्रोत से प्रॉक्सी अनुरोधों के लिए अपाचे httpd का उपयोग कर रहे हैं।

यहाँ मेरी स्थिति का उदाहरण है:

AH01144: कोई प्रोटोकॉल हैंडलर URL / sockjs-node / info (योजना 'ws') के लिए मान्य नहीं था।

उपरोक्त मामले में, जो हो रहा था, वह केवल निम्नलिखित था। मैंने पथ प्रॉक्सी / sockjs- नोड के आधार पर नोड्स के लिए प्रॉक्सी वेबसोकेट अनुरोधों के लिए मॉड प्रॉक्सी को सक्षम किया था।

समस्या यह है कि नोड विशेष रूप से वेबसोकेट अनुरोधों के लिए पथ / sockjs-नोड का उपयोग नहीं करता है। यह REST प्रविष्टि की मेजबानी के लिए भी इस पथ का उपयोग करता है जो वेबस्कैट के बारे में जानकारी प्रदान करता है।

इस तरीके से, जब एप्लिकेशन http: // localhost: 7001 / sockjs-node / info को खोलने का प्रयास करेगा , तो Apache httpd HTTP प्रोटोकॉल से बाकी कॉल को Webscoket एंडपॉइंट कॉल पर रूट करने का प्रयास कर रहा होगा। नोड ने इसे स्वीकार नहीं किया।

यह ऊपर के अपवाद को जन्म देता है।

इसलिए ध्यान रखें कि यदि आप सही मॉड्यूल को सक्षम करते हैं, यदि आप गलत अग्रेषण करने की कोशिश करते हैं, तो यह अपाचे httpd के साथ समाप्त होगा जो आपको सूचित करेगा कि आपने लक्ष्य सर्वर पर जिस प्रोटोकॉल का उपयोग करने की कोशिश की है वह वैध नहीं है।


यह शायद छद्म था। स्वीकृत उत्तर पर पहली टिप्पणी देखें।
Lerk

0

मैंने एक uwsgi://काम करने की कोशिश की , लेकिन किसी तरह मैनुअल ने सोचा कि यह मेरे लिए स्पष्ट है कि मुझे वास्तव में जरूरत है mod_proxy_uwsgi। यह नहीं था। यहां बताया गया है कि आप यह कैसे करते हैं: mod_proxy_uwsgi या mod_uwsgi कैसे संकलित करें?


0

मेरे लिए सभी उपर्युक्त उत्तर xampp पर सक्षम थे फिर भी काम नहीं कर रहे थे। मॉड्यूल के नीचे सक्षम करने से वर्चुअल होस्ट कार्य फिर से शुरू हो गया

LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.