ข้อผิดพลาดเป็นระยะเมื่อใช้ mod_proxy ทำ reverse proxy กับบริการ SOAP


17

ฉันได้รับข้อผิดพลาดนี้ทุกสองสามนาทีเมื่อใช้ mod_proxy เป็น reverse proxy กับบริการเว็บ SOAP อาจมีการร้องขอ 3 หรือ 4 ครั้งต่อวินาทีดังนั้นเราจึงพูดถึง 1 หรือ 2 จากทุกๆพันที่มีข้อผิดพลาดนี้

[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

สิ่งนี้ทำให้การร้องขอล้มเหลว ถ้าฉันมีไคลเอนต์เชื่อมต่อโดยตรงกับเซิร์ฟเวอร์สบู่โดยไม่ต้องใช้พร็อกซีความสำเร็จคือ 100% ดังนั้นปัญหาปรากฏอยู่ในพร็อกซี

การกำหนดค่ามีลักษณะเช่นนี้ วัตถุประสงค์คือเพื่อสลับไปยังเซิร์ฟเวอร์สำรองหากเซิร์ฟเวอร์หลักไม่พร้อมใช้งาน:

<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 

มีใครพบปัญหานี้และพบวิธีแก้ไขหรือไม่ มีบางคนกล่าวถึงในรายงานข้อผิดพลาด แต่ไม่มีวิธีแก้ไข สิ่งเดียวที่อาจผิดปกติคือคำขอของลูกค้าอาจเป็น 100MB หรือใหญ่กว่าดังนั้นคำขออาจใช้เวลานานกว่าที่คุณคาดหวังสำหรับการโทร SOAP


คำตอบของ David Purdue (SetEnv proxy-initial-not-pooled 1) เป็นคำตอบที่ถูกต้องในปัจจุบัน (2016)
MattBianco

คำตอบ:


27

ในกรณีที่มีคนอื่นเข้ามาเกี่ยวข้อง นี่เป็นข้อผิดพลาดใน mod_proxy ที่สามารถหลีกเลี่ยงได้โดยใส่บรรทัดเหล่านี้ใน httpd.conf ของคุณ:

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

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

สำหรับข้อมูลเกี่ยวกับสิ่งที่ตัวแปรเหล่านี้ทำดูเอกสารmod_proxy พวกเขามีส่วนเฉพาะการปรับโปรโตคอลที่อยู่ตัวแปรเหล่านี้


5

จดบันทึกเอกสาร Apache ที่นี่: http://httpd.apache.org/docs/2.2/mod/mod_proxy_http.html

ดูเหมือนว่ามีสภาพการแข่งขันใน mod_proxy_http แต่สามารถหลีกเลี่ยงได้โดยการรวม:

SetEnv proxy-initial-not-pooled 1

ซึ่งป้องกัน Apache โดยใช้การเชื่อมต่อพูลหากนี่เป็นการร้องขอเริ่มต้น

เอกสารไม่ทราบว่าการตั้งค่านี้จะให้การลดระดับประสิทธิภาพ


1
proxy-initial-not-pooledจะมีผลก็ต่อเมื่อคุณมีโปรแกรมแก้ไขเฉพาะซึ่งฉันเชื่อว่าไม่ใช่ส่วนหนึ่งของ httpd 2.2 ฉันไม่รู้เกี่ยวกับ httpd 2.4 ดูbz.apache.org/bugzilla/show_bug.cgi?id=37770#c88
kubanczyk

0

คุณสามารถระงับข้อความแสดงข้อผิดพลาดที่เกี่ยวข้องนี้ ( AH01102: error reading status line from remote server) โดยใช้โมดูล apache mod_reqtimeout และคำสั่ง conf นี้:

RequestReadTimeout header=30

คุณอาจต้องเปิดใช้งานโมดูล reqtimeout ดังนี้:

$ sudo a2enmod reqtimeout
$ sudo apache2ctl restart
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.