文中例子跟书上几乎完全一样,至少需要添加
static ngx_str_t ngx_http_proxy_hide_headers[] =
{
ngx_string("Date"),
ngx_string("Server"),
ngx_string("X-Pad"),
ngx_string("X-Accel-Expires"),
ngx_string("X-Accel-Redirect"),
ngx_string("X-Accel-Limit-Rate"),
ngx_string("X-Accel-Buffering"),
ngx_string("X-Accel-Charset"),
ngx_null_string
};
在把地址改为
static ngx_str_t backendQueryLine = ngx_string("GET / HTTP/1.1\r\nHost: www.csdn.net\r\nConnection:close\r\n\r\n");
后,但例子无法运行,查看日志文件报错2016/07/02 17:16:16 [error] 22473#0: *1 no port in upstream "", client: 192.168.1.191, server: localhost, request: "GET /myconfig HTTP/1.1", host: "192.168.1.77"
使用gdb调试之后发现代码在ngx_http_upstream.c的659行直接返回,代码块为
if (u->resolved->sockaddr) {
651
652 if (u->resolved->port == 0
653 && u->resolved->sockaddr->sa_family != AF_UNIX)
654 {
655 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
656 "no port in upstream \"%V\"", host);
657 ngx_http_upstream_finalize_request(r, u,
658 NGX_HTTP_INTERNAL_SERVER_ERROR);
659 return;
660 }
所以修改代码,在函数
static ngx_int_t ngx_http_myconfig_handler(ngx_http_request_t *r)
添加 u->resolved->port = htons((in_port_t)80); 即可正常请求并返回