Apache reverse proxy: ไม่มีตัวจัดการโปรโตคอล


20

ฉันกำลังพยายามกำหนดค่าพร็อกซีย้อนกลับด้วย apache แต่ฉันได้รับNo protocol handler was valid for the URLข้อผิดพลาดซึ่งฉันไม่เข้าใจ

นี่คือการกำหนดค่าที่เกี่ยวข้องของ 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/

การร้องขอถึง apache เป็น:

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

และควรส่งต่อไปยังบริการภายในของฉันที่:

0.0.0.0:8000/services/EchoService.py

นี่คือบันทึก:

==> /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"

คำตอบ:


26

ฉันพบปัญหา proxy_httpโมดูลจะต้องมีการเปิดใช้งานมากเกินไปใน Apache (ฉันมีเพียงproxy_htmlและproxy)


23

สำหรับฉันใน apache httpd 2.4สิ่งนี้เกิดขึ้นเพราะฉันไม่มีเครื่องหมายทับ:

ไม่ทำงาน:

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

ทำงาน!

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

(เพิ่ม/ในตอนท้าย)


สำหรับฉัน apache 2.2.15, <kbd> / </kbd> ในตอนท้ายใช้ได้ ขอบคุณ!

ช่วยฉันใน Apache / 2.4.10 (Debian) ต้องมีการบันทึกไว้! ข้อความแสดงข้อผิดพลาดเป็นป้านมาก
DeveloperChris

2

สำหรับผู้ที่มองหาคำตอบความเป็นไปได้อีกอย่างคือชื่อบริการ URL เพื่อแบ็กเอนด์ด้วยเช่นกัน ด้วย LogLevel Debug และ mod_proxy และ mod_proxy_fcgi ฉันเห็นสิ่งต่อไปนี้:

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

โชคดีที่โค้ดสำหรับ mod_proxy_fastcgi (ฉันใช้ backport สำหรับ Apache 2.2 บน RHEL6) มีให้ที่https://github.com/ceph/mod-proxy-fcgi/blob/master/mod_proxy_fcgi.c#L805ซึ่งเป็นสิ่งนี้ ชิ้นส่วนของรหัส:

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

หากคุณดูอย่างใกล้ชิดบันทึก - ฉันสังเกตเห็นมันเฉพาะเมื่อดูรหัสที่ออกข้อความ - คุณจะเห็นว่าสิ่งที่ควรจะfcgi://...เป็น misspeltfgci://...

ดังนั้นเมื่อคุณเห็นความdeclining URLหมาย:

  • คุณไม่มีตัวจัดการโหลดที่ยอมรับบริการ (เช่น fcgi :) หรือ
  • คุณสะกดชื่อบริการผิด

1
ฉันลงคะแนนเนื่องจากส่วน "เมื่อคุณเห็นข้อผิดพลาดนี้หมายถึง ... " ของคำตอบนี้ ฉันรู้สึกว่าสิ่งนี้ควรนำผู้ค้นหาส่วนใหญ่ไปในทิศทางที่ถูกต้อง
สาม
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.