Apache Proxy: Tidak ada pengendali protokol yang valid

192

Saya mencoba proksi subdirektori ke server lain. Httpd.conf saya:

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

Masalahnya adalah bahwa Apache selalu mencatat ini:

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/

Jadi setelah mencari di internet, saya telah mengaktifkan modul-modul ini:

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

(Saya tahu bahwa saya tidak membutuhkan semuanya tetapi saya hanya mengaktifkannya untuk memastikan saya tidak melewatkannya)

Tetapi kesalahan ini masih muncul dan klien mendapatkan HTTP 500.

Bagaimana saya bisa memperbaikinya?

das_j
sumber
tampaknya perlu beberapa pengendali HTTPS untuk permintaan proxy. Coba HTTP sebagai gantinya ...
Deadooshka
9
Saya pikir Anda perlu mod_ssldan SSLProxyEnginedenganProxyPass
Deadooshka
@Deadooshka Ya, ini berfungsi. Jika Anda memposting ini sebagai jawaban, saya dapat menerimanya
das_j
kemungkinan duplikat Pengaturan mod_proxy pada server http apache
Raedwald

Jawaban:

422

Ini bisa terjadi jika Anda belum mod_proxy_httpmengaktifkan

sudo a2enmod proxy_http

Agar saya dapat menjalankan load balancer berbasis https, saya harus mengaktifkan yang berikut:

sudo a2enmod ssl
sudo a2enmod proxy
sudo a2enmod proxy_balancer
sudo a2enmod proxy_http
Taman Brad
sumber
23
Saya juga harus melakukan 'sudo a2enmod proxy_wstunnel', untuk kasus penggunaan saya.
JimJty
8
Bagi saya itu LoadModule ssl_module modules/mod_ssl.so. Saya juga harus menggunakan SSLProxyEngine on.
Chloe
1
Saya juga harus mengaktifkanmod_slotmem_shm
SiggyF
2
Bagi saya di WAMP, saya menginstal modul-modul di atas melalui menu dan harus menghapus komentar LoadModule slotmem_shm_module modules/mod_slotmem_shm.sodi httpd.conf
Flion
1
Saya perlu sudo a2enmod proxy_connect, yaitu untuk tunnel https menggunakan CONNECT
Raul Nohea Goodness
22

Agar instalasi Apache2.4 + php5-fpm saya mulai berfungsi, saya perlu mengaktifkan modul Apache berikut:

sudo a2enmod proxy
sudo a2enmod proxy_fcgi

Tidak perlu proxy_http, dan inilah yang mengirim semua .phpfile langsung ke php5-fpm:

<FilesMatch \.php$>
    SetHandler "proxy:unix:/var/run/php5-fpm.sock|fcgi://localhost"
</FilesMatch>
Baik
sumber
Ya, untuk fcgi ini benar, tapi saya punya proxy HTTP. :)
das_j
10

Dalam kasus saya, saya membutuhkan proxy_ajpmodul.

a2enmod proxy proxy_http proxy_ajp 
Kujiy
sumber
8

Ini terjadi pada saya di pengaturan Apache / 2.4.18 (Ubuntu) saya. Dalam kasus saya, kesalahan yang saya lihat adalah:

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

Konfigurasi yang terkait dengan ini adalah:

  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/" Berarti Apache tidak bisa menangani permintaan yang dikirim ke " ws://127.0.0.1:8090/~socket.io/"

Saya telah proxy_httpmemuat, tetapi juga diperlukan proxy_wstunnel. Setelah itu diaktifkan, semuanya baik-baik saja.

Michael Rush
sumber
6

Untuk memperjelas referensi di masa mendatang, a2enmod, seperti yang disarankan dalam beberapa jawaban di atas, adalah untuk Debian / Ubuntu. Red Hat tidak menggunakan ini untuk mengaktifkan modul Apache - melainkan menggunakan pernyataan LoadModule di httpd.conf.

Lebih lanjut di sini: /server/56394/how-do-i-enable-apache-modules-from-the-command-line-in-redhat

Resolusi / jawaban yang benar ada di komentar di OP:

Saya pikir Anda perlu mod_ssl dan SSLProxyEngine dengan ProxyPass - Deadooshka 29 Mei 14 jam 11:35

@Deadooshka Ya, ini berfungsi. Jika Anda memposting ini sebagai jawaban, saya dapat menerimanya - das_j 29 Mei 14 jam 12:04

em_bo
sumber
4

Saya memposting jawaban di sini, karena saya memiliki pesan kesalahan yang sama karena alasan yang berbeda.

Pesan kesalahan ini dapat terjadi, misalnya, jika Anda menggunakan apache httpd untuk meminta proksi dari sumber pada protokol A untuk menargetkan pada protokol B.

Inilah contoh situasi saya:

AH01144: Tidak ada pengendali protokol yang valid untuk URL / sockjs-node / info (skema 'ws').

Dalam kasus di atas, apa yang terjadi hanyalah sebagai berikut. Saya telah mengaktifkan mod proxy ke permintaan websocket proksi ke nodejs berdasarkan path / sockjs-node.

Masalahnya adalah node tidak menggunakan path / sockjs-node untuk permintaan websocket secara eksklusif. Ini juga menggunakan jalur ini untuk meng-hosting titik masuk REST yang memberikan informasi tentang soket web.

Dengan cara ini, ketika aplikasi akan mencoba untuk membuka http: // localhost: 7001 / sockjs-node / info , apache httpd akan mencoba untuk merutekan panggilan sisanya dari protokol HTTP ke panggilan titik akhir Webscoket. Node tidak menerima ini.

Ini mengarah pada pengecualian di atas.

Jadi perhatikan bahwa meskipun Anda mengaktifkan modul yang tepat, jika Anda mencoba melakukan penerusan yang salah, ini akan berakhir dengan apache httpd yang memberi tahu Anda bahwa protokol yang Anda coba gunakan pada server target tidak valid.

99Sono
sumber
Itu mungkin proxy_wstunnel. Lihat komentar pertama pada jawaban yang diterima.
Lerk
0

Bagi saya semua jawaban yang disebutkan di atas diaktifkan pada xampp masih tidak berfungsi. Mengaktifkan modul di bawah ini membuat host virtual bekerja kembali

LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
Ali Azhar
sumber