nginx upstream 的主要功能是请求服务器的请求,返回给客户端。
一下是效果:请求 192.168.2.102 的/test 得到如下效果:
192.168.2.102 的配置文件 添加一个location
mytest 就是《深入理解nginx内核》第5章的例子,但是原来的例子不能跑,因为原来的例子是访问google的,对于天朝程序员来说,google不能被访问了,所以不能跑,并且参数方面也有些问题。
所以需要修改一下: 修改上游IP地址
//这里的上游服务器就是www.google.com
static struct sockaddr_in backendSockAddr;
struct hostent *pHost = gethostbyname((char*) "www.baidu.com");
修改请求buffer: 不需要参数 注意格式不能有多余空格 否则不能解析。
static ngx_str_t backendQueryLine =
ngx_string("GET / HTTP/1.1\r\nHost: www.baidu.com\r\nConnection: close\r\n\r\n");
ngx_int_t queryLineLen = backendQueryLine.len;
指向末尾和拷贝到内存中
b->last = b->pos + queryLineLen;
ngx_memcpy(b->pos,(char*)backendQueryLine.data, queryLineLen );
为什么要改成这样,是根据http协议来的 GET /表示请求主页。host connection 不能省略
connection:close 表示客户端得到请求就关闭连接节省资源。
问题定位:
当程序不能运行时候 就只有抓包看一下。 网络程序不要想打印解决问题。 抓包总结如下:
第一次 在本机直接访问www。baidu.com 抓包报文如下:
第二次在192.168.2.102 里面进行抓包:
开始请求访问字出现了错误,格式不对 导致不能正确解析。修正后OKle