Nginx的proxy_pass問題 - Linux

Table of Contents

想要請問的問題是「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呢?

還是我現在的方向錯了呢?

謝謝

--

All Comments

Irma avatarIrma2016-10-17
補充:是browser的xmlhttprequest的POST
Bethany avatarBethany2016-10-19
自己實作 http server 嗎?有處理細節流程嗎?
Eartha avatarEartha2016-10-20
比方 http 1.0 與 1.1 連線溝通的差異
Leila avatarLeila2016-10-21
我知道1.0和1.1,但我不知道原來我也要作這個
Elma avatarElma2016-10-23
我以為Nginx會幫我作這方面的東西,那看來差有點遠
Charlie avatarCharlie2016-10-25
其實只是很簡單的accept connection,然後send回去
Edwina avatarEdwina2016-10-27
code在neural_socket資料夾裡的socket_server.cpp
從80行開始看,就是簡單開新thread, 在send回去
Franklin avatarFranklin2016-10-28
沒有實做1.1的話溝通完就需要切斷連線
Mary avatarMary2016-11-02
proxy_pass 當時候 nginx 是 client, 你的程式是 server
,nginx 請求就是標準方式
Hamiltion avatarHamiltion2016-11-03
nginx的proxy_pass是標準的http request,你要的應該不是這個
Emily avatarEmily2016-11-03
了解了解,謝謝提醒,那我再去查其他pass方式
Carol avatarCarol2016-11-04
樓主只是要純 tcp proxy 還是
Oscar avatarOscar2016-11-04
對,想要Nginx單純tcp/unix socket傳送資訊就好
Skylar DavisLinda avatarSkylar DavisLinda2016-11-09
nginx 可以支援,官方文件有說明
不過一般是 tcp socket 非 unix domain socket
Yedda avatarYedda2016-11-11
您自己測試 unix:/path/file 這種語法看看,我自己沒有
這樣用過就是
Hamiltion avatarHamiltion2016-11-11
proxy_pass要用http://unix:/path/file
Kumar avatarKumar2016-11-14
fastcgi_pass 可以直接 unix:/path/file
謝謝你的建議,我覺得我要去看一些http傳輸協定的東西
Oliver avatarOliver2016-11-16
或是nginx有其他的_pass,我還沒研究
Harry avatarHarry2016-11-17
其實偷懶的作法就是用python/ruby當http server那層,再接上
Thomas avatarThomas2016-11-18
你的code就完成了這樣XD
Sandy avatarSandy2016-11-23
甚至連socket都不太需要寫,直接call就好