Apache Proxy: ไม่มีตัวจัดการโปรโตคอลที่ถูกต้อง


192

ฉันพยายามพร็อกซีไดเรกทอรีย่อยไปยังเซิร์ฟเวอร์อื่น httpd.conf ของฉัน:

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

ปัญหาคือ Apache จะทำการบันทึกสิ่งนี้อยู่เสมอ:

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 แทน ...
Deadooshka

9
ฉันคิดว่าคุณต้องการmod_sslและSSLProxyEngineด้วยProxyPass
Deadooshka

@Deadooshka ใช่มันใช้งานได้ หากคุณโพสต์สิ่งนี้เป็นคำตอบฉันสามารถยอมรับได้
das_j

อาจเป็นไปได้ซ้ำกับSetup mod_proxy บน apache http server
Raedwald

คำตอบ:


422

สิ่งนี้สามารถเกิดขึ้นได้หากคุณไม่ได้mod_proxy_httpเปิดใช้งาน

sudo a2enmod proxy_http

สำหรับฉันเพื่อให้ตัวโหลดบาลานเซอร์ของฉันทำงาน https ฉันต้องเปิดใช้งานสิ่งต่อไปนี้:

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

23
ฉันต้องทำ 'sudo a2enmod proxy_wstunnel' ด้วยเพื่อการใช้งานของฉัน
JimJty

8
LoadModule ssl_module modules/mod_ssl.soสำหรับฉันมันเป็น SSLProxyEngine onฉันยังมีการใช้งาน
Chloe

1
ฉันต้องเปิดใช้งานด้วยmod_slotmem_shm
SiggyF

2
สำหรับฉันใน WAMP ฉันติดตั้งโมดูลด้านบนผ่านเมนูและต้องยกเลิกการคอมเม้นต์LoadModule slotmem_shm_module modules/mod_slotmem_shm.soใน httpd.conf
Flion

1
ฉันต้องการsudo a2enmod proxy_connectซึ่งก็คืออุโมงค์ https โดยใช้ CONNECT
Raul Nohea Goodness

22

เพื่อให้การติดตั้ง Apache2.4 + php5-fpm ของฉันเริ่มทำงานฉันต้องเปิดใช้งานโมดูล Apache ต่อไปนี้:

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


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/" หมายความว่า Apache ไม่สามารถจัดการคำขอที่ส่งไปยัง " ws://127.0.0.1:8090/~socket.io/"

ผมเคยproxy_httpโหลด proxy_wstunnelแต่ยังจำเป็น เมื่อเปิดใช้งานแล้วทุกอย่างก็ดี


6

เพื่อชี้แจงสำหรับการอ้างอิงในอนาคต a2enmod ตามที่แนะนำในหลายคำตอบข้างต้นสำหรับ Debian / Ubuntu Red Hat ไม่ได้ใช้สิ่งนี้เพื่อเปิดใช้งานโมดูล Apache - แต่จะใช้คำสั่ง LoadModule ใน httpd.conf

เพิ่มเติมได้ที่นี่: /server/56394/how-do-i-enable-apache-modules-from-the-command-line-in-redhat

ความละเอียด / คำตอบที่ถูกต้องอยู่ในความคิดเห็นใน OP:

ฉันคิดว่าคุณต้องการ mod_ssl และ SSLProxyEngine ด้วย ProxyPass #: 4322 Deadooshka

@Deadooshka ใช่มันใช้งานได้ หากคุณโพสต์สิ่งนี้เป็นคำตอบฉันสามารถยอมรับได้ - das_j 29 พฤษภาคม '14 เวลา 12:04 น


4

ฉันโพสต์คำตอบที่นี่เนื่องจากฉันมีข้อผิดพลาดเดียวกันด้วยเหตุผลอื่น

ข้อความแสดงข้อผิดพลาดนี้สามารถเกิดขึ้นได้ตัวอย่างเช่นหากคุณใช้ apache httpd เพื่อร้องขอพรอกซีจากแหล่งที่มาบนโปรโตคอล A ไปยังเป้าหมายบนโปรโตคอล B

นี่คือตัวอย่างของสถานการณ์ของฉัน:

AH01144: ไม่มีตัวจัดการโปรโตคอลที่ถูกต้องสำหรับ URL / sockjs-node / info (Scheme 'ws')

ในกรณีข้างต้นสิ่งที่เกิดขึ้นคือสิ่งต่อไปนี้ ฉันได้เปิดใช้งาน mod proxy เพื่อ proxy websocket ร้องขอไปยัง nodejs ตามเส้นทาง / sockjs-node

ปัญหาคือว่าโหนดไม่ได้ใช้เส้นทาง / sockjs-node สำหรับการร้องขอ websocket โดยเฉพาะ นอกจากนี้ยังใช้พา ธ นี้สำหรับโฮสต์จุดเข้าใช้งาน REST ที่ให้ข้อมูลเกี่ยวกับเว็บซ็อกเก็ต

ในลักษณะนี้เมื่อแอปพลิเคชันพยายามเปิดhttp: // localhost: 7001 / sockjs-node / info apache httpd จะพยายามกำหนดเส้นทางการโทรที่เหลือจากโปรโตคอล HTTP ไปยังการโทรจุดปลาย Webscoket โหนดไม่ยอมรับสิ่งนี้

นำไปสู่ข้อยกเว้นข้างต้นนี้

ดังนั้นโปรดระวังว่าแม้ว่าคุณจะเปิดใช้งานโมดูลที่เหมาะสมหากคุณพยายามที่จะส่งต่อที่ไม่ถูกต้องสิ่งนี้จะจบลงด้วย apache httpd แจ้งให้คุณทราบว่าโปรโตคอลที่คุณพยายามใช้บนเซิร์ฟเวอร์เป้าหมายนั้นไม่ถูกต้อง


อาจเป็น proxy_wstunnel ดูความคิดเห็นแรกเกี่ยวกับคำตอบที่ยอมรับ
Lerk

0

ฉันพยายามที่จะได้รับuwsgi://ในการทำงาน mod_proxy_uwsgiแต่อย่างใดด้วยตนเองคิดว่ามันเป็นที่ชัดเจนกับผมว่าผมต้องจริง มันไม่ใช่ นี่คือวิธีที่คุณทำ: วิธีการรวบรวม mod_proxy_uwsgi หรือ mod_uwsgi?


0

สำหรับฉันคำตอบทั้งหมดที่กล่าวมาถูกเปิดใช้งานบน xampp แล้วยังไม่ทำงาน การเปิดใช้งานโมดูลด้านล่างทำให้โฮสต์เสมือนทำงานอีกครั้ง

LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.