我想測試非常簡單的場景,所有的Nginx代理超時參數。我的第一個方法是創建非常簡單的HTTP服務器,並把一些超時:
- 之間傾聽和接受測試proxy_connect_timeout
- 之間接受和讀取測試讀取之間proxy_send_timeout
- 併發送至測試proxy_read_timeout
測試:
1)服務器的代碼(蟒蛇):
import socket
import os
import time
import threading
def http_resp(conn):
conn.send("HTTP/1.1 200 OK\r\n")
conn.send("Content-Length: 0\r\n")
conn.send("Content-Type: text/xml\r\n\r\n\r\n")
def do(conn, addr):
print 'Connected by', addr
print 'Sleeping before reading data...'
time.sleep(0) # Set to test proxy_send_timeout
data = conn.recv(1024)
print 'Sleeping before sending data...'
time.sleep(0) # Set to test proxy_read_timeout
http_resp(conn)
print 'End of data stream, closing connection'
conn.close()
def main():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('', int(os.environ['PORT'])))
s.listen(1)
print 'Sleeping before accept...'
time.sleep(130) # Set to test proxy_connect_timeout
while 1:
conn, addr = s.accept()
t = threading.Thread(target=do, args=(conn, addr))
t.start()
if __name__ == "__main__":
main()
2)Nginx的配置:
我已經通過設置明確proxy_connect_timeout並添加proxy_pass指着我的本地擴展Nginx的默認配置HTTP服務器:
location/{
proxy_pass http://localhost:8888;
proxy_connect_timeout 200;
}
3)Obse rvation:
proxy_connect_timeout - 即使它設定爲200s,睡覺只能聽和接受的Nginx後返回504〜這可能是因爲默認proxy_read_timeout值的60間130S。我不明白如何proxy_read_timeout可能會影響在這麼早的階段(接受之前)的連接。我期望在這裏200。請解釋!
proxy_send_timeout - 我不知道如果我的方法進行測試proxy_send_timeout是正確的 - 我想我還是不正確理解此參數。畢竟,accept和read之間的延遲不會強制proxy_send_timeout。
proxy_read_timeout - 它似乎很簡單。設置讀取和寫入之間的延遲完成作業。
所以我想我的假設是錯誤的,可能我不明白proxy_connect和proxy_send超時正確。如果可能的話,是否可以使用上述測試向我解釋它們(或者如果需要修改)。
是的,你是正確的約75s proxy_connect_timeout限制。無論如何,我也嘗試將proxy_connect_timeout設置爲30秒,並聽取/接受延遲至50秒 - 我得到200,這有點意外!當我將延遲增加到65秒並將proxy_read_timeout設置爲75秒後,我在〜60s後得到了504。 – mkorszun