Apache Proxy: Hiçbir protokol işleyici geçerli değildi


192

Bir alt dizini başka bir sunucuya proxy yapmaya çalışıyorum. Benim httpd.conf:

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

Sorun Apache'nin her zaman bunu günlüğe kaydetmesidir:

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/

İnternette arama yaptıktan sonra şu modülleri etkinleştirdim:

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

(Hepsine ihtiyacım olmadığını biliyorum, ama eksik olmadığından emin olmak için onları etkinleştirdim)

Ancak bu hata hala görünüyor ve istemciler HTTP 500 alıyor.

Bunu nasıl düzeltebilirim?


proxy isteği için bazı HTTPS işleyicisine ihtiyaç duyduğu anlaşılıyor. Bunun yerine HTTP'yi deneyin ...
Deadooshka

9
Sanırım ihtiyacın var mod_sslve SSLProxyEnginebirlikteProxyPass
Deadooshka

@Deadooshka Evet, bu işe yarıyor. Bunu bir cevap olarak
gönderirseniz

Yanıtlar:


422

Eğer var yoksa bu durum ortaya çıkabilir mod_proxy_httpetkin

sudo a2enmod proxy_http

Benim https tabanlı yük dengeleyici çalışmasını sağlamak için, aşağıdakileri etkinleştirmek zorunda kaldı:

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

23
Ayrıca benim kullanım durumum için bir 'sudo a2enmod proxy_wstunnel' yapmak zorunda kaldı.
JimJty

8
Benim için öyleydi LoadModule ssl_module modules/mod_ssl.so. Ben de kullanmak zorundaydım SSLProxyEngine on.
Chloe

1
Ayrıca etkinleştirmek zorunda kaldımmod_slotmem_shm
SiggyF

2
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
WAMP'ta

1
İhtiyacım sudo a2enmod proxy_connectolan, CONNECT
Raul Nohea Goodness

22

Apache2.4 + php5-fpm kurulumumun çalışmaya başlaması için aşağıdaki Apache modüllerini etkinleştirmem gerekiyordu:

sudo a2enmod proxy
sudo a2enmod proxy_fcgi

Gerek yok proxy_httpve bu tüm .phpdosyaları doğrudan php5-fpm'ye gönderen şeydir :

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

Evet, fcgi için bu doğru, ama bir HTTP proxy vardı. :)
das_j

10

Benim durumumda proxy_ajpmodüle ihtiyacım vardı .

a2enmod proxy proxy_http proxy_ajp 

8

Bu benim için Apache / 2.4.18 (Ubuntu) kurulumumda oluyordu. Benim durumumda, gördüğüm hata:

... 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.

Bununla ilgili yapılandırma:

  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/" Apaçi gönderilen isteği başa çıkamayan anlamına geliyordu " ws://127.0.0.1:8090/~socket.io/"

Ben vardı proxy_httpyüklenen değil, aynı zamanda gerekli proxy_wstunnel. Bu etkinleştirildikten sonra her şey iyiydi.


6

İleride başvurmak üzere açıklığa kavuşturmak için, a2enmod, yukarıdaki çeşitli cevaplarda önerildiği gibi Debian / Ubuntu içindir. Red Hat, Apache modüllerini etkinleştirmek için bunu kullanmaz; bunun yerine httpd.conf dosyasında LoadModule deyimlerini kullanır.

Daha fazla bilgi için: /server/56394/how-do-i-enable-apache-modules-from-the-command-line-in-redhat

Çözüm / doğru cevap OP yorumlarında:

ProxyPass ile mod_ssl ve SSLProxyEngine'e ihtiyacınız olduğunu düşünüyorum - Deadooshka 29 Mayıs 14:35

@Deadooshka Evet, bu işe yarıyor. Bunu bir cevap olarak gönderirseniz, kabul edebilirim - das_j 29 Mayıs 14: 12: 04


4

Farklı bir nedenden dolayı aynı hata mesajına sahip olduğum için burada bir cevap gönderiyorum.

Bu hata iletisi, örneğin, protokol A'daki bir kaynaktan protokol B'yi hedeflemek için proxy isteklerine apache httpd kullanıyorsanız oluşabilir.

Durumumun örneği:

AH01144: URL / sockjs-node / info (şema 'ws') için hiçbir protokol işleyici geçerli değildi.

Yukarıdaki durumda, olan sadece basitçe aşağıdaki idi. Yol / sockjs-node dayalı nodejs için websocket isteklerini proxy için mod proxy etkinleştirmişti.

Sorun, düğümün yalnızca websocket istekleri için / sockjs-node yolunu kullanmamasıdır. Bu yolu, web soketleri hakkında bilgi sağlayan REST giriş noktalarını barındırmak için de kullanır.

Bu şekilde, uygulama http: // localhost: 7001 / sockjs-node / info dosyasını açmaya çalıştığında, apache httpd kalan çağrıyı HTTP protokolünden bir Webscoket uç nokta çağrısına yönlendirmeye çalışacaktır. Düğüm bunu kabul etmedi.

Bu, yukarıdaki istisnaya yol açar.

Doğru modülleri etkinleştirseniz bile, yanlış yönlendirmeyi yapmaya çalışırsanız, bunun hedef sunucuda kullanmaya çalıştığınız protokolün geçerli olmadığını bildiren apache httpd ile sona ereceğine dikkat edin.


Muhtemelen proxy_wstunnel'di. Kabul edilen cevap hakkındaki ilk yoruma bakın.
Lerk


0

Benim için yukarıda belirtilen tüm cevaplar hala çalışmıyor xampp etkinleştirildi. Aşağıdaki modülün etkinleştirilmesi, sanal ana makinenin tekrar çalışmasını sağladı

LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.