Apache đảo ngược proxy: không có trình xử lý giao thức


20

Tôi đang cố gắng định cấu hình proxy ngược với apache, nhưng tôi đang gặp No protocol handler was valid for the URLlỗi, điều mà tôi không hiểu.

Đây là cấu hình có liên quan của apache:

ProxyRequests Off
ProxyPreserveHost On

<Proxy *>
       Order deny,allow
       Allow from all
</Proxy>

ProxyPass        /gonvaled/examples/jsonrpc/output/services/ http://localhost:8000/services/
ProxyPassReverse /gonvaled/examples/jsonrpc/output/services/ http://localhost:8000/services/

Các yêu cầu đang đạt đến apache như:

POST /gonvaled/examples/jsonrpc/output/services/EchoService.py HTTP/1.1

Và họ nên được chuyển tiếp đến dịch vụ nội bộ của tôi, đặt tại:

0.0.0.0:8000/services/EchoService.py

Đây là nhật ký:

==> /var/log/apache2/error.log <==
[Wed Jun 20 02:05:20 2012] [debug] proxy_util.c(1506): [client 127.0.0.1] proxy: http: found worker http://localhost:8000/services/ for http://localhost:8000/services/EchoService.py, referer: http://localhost/gonvaled/examples/jsonrpc/output/JSONRPCExample.safari.cache.html
[Wed Jun 20 02:05:20 2012] [debug] mod_proxy.c(998): Running scheme http handler (attempt 0)
[Wed Jun 20 02:05:20 2012] [warn] proxy: No protocol handler was valid for the URL /gonvaled/examples/jsonrpc/output/services/EchoService.py. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.
[Wed Jun 20 02:05:20 2012] [debug] mod_deflate.c(615): [client 127.0.0.1] Zlib: Compressed 614 to 373 : URL /gonvaled/examples/jsonrpc/output/services/EchoService.py, referer: http://localhost/gonvaled/examples/jsonrpc/output/JSONRPCExample.safari.cache.html

==> /var/log/apache2/access.log <==
127.0.0.1 - - [20/Jun/2012:02:05:20 +0200] "POST /gonvaled/examples/jsonrpc/output/services/EchoService.py HTTP/1.1" 500 598 "http://localhost/gonvaled/examples/jsonrpc/output/JSONRPCExample.safari.cache.html" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.162 Safari/535.19"

Câu trả lời:


26

Tôi tìm thấy vấn đề. Các proxy_httpmô-đun cần phải được kích hoạt quá trong Apache (tôi chỉ có proxy_htmlproxy)


23

Đối với tôi, trên apache httpd 2.4, điều này xảy ra vì tôi đã bỏ lỡ dấu gạch chéo:

Đã không làm việc:

    <Proxy balancer://mycluster>
        BalancerMember http://192.168.111.7
        BalancerMember http://192.168.111.80
    </Proxy>
    ProxyPass / balancer://mycluster
    ProxyPassReverse / balancer://mycluster

Đã làm việc!

    <Proxy balancer://mycluster>
        BalancerMember http://192.168.111.7
        BalancerMember http://192.168.111.80
    </Proxy>
    ProxyPass / balancer://mycluster/
    ProxyPassReverse / balancer://mycluster/

(được thêm /vào cuối)


Đối với tôi, apache 2.2.15, <kbd> / </ kbd> ở cuối hoạt động. CÁM ƠN!

đã giúp tôi trên Apache / 2.4.10 (Debian). Điều này cần phải được ghi nhận! Thông báo lỗi cực kỳ khó hiểu
DeveloperChris

2

Đối với những người tìm kiếm câu trả lời, một khả năng khác là tên dịch vụ URL cho phụ trợ cũng bị thiếu. Với LogLevel Debug, và mod_proxy và mod_proxy_fcgi, tôi đã thấy như sau:

[debug] proxy: fgci: found worker fgci://127.0.0.1:9000/var/www/html/.../index.php [debug] mod_proxy.c(1026): Running scheme fgci handler (attempt 0) [debug] mod_proxy_fcgi.c(800): [client ...] AH01076: url: fgci://127.0.0.1:9000/var/www/html/.../index.php proxyname: (null) proxyport: 0 [debug] mod_proxy_fcgi.c(805): [client ...] AH01077: declining URL fgci://127.0.0.1:9000/var/www/html/.../index.php [warn] proxy: No protocol handler was valid for the URL /.../index.php. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.

Rất may, mã cho mod_proxy_fastcgi (Tôi đang sử dụng backport cho Apache 2.2 trên RHEL6) có sẵn tại https://github.com/ceph/mod-proxy-fcgi/blob/master/mod_proxy_fcgi.c#L805 , đây là đoạn mã:

if (strncasecmp(url, "fcgi:", 5) != 0) {
    ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(01077) "declining URL %s", url);
    return DECLINED;
}

Nếu bạn nhìn kỹ vào nhật ký - tôi chỉ nhận thấy nó khi nhìn vào mã phát ra thông báo - bạn sẽ thấy rằng những gì nên được viết fcgi://...sai làfgci://...

Vì vậy, khi bạn nhìn thấy declining URLnó có nghĩa là:

  • Bạn không tải trình xử lý chấp nhận dịch vụ (ví dụ: fcgi :), hoặc
  • bạn đã viết sai tên dịch vụ.

1
Tôi đánh giá cao vì phần "Khi bạn thấy lỗi này có nghĩa là ..." phần của câu trả lời này. Tôi cảm thấy rằng điều này sẽ dẫn hầu hết những người tìm kiếm đi đúng hướng.
ba giờ
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.