Nginx 紧急发布 1.9.9 修复 bug
有时候,仔细追踪一个项目的各次提交也是蛮有趣的,特别是各种 Bugfix,会发现,原来牛人也会有各种低级错误。
例如,Nginx 刚在 12 月 8 号发布了 nginx-1.9.8,马上就又发布 nginx-1.9.9,这种密集的发布,一看就是 Bug 修复了。我们看看到底修复了什么 Bug。
首先,看看changelog:
Changes with nginx 1.9.9 09 Dec 2015
*) Bugfix: proxying to unix domain sockets did not work when using variables; the bug had appeared in 1.9.8.
再来看看是如何修复的,变更前的代码片段:
static void
ngx_http_upstream_init_request(ngx_http_request_t *r)
{
....
if (u->resolved->port == 0) {
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
"no port in upstream \"%V\"", host);
ngx_http_upstream_finalize_request(r, u,
NGX_HTTP_INTERNAL_SERVER_ERROR);
return;
}
....
}
变更后的代码片段:
static void
ngx_http_upstream_init_request(ngx_http_request_t *r)
{
....
if (u->resolved->port == 0
&& u->resolved->sockaddr->sa_family != AF_UNIX)
{
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
"no port in upstream \"%V\"", host);
ngx_http_upstream_finalize_request(r, u,
NGX_HTTP_INTERNAL_SERVER_ERROR);
return;
}
....
}
作为旁观者和事后诸葛亮,可以很明显看出之前的问题所在:在 upstream 中,Unix 本地域套接字不能用了。
这次版本更新,除了修正这个 Bug 外,没有做其他任何事情,所以,如果你已经尝鲜在用 1.9.8 了,赶紧直接升级到 1.9.9 吧。