作者hn12404988 (Willy)
看板Linux
標題[問題] Nginx的proxy_pass問題
時間Sun Oct 16 11:09:36 2016
想要請問的問題是「Nginx的proxy_pass是不是有特定的訊息傳輸格式」
過程是這樣:(Centos 7)
以前用Nginx來proxy,中間都有經過一層library再到我的backend
例如用spawn-fcgi,再使用fcgio.h來取得傳輸資訊,過程都被其他軟體處理好
但最近我想要試試看,我自己寫的一個小小server來直接接Nginx的proxy_pass請求
只是很單純建立一個unix domain socket,Nginx也有權限使用
目前小server都有辦法拿到Nginx傳來的資訊,完整
但是使用傳統的socket send(),Ngnix會「一直等」~~
等到Nginx設定的timeout時間到了,才回傳訊息(send的訊息)
現在實驗出兩個狀況
1. server send完訊息,不關閉連線,讓連線保持
Nginx就會等到timeout,然後甚麼訊息都沒送出去,client端甚麼都沒有
2. server send完訊息,就關閉連線
Nginx等到timeout,才把訊息送給client,有訊息
所以根據以上狀況,我再猜:
是不是這訊息之間的來回,有一定的handshake或其他「確定傳完的」格式
請問這方面的資訊,要用甚麼關鍵字去找相關regulation呢?
還是我現在的方向錯了呢?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.133.16.181
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Linux/M.1476587378.A.E97.html
1F:→ hn12404988: 補充:是browser的xmlhttprequest的POST 10/16 11:20
2F:推 kenduest: 自己實作 http server 嗎?有處理細節流程嗎? 10/16 13:08
3F:推 kenduest: 比方 http 1.0 與 1.1 連線溝通的差異 10/16 13:13
4F:→ hn12404988: 我知道1.0和1.1,但我不知道原來我也要作這個 10/16 13:23
5F:→ hn12404988: 我以為Nginx會幫我作這方面的東西,那看來差有點遠 10/16 13:24
6F:→ hn12404988: 其實只是很簡單的accept connection,然後send回去 10/16 13:25
8F:→ hn12404988: code在neural_socket資料夾裡的socket_server.cpp 10/16 13:28
9F:→ hn12404988: 從80行開始看,就是簡單開新thread, 在send回去 10/16 13:28
10F:推 kenduest: 沒有實做1.1的話溝通完就需要切斷連線 10/16 13:37
11F:推 kenduest: proxy_pass 當時候 nginx 是 client, 你的程式是 server 10/16 13:48
12F:→ kenduest: ,nginx 請求就是標準方式 10/16 13:48
13F:→ soem: nginx的proxy_pass是標準的http request,你要的應該不是這個 10/16 13:58
14F:→ hn12404988: 了解了解,謝謝提醒,那我再去查其他pass方式 10/16 14:45
15F:推 kenduest: 樓主只是要純 tcp proxy 還是 10/16 14:57
16F:→ hn12404988: 對,想要Nginx單純tcp/unix socket傳送資訊就好 10/16 15:54
17F:推 kenduest: nginx 可以支援,官方文件有說明 10/16 16:36
18F:→ kenduest: 不過一般是 tcp socket 非 unix domain socket 10/16 16:36
19F:推 kenduest: 您自己測試 unix:/path/file 這種語法看看,我自己沒有 10/16 16:39
20F:→ kenduest: 這樣用過就是 10/16 16:39
22F:→ hn12404988: fastcgi_pass 可以直接 unix:/path/file 10/16 17:06
23F:→ hn12404988: 謝謝你的建議,我覺得我要去看一些http傳輸協定的東西 10/16 17:06
24F:→ hn12404988: 或是nginx有其他的_pass,我還沒研究 10/16 17:07
25F:→ soem: 其實偷懶的作法就是用python/ruby當http server那層,再接上 10/17 00:42
26F:→ soem: 你的code就完成了這樣XD 10/17 00:43
27F:→ soem: 甚至連socket都不太需要寫,直接call就好 10/17 00:44