Apache Proxy: Không có trình xử lý giao thức nào hợp lệ


190

Tôi đang cố gắng ủy quyền một thư mục con đến một máy chủ khác. Httpd.conf của tôi:

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

Vấn đề là Apache luôn ghi nhật ký này:

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/

Vì vậy, sau khi tìm kiếm trên internet, tôi đã kích hoạt các mô-đun này:

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

(Tôi biết rằng tôi không cần tất cả chúng nhưng tôi chỉ kích hoạt chúng để chắc chắn rằng tôi không thiếu một cái nào)

Nhưng lỗi này vẫn xuất hiện và khách hàng nhận được HTTP 500.

Làm thế nào tôi có thể sửa lỗi này?


có vẻ như nó cần một số trình xử lý HTTPS cho yêu cầu proxy. Thay vào đó hãy thử HTTP ...
Deadooshka

9
Tôi nghĩ rằng bạn cần mod_sslSSLProxyEnginevớiProxyPass
Deadooshka

@Deadooshka Vâng, điều này đang hoạt động. Nếu bạn đăng bài này dưới dạng câu trả lời, tôi có thể chấp nhận nó
das_j

Câu trả lời:


418

Điều này có thể xảy ra nếu bạn không mod_proxy_httpkích hoạt

sudo a2enmod proxy_http

Để tôi làm cho bộ cân bằng tải dựa trên https của tôi hoạt động, tôi đã phải kích hoạt như sau:

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

23
Tôi cũng đã phải thực hiện một 'sudo a2enmod proxy_wstunnel', cho trường hợp sử dụng của tôi.
JimJty 10/07/2015

8
Đối với tôi đó là LoadModule ssl_module modules/mod_ssl.so. Tôi cũng đã phải sử dụng SSLProxyEngine on.
Chloe

1
Tôi cũng phải kích hoạtmod_slotmem_shm
SiggyF

2
Đối với tôi trên WAMP, tôi đã cài đặt các mô-đun ở trên thông qua menu và phải bỏ ghi chú LoadModule slotmem_shm_module modules/mod_slotmem_shm.sotrong httpd.conf
Flion

1
Tôi cần sudo a2enmod proxy_connect, đó là vào đường hầm https bằng cách sử dụng CONNECT
Raul Noemat Goodness 29/11/18

22

Để cài đặt Apache2.4 + php5-fpm của tôi bắt đầu hoạt động, tôi cần kích hoạt các mô-đun Apache sau:

sudo a2enmod proxy
sudo a2enmod proxy_fcgi

Không cần proxy_httpvà đây là thứ sẽ gửi tất cả .phpcác tệp thẳng tới php5-fpm:

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

Vâng, đối với fcgi thì điều này là đúng, nhưng tôi đã có proxy HTTP. :)
das_j 3/11/2015

10

Trong trường hợp của tôi, tôi cần proxy_ajpmô-đun.

a2enmod proxy proxy_http proxy_ajp 

8

Điều này đã xảy ra với tôi trong thiết lập Apache / 2.4.18 (Ubuntu) của tôi. Trong trường hợp của tôi, lỗi tôi gặp là:

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

Cấu hình liên quan đến điều này là:

  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/" có nghĩa là Apache không thể xử lý yêu cầu được gửi đến " ws://127.0.0.1:8090/~socket.io/"

Tôi đã proxy_httptải, nhưng cũng cần proxy_wstunnel. Một khi điều đó đã được kích hoạt tất cả là tốt.


6

Để làm rõ để tham khảo trong tương lai, a2enmod, như được đề xuất trong một số câu trả lời ở trên, là dành cho Debian / Ubuntu. Red Hat không sử dụng điều này để kích hoạt các mô-đun Apache - thay vào đó, nó sử dụng các câu lệnh LoadModule trong httpd.conf.

Thêm ở đây: /server/56394/how-do-i-enable-apache-modules-from-the-command-line-in-redhat

Độ phân giải / câu trả lời đúng nằm trong phần bình luận về OP:

Tôi nghĩ bạn cần mod_ssl và SSLProxyEngine với ProxyPass - Deadooshka ngày 29 tháng 5 năm 14 lúc 11:35

@Deadooshka Vâng, điều này đang hoạt động. Nếu bạn đăng bài này dưới dạng câu trả lời, tôi có thể chấp nhận nó - das_j ngày 29 tháng 5 năm 14 lúc 12:04


4

Tôi đang đăng một câu trả lời ở đây, vì tôi có cùng một thông báo lỗi vì một lý do khác.

Thông báo lỗi này có thể xảy ra, ví dụ, nếu bạn đang sử dụng apache httpd cho các yêu cầu proxy từ một nguồn trên giao thức A để nhắm mục tiêu trên giao thức B.

Đây là ví dụ về tình huống của tôi:

AH01144: Không có trình xử lý giao thức nào hợp lệ cho URL / sockjs-nút / thông tin (lược đồ 'ws').

Trong trường hợp trên, những gì đã xảy ra chỉ đơn giản là như sau. Tôi đã kích hoạt mod proxy cho các yêu cầu websocket proxy tới nodejs dựa trên đường dẫn / sockjs-node.

Vấn đề là nút không sử dụng nút path / sockjs cho các yêu cầu websocket độc quyền. Nó cũng sử dụng đường dẫn này để lưu trữ các điểm truy cập REST cung cấp thông tin về websockets.

Theo cách này, khi ứng dụng sẽ cố mở http: // localhost: 7001 / sockjs-node / information , apache httpd sẽ cố gắng định tuyến cuộc gọi còn lại từ giao thức HTTP đến cuộc gọi điểm cuối Webscoket. Nút không chấp nhận điều này.

Điều này dẫn đến ngoại lệ ở trên.

Vì vậy, hãy lưu ý rằng ngay cả khi bạn kích hoạt đúng các mô-đun, nếu bạn cố thực hiện chuyển tiếp sai, điều này sẽ kết thúc với httpache apache thông báo cho bạn rằng giao thức bạn đã cố sử dụng trên máy chủ đích không hợp lệ.


Nó có lẽ là proxy_wstunnel. Xem bình luận đầu tiên về câu trả lời được chấp nhận.
Thư ký


0

Đối với tôi, tất cả các câu trả lời nêu trên đã được bật trên xampp vẫn không hoạt động. Kích hoạt mô-đun bên dưới làm cho máy chủ ảo hoạt động trở lại

LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.