mirror of
https://github.com/nginx/nginx.git
synced 2024-11-29 20:24:21 -06:00
nginx-0.3.29-RELEASE import
*) Feature: now nginx uses less memory, if PHP in FastCGI mode sends many warnings before the response. *) Bugfix: the "Transfer-Encoding: chunked" header line was issued in the 204 responses for the HTTP/1.1 requests. *) Bugfix: nginx returned the 502 response, if the complete response header lines were transferred in a separate FastCGI records. *) Bugfix: if the proxied URI was specified in the "post_action" directive, then it ran only after a successful completion of a request.
This commit is contained in:
parent
c58bb90e21
commit
69d73da629
@ -9,6 +9,55 @@
|
|||||||
<title lang="en">nginx changelog</title>
|
<title lang="en">nginx changelog</title>
|
||||||
|
|
||||||
|
|
||||||
|
<changes ver="0.3.29" date="20.02.2006">
|
||||||
|
|
||||||
|
<change type="feature">
|
||||||
|
<para lang="ru">
|
||||||
|
ÔÅÐÅÒØ nginx ÉÓÐÏÌØÚÕÅÔ ÍÅÎØÛÅ ÐÁÍÑÔÉ, ÅÓÌÉ PHP × ÒÅÖÉÍÅ FastCGI ÐÅÒÅÄÁ£Ô
|
||||||
|
ÂÏÌØÛÏÅ ËÏÌÉÞÅÓÔ×Ï ÐÒÅÄÕÐÒÅÖÄÅÎÉÊ ÐÅÒÅÄ ÏÔ×ÅÔÏÍ.
|
||||||
|
</para>
|
||||||
|
<para lang="en">
|
||||||
|
now nginx uses less memory, if PHP in FastCGI mode sends many warnings
|
||||||
|
before the response.
|
||||||
|
</para>
|
||||||
|
</change>
|
||||||
|
|
||||||
|
<change type="bugfix">
|
||||||
|
<para lang="ru">
|
||||||
|
× ÏÔ×ÅÔÁÈ 204 ÄÌÑ ÚÁÐÒÏÓÏ× ×ÅÒÓÉÉ HTTP/1.1 ×ÙÄÁ×ÁÌÁÓØ ÓÔÒÏËÁ ÚÁÇÏÌÏ×ËÁ
|
||||||
|
"Transfer-Encoding: chunked".
|
||||||
|
</para>
|
||||||
|
<para lang="en">
|
||||||
|
the "Transfer-Encoding: chunked" header line was issued in the 204 responses
|
||||||
|
for the HTTP/1.1 requests.
|
||||||
|
</para>
|
||||||
|
</change>
|
||||||
|
|
||||||
|
<change type="bugfix">
|
||||||
|
<para lang="ru">
|
||||||
|
nginx ×ÏÚ×ÒÁÝÁÌ 502 ËÏÄ ÏÔ×ÅÔÁ, ÅÓÌÉ FastCGI ÓÅÒ×ÅÒ ÐÅÒÅÄÁ×ÁÌ ÐÏÌÎÙÅ ÓÔÒÏËÉ
|
||||||
|
ÚÁÇÏÌÏ×ËÁ ÏÔ×ÅÔÁ × ÏÔÄÅÌØÎÙÈ FastCGI ÚÁÐÉÓÑÈ.
|
||||||
|
</para>
|
||||||
|
<para lang="en">
|
||||||
|
nginx returned the 502 response, if the complete response header lines
|
||||||
|
were transferred in a separate FastCGI records.
|
||||||
|
</para>
|
||||||
|
</change>
|
||||||
|
|
||||||
|
<change type="bugfix">
|
||||||
|
<para lang="ru">
|
||||||
|
ÅÓÌÉ × ÄÉÒÅËÔÉ×Å post_action ÂÙÌ ÕËÁÚÁÎ ÐÒÏËÓÉÒÕÅÍÙÊ URI, ÔÏ ÏÎ ×ÙÐÏÌÎÑÌÓÑ
|
||||||
|
ÔÏÌØËÏ ÐÏÓÌÅ ÕÓÐÅÛÎÏÇÏ ÚÁ×ÅÒÛÅÎÉÑ ÚÁÐÒÏÓÁ.
|
||||||
|
</para>
|
||||||
|
<para lang="en">
|
||||||
|
if the proxied URI was specified in the "post_action" directive, then it ran
|
||||||
|
only after a successful completion of a request.
|
||||||
|
</para>
|
||||||
|
</change>
|
||||||
|
|
||||||
|
</changes>
|
||||||
|
|
||||||
|
|
||||||
<changes ver="0.3.28" date="16.02.2006">
|
<changes ver="0.3.28" date="16.02.2006">
|
||||||
|
|
||||||
<change type="feature">
|
<change type="feature">
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
#define _NGINX_H_INCLUDED_
|
#define _NGINX_H_INCLUDED_
|
||||||
|
|
||||||
|
|
||||||
#define NGINX_VER "nginx/0.3.28"
|
#define NGINX_VER "nginx/0.3.29"
|
||||||
|
|
||||||
#define NGINX_VAR "NGINX"
|
#define NGINX_VAR "NGINX"
|
||||||
#define NGX_OLDPID_EXT ".oldbin"
|
#define NGX_OLDPID_EXT ".oldbin"
|
||||||
|
@ -264,8 +264,7 @@ ngx_trylock_accept_mutex(ngx_cycle_t *cycle)
|
|||||||
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
|
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
|
||||||
"accept mutex locked");
|
"accept mutex locked");
|
||||||
|
|
||||||
if (ngx_accept_mutex_held && !(ngx_event_flags & NGX_USE_RTSIG_EVENT))
|
if (ngx_accept_mutex_held && !(ngx_event_flags & NGX_USE_RTSIG_EVENT)) {
|
||||||
{
|
|
||||||
return NGX_OK;
|
return NGX_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,7 +50,10 @@ static ngx_http_output_body_filter_pt ngx_http_next_body_filter;
|
|||||||
static ngx_int_t
|
static ngx_int_t
|
||||||
ngx_http_chunked_header_filter(ngx_http_request_t *r)
|
ngx_http_chunked_header_filter(ngx_http_request_t *r)
|
||||||
{
|
{
|
||||||
if (r->headers_out.status == NGX_HTTP_NOT_MODIFIED || r != r->main) {
|
if (r->headers_out.status == NGX_HTTP_NOT_MODIFIED
|
||||||
|
|| r->headers_out.status == NGX_HTTP_NO_CONTENT
|
||||||
|
|| r != r->main)
|
||||||
|
{
|
||||||
return ngx_http_next_header_filter(r);
|
return ngx_http_next_header_filter(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ typedef struct {
|
|||||||
size_t length;
|
size_t length;
|
||||||
size_t padding;
|
size_t padding;
|
||||||
|
|
||||||
ngx_uint_t header;
|
ngx_uint_t fastcgi_stdout;
|
||||||
} ngx_http_fastcgi_ctx_t;
|
} ngx_http_fastcgi_ctx_t;
|
||||||
|
|
||||||
|
|
||||||
@ -776,7 +776,7 @@ ngx_http_fastcgi_reinit_request(ngx_http_request_t *r)
|
|||||||
}
|
}
|
||||||
|
|
||||||
f->state = ngx_http_fastcgi_st_version;
|
f->state = ngx_http_fastcgi_st_version;
|
||||||
f->header = 0;
|
f->fastcgi_stdout = 0;
|
||||||
|
|
||||||
return NGX_OK;
|
return NGX_OK;
|
||||||
}
|
}
|
||||||
@ -876,13 +876,6 @@ ngx_http_fastcgi_process_header(ngx_http_request_t *r)
|
|||||||
|
|
||||||
if (f->type == NGX_HTTP_FASTCGI_STDERR) {
|
if (f->type == NGX_HTTP_FASTCGI_STDERR) {
|
||||||
|
|
||||||
if (f->header) {
|
|
||||||
ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
|
|
||||||
"upstream split a header in FastCGI records");
|
|
||||||
|
|
||||||
return NGX_HTTP_UPSTREAM_INVALID_HEADER;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (f->length) {
|
if (f->length) {
|
||||||
line.data = u->buffer.pos;
|
line.data = u->buffer.pos;
|
||||||
|
|
||||||
@ -910,6 +903,18 @@ ngx_http_fastcgi_process_header(ngx_http_request_t *r)
|
|||||||
"FastCGI sent in stderr: \"%V\"", &line);
|
"FastCGI sent in stderr: \"%V\"", &line);
|
||||||
|
|
||||||
if (u->buffer.pos == u->buffer.last) {
|
if (u->buffer.pos == u->buffer.last) {
|
||||||
|
|
||||||
|
if (!f->fastcgi_stdout) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the special handling the large number
|
||||||
|
* of the PHP warnings to not allocate memory
|
||||||
|
*/
|
||||||
|
|
||||||
|
u->buffer.pos = u->buffer.start;
|
||||||
|
u->buffer.last = u->buffer.start;
|
||||||
|
}
|
||||||
|
|
||||||
return NGX_AGAIN;
|
return NGX_AGAIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -923,6 +928,8 @@ ngx_http_fastcgi_process_header(ngx_http_request_t *r)
|
|||||||
|
|
||||||
/* f->type == NGX_HTTP_FASTCGI_STDOUT */
|
/* f->type == NGX_HTTP_FASTCGI_STDOUT */
|
||||||
|
|
||||||
|
f->fastcgi_stdout = 1;
|
||||||
|
|
||||||
start = u->buffer.pos;
|
start = u->buffer.pos;
|
||||||
|
|
||||||
if (u->buffer.pos + f->length < u->buffer.last) {
|
if (u->buffer.pos + f->length < u->buffer.last) {
|
||||||
@ -939,8 +946,6 @@ ngx_http_fastcgi_process_header(ngx_http_request_t *r)
|
|||||||
last = NULL;
|
last = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
f->header = 1;
|
|
||||||
|
|
||||||
for ( ;; ) {
|
for ( ;; ) {
|
||||||
|
|
||||||
rc = ngx_http_parse_header_line(r, &u->buffer);
|
rc = ngx_http_parse_header_line(r, &u->buffer);
|
||||||
@ -991,9 +996,15 @@ ngx_http_fastcgi_process_header(ngx_http_request_t *r)
|
|||||||
"http fastcgi header: \"%V: %V\"",
|
"http fastcgi header: \"%V: %V\"",
|
||||||
&h->key, &h->value);
|
&h->key, &h->value);
|
||||||
|
|
||||||
|
if (u->buffer.pos < u->buffer.last) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* the end of the FastCGI record */
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (rc == NGX_HTTP_PARSE_HEADER_DONE) {
|
if (rc == NGX_HTTP_PARSE_HEADER_DONE) {
|
||||||
|
|
||||||
/* a whole header has been parsed successfully */
|
/* a whole header has been parsed successfully */
|
||||||
@ -1045,17 +1056,6 @@ ngx_http_fastcgi_process_header(ngx_http_request_t *r)
|
|||||||
|
|
||||||
f->length -= u->buffer.pos - start;
|
f->length -= u->buffer.pos - start;
|
||||||
|
|
||||||
if (rc == NGX_AGAIN) {
|
|
||||||
if (u->buffer.pos == u->buffer.last) {
|
|
||||||
return NGX_AGAIN;
|
|
||||||
}
|
|
||||||
|
|
||||||
ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
|
|
||||||
"upstream split a header in FastCGI records");
|
|
||||||
|
|
||||||
return NGX_HTTP_UPSTREAM_INVALID_HEADER;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (f->length == 0) {
|
if (f->length == 0) {
|
||||||
if (f->padding) {
|
if (f->padding) {
|
||||||
f->state = ngx_http_fastcgi_st_padding;
|
f->state = ngx_http_fastcgi_st_padding;
|
||||||
@ -1064,8 +1064,21 @@ ngx_http_fastcgi_process_header(ngx_http_request_t *r)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (rc == NGX_HTTP_PARSE_HEADER_DONE) {
|
||||||
return NGX_OK;
|
return NGX_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (u->buffer.pos == u->buffer.last) {
|
||||||
|
return NGX_AGAIN;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rc == NGX_AGAIN) {
|
||||||
|
ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
|
||||||
|
"upstream split a header line in FastCGI records");
|
||||||
|
|
||||||
|
return NGX_HTTP_UPSTREAM_INVALID_HEADER;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1396,7 +1396,6 @@ ngx_http_finalize_request(ngx_http_request_t *r, ngx_int_t rc)
|
|||||||
|| rc == NGX_HTTP_REQUEST_TIME_OUT
|
|| rc == NGX_HTTP_REQUEST_TIME_OUT
|
||||||
|| r->connection->error)
|
|| r->connection->error)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (ngx_http_post_action(r) == NGX_OK) {
|
if (ngx_http_post_action(r) == NGX_OK) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -283,8 +283,12 @@ ngx_http_upstream_init(ngx_http_request_t *r)
|
|||||||
ngx_del_timer(c->read);
|
ngx_del_timer(c->read);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!(r->http_version == NGX_HTTP_VERSION_9 && r->header_only)) {
|
||||||
|
/* not a post_action */
|
||||||
|
|
||||||
r->read_event_handler = ngx_http_upstream_rd_check_broken_connection;
|
r->read_event_handler = ngx_http_upstream_rd_check_broken_connection;
|
||||||
r->write_event_handler = ngx_http_upstream_wr_check_broken_connection;
|
r->write_event_handler = ngx_http_upstream_wr_check_broken_connection;
|
||||||
|
}
|
||||||
|
|
||||||
if (ngx_event_flags & NGX_USE_CLEAR_EVENT) {
|
if (ngx_event_flags & NGX_USE_CLEAR_EVENT) {
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user