mirror of
https://github.com/nginx/nginx.git
synced 2024-11-28 16:39:00 +08: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>
|
||||
|
||||
|
||||
<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">
|
||||
|
||||
<change type="feature">
|
||||
|
@ -8,7 +8,7 @@
|
||||
#define _NGINX_H_INCLUDED_
|
||||
|
||||
|
||||
#define NGINX_VER "nginx/0.3.28"
|
||||
#define NGINX_VER "nginx/0.3.29"
|
||||
|
||||
#define NGINX_VAR "NGINX"
|
||||
#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,
|
||||
"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;
|
||||
}
|
||||
|
||||
|
@ -50,7 +50,10 @@ static ngx_http_output_body_filter_pt ngx_http_next_body_filter;
|
||||
static ngx_int_t
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -46,7 +46,7 @@ typedef struct {
|
||||
size_t length;
|
||||
size_t padding;
|
||||
|
||||
ngx_uint_t header;
|
||||
ngx_uint_t fastcgi_stdout;
|
||||
} 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->header = 0;
|
||||
f->fastcgi_stdout = 0;
|
||||
|
||||
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->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) {
|
||||
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);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@ -923,6 +928,8 @@ ngx_http_fastcgi_process_header(ngx_http_request_t *r)
|
||||
|
||||
/* f->type == NGX_HTTP_FASTCGI_STDOUT */
|
||||
|
||||
f->fastcgi_stdout = 1;
|
||||
|
||||
start = u->buffer.pos;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
f->header = 1;
|
||||
|
||||
for ( ;; ) {
|
||||
|
||||
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\"",
|
||||
&h->key, &h->value);
|
||||
|
||||
if (u->buffer.pos < u->buffer.last) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* the end of the FastCGI record */
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if (rc == NGX_HTTP_PARSE_HEADER_DONE) {
|
||||
|
||||
/* 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;
|
||||
|
||||
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->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;
|
||||
}
|
||||
|
||||
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
|
||||
|| r->connection->error)
|
||||
{
|
||||
|
||||
if (ngx_http_post_action(r) == NGX_OK) {
|
||||
return;
|
||||
}
|
||||
|
@ -283,8 +283,12 @@ ngx_http_upstream_init(ngx_http_request_t *r)
|
||||
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->write_event_handler = ngx_http_upstream_wr_check_broken_connection;
|
||||
}
|
||||
|
||||
if (ngx_event_flags & NGX_USE_CLEAR_EVENT) {
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user