《深入理解Nginx》阅读与实践 使用upstream和subrequest访问第三方服务 no port in upstream

参考《深入理解Nginx》阅读与实践(三):使用upstream和subrequest访问第三方服务

文中例子跟书上几乎完全一样,至少需要添加

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);  即可正常请求并返回



你可能感兴趣的:(c开发)