Kesalahan terputus-putus saat menggunakan mod_proxy untuk melakukan reverse proxy ke layanan SOAP

17

Saya mendapatkan kesalahan ini setiap beberapa menit saat menggunakan mod_proxy sebagai proksi terbalik ke layanan web SOAP. Mungkin ada 3 atau 4 permintaan per detik, jadi kita berbicara sekitar 1 atau 2 dari setiap seribu yang memiliki kesalahan ini.

[Tue Nov 23 11:44:14 2010] [error] [client 172.16.1.31] (20014)Internal error: proxy: error reading status line from remote server soap1.server:8888
[Tue Nov 23 11:44:14 2010] [error] [client 172.16.1.31] proxy: Error reading from remote server returned by /someapp/path/to/web/service

Ini menyebabkan permintaan gagal. Jika saya memiliki klien terhubung langsung ke server sabun tanpa menggunakan proxy, sukses adalah 100% sehingga masalah tampaknya berada di proxy

Konfigurasi terlihat seperti ini. Tujuannya adalah untuk beralih ke server cadangan jika yang utama tidak tersedia:

<Proxy balancer://apicluster>  
BalancerMember http://soap1.server:8888 lbset=0 
BalancerMember http://soap2.server:8888 lbset=1 
</Proxy>  

ProxyPass /someapp balancer://apicluster/someapp 
ProxyPassReverse / balancer://apicluster/someapp 

Adakah yang mengalami ini dan menemukan perbaikan? Ada beberapa yang menyebutkan dalam laporan bug tetapi tidak ada solusi. Satu-satunya hal yang mungkin tidak biasa adalah permintaan klien bisa 100MB atau lebih besar, sehingga permintaan bisa memakan waktu sedikit lebih lama daripada yang Anda harapkan untuk panggilan SOAP.

JOTN
sumber
Jawaban oleh David Purdue (SetEnv proxy-initial-not-pooled 1) adalah jawaban yang valid saat ini (2016).
MattBianco

Jawaban:

27

Dalam kasus orang lain mengalami hal ini. Ini adalah bug di mod_proxy yang bisa dihindari dengan meletakkan baris-baris ini di httpd.conf Anda:

SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1

https://issues.apache.org/bugzilla/show_bug.cgi?id=37770

Untuk info tentang variabel-variabel ini, lihat mod_proxydokumentasi . Mereka memiliki bagian tertentu, Penyesuaian Protokol, yang membahas variabel-variabel ini.

JOTN
sumber
5

Perhatikan dokumentasi Apache di sini: http://httpd.apache.org/docs/2.2/mod/mod_proxy_http.html

Tampaknya ada kondisi balapan di mod_proxy_http, tetapi dapat dihindari dengan memasukkan:

SetEnv proxy-initial-not-pooled 1

Yang mencegah Apache menggunakan koneksi gabungan jika ini merupakan permintaan awal.

Dokumen tidak mencatat bahwa pengaturan ini akan menurunkan kinerja.

David Purdue
sumber
1
proxy-initial-not-pooledhanya efektif jika Anda memiliki tambalan tertentu, yang saya yakin bukan bagian dari httpd 2.2. Saya tidak tahu tentang httpd 2.4. Lihat bz.apache.org/bugzilla/show_bug.cgi?id=37770#c88
kubanczyk
0

Anda juga dapat menekan pesan kesalahan terkait ini ( AH01102: error reading status line from remote server) dengan menggunakan modul apache mod_reqtimeout dan direktif conf ini:

RequestReadTimeout header=30

Anda mungkin harus mengaktifkan modul reqtimeout, sebagai berikut:

$ sudo a2enmod reqtimeout
$ sudo apache2ctl restart
Martlark
sumber