为了使用Nginx和Go,我通常看到的解决方案是使用Nginx的fastcgi_pass和Go的“net / http / fcgi”。
但是我想知道Go的http工具在这里是否多余。由于Nginx会将响应输出为http响应,是否可以简单地将字符串从Go脚本返回到Nginx并让Nginx创建http响应?
对于基础工作流程和性能含义的任何进一步解释将不胜感激。
答案 0 :(得分:1)
我从未使用fastcgi进行实际部署,虽然我曾帮助过一个功能性示例。就性能而言,我会针对反向代理设置对fcgi部署进行基准测试并进行比较。
答案 1 :(得分:1)
您是否阅读过the FactCGI spec?它明确定义了FastCGI服务器和客户端pefrorm their exchange:
的方式3.3记录
应用程序使用简单协议从Web服务器执行请求。协议的细节取决于应用程序的角色,但粗略地说,Web服务器首先将参数和其他数据发送到应用程序,然后应用程序将结果数据发送到Web服务器,最后应用程序向Web服务器发送请求的指示已经完成了。
流经传输连接的所有数据都在FastCGI记录中传输。 FastCGI记录完成两件事。首先,记录多路复用几个独立的FastCGI请求之间的传输连接。此多路复用支持能够使用事件驱动或多线程编程技术处理并发请求的应用程序。其次,记录在单个请求中的每个方向上提供若干独立数据流。这样,例如,stdout和stderr数据都可以通过单个传输连接从应用程序传递到Web服务器,而不需要单独的连接。
typedef struct { unsigned char version; unsigned char type; unsigned char requestIdB1; unsigned char requestIdB0; unsigned char contentLengthB1; unsigned char contentLengthB0; unsigned char paddingLength; unsigned char reserved; unsigned char contentData[contentLength]; unsigned char paddingData[paddingLength]; } FCGI_Record;
FastCGI记录由固定长度的前缀后跟可变数量的内容和填充字节组成。
...
正如您所看到的,它是一种二进制协议,与HTTP不同。