[問題] Nginx的proxy_pass問題

看板Linux作者 (Willy)時間7年前 (2016/10/16 11:09), 編輯推噓7(7020)
留言27則, 3人參與, 最新討論串1/1
想要請問的問題是「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://www.ptt.cc/bbs/Linux/M.1476587378.A.E97.html

10/16 11:20, , 1F
補充:是browser的xmlhttprequest的POST
10/16 11:20, 1F

10/16 13:08, , 2F
自己實作 http server 嗎?有處理細節流程嗎?
10/16 13:08, 2F

10/16 13:13, , 3F
比方 http 1.0 與 1.1 連線溝通的差異
10/16 13:13, 3F

10/16 13:23, , 4F
我知道1.0和1.1,但我不知道原來我也要作這個
10/16 13:23, 4F

10/16 13:24, , 5F
我以為Nginx會幫我作這方面的東西,那看來差有點遠
10/16 13:24, 5F

10/16 13:25, , 6F
其實只是很簡單的accept connection,然後send回去
10/16 13:25, 6F

10/16 13:28, , 8F
code在neural_socket資料夾裡的socket_server.cpp
10/16 13:28, 8F

10/16 13:28, , 9F
從80行開始看,就是簡單開新thread, 在send回去
10/16 13:28, 9F

10/16 13:37, , 10F
沒有實做1.1的話溝通完就需要切斷連線
10/16 13:37, 10F

10/16 13:48, , 11F
proxy_pass 當時候 nginx 是 client, 你的程式是 server
10/16 13:48, 11F

10/16 13:48, , 12F
,nginx 請求就是標準方式
10/16 13:48, 12F

10/16 13:58, , 13F
nginx的proxy_pass是標準的http request,你要的應該不是這個
10/16 13:58, 13F

10/16 14:45, , 14F
了解了解,謝謝提醒,那我再去查其他pass方式
10/16 14:45, 14F

10/16 14:57, , 15F
樓主只是要純 tcp proxy 還是
10/16 14:57, 15F

10/16 15:54, , 16F
對,想要Nginx單純tcp/unix socket傳送資訊就好
10/16 15:54, 16F

10/16 16:36, , 17F
nginx 可以支援,官方文件有說明
10/16 16:36, 17F

10/16 16:36, , 18F
不過一般是 tcp socket 非 unix domain socket
10/16 16:36, 18F

10/16 16:39, , 19F
您自己測試 unix:/path/file 這種語法看看,我自己沒有
10/16 16:39, 19F

10/16 16:39, , 20F
這樣用過就是
10/16 16:39, 20F

10/16 17:05, , 21F
proxy_pass要用http://unix:/path/file
10/16 17:05, 21F

10/16 17:06, , 22F
fastcgi_pass 可以直接 unix:/path/file
10/16 17:06, 22F

10/16 17:06, , 23F
謝謝你的建議,我覺得我要去看一些http傳輸協定的東西
10/16 17:06, 23F

10/16 17:07, , 24F
或是nginx有其他的_pass,我還沒研究
10/16 17:07, 24F

10/17 00:42, , 25F
其實偷懶的作法就是用python/ruby當http server那層,再接上
10/17 00:42, 25F

10/17 00:43, , 26F
你的code就完成了這樣XD
10/17 00:43, 26F

10/17 00:44, , 27F
甚至連socket都不太需要寫,直接call就好
10/17 00:44, 27F
文章代碼(AID): #1O0kzowN (Linux)