diff --git a/src/core/nginx.h b/src/core/nginx.h
index 5adb47d..01ce1bd 100644
--- a/src/core/nginx.h
+++ b/src/core/nginx.h
@@ -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"
diff --git a/src/event/ngx_event_accept.c b/src/event/ngx_event_accept.c
index 875c45d..a795075 100644
--- a/src/event/ngx_event_accept.c
+++ b/src/event/ngx_event_accept.c
@@ -264,8 +264,7 @@
         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;
         }
 
diff --git a/src/http/modules/ngx_http_chunked_filter_module.c b/src/http/modules/ngx_http_chunked_filter_module.c
index 89c4a04..d8d1208 100644
--- a/src/http/modules/ngx_http_chunked_filter_module.c
+++ b/src/http/modules/ngx_http_chunked_filter_module.c
@@ -50,7 +50,10 @@
 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);
     }
 
diff --git a/src/http/modules/ngx_http_fastcgi_module.c b/src/http/modules/ngx_http_fastcgi_module.c
index 45b6e73..978c325 100644
--- a/src/http/modules/ngx_http_fastcgi_module.c
+++ b/src/http/modules/ngx_http_fastcgi_module.c
@@ -46,7 +46,7 @@
     size_t                     length;
     size_t                     padding;
 
-    ngx_uint_t                 header;
+    ngx_uint_t                 fastcgi_stdout;
 } ngx_http_fastcgi_ctx_t;
 
 
@@ -776,7 +776,7 @@
     }
 
     f->state = ngx_http_fastcgi_st_version;
-    f->header = 0;
+    f->fastcgi_stdout = 0;
 
     return NGX_OK;
 }
@@ -876,13 +876,6 @@
 
         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 @@
                               "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 @@
 
         /* 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 @@
             last = NULL;
         }
 
-        f->header = 1;
-
         for ( ;; ) {
 
             rc = ngx_http_parse_header_line(r, &u->buffer);
@@ -991,7 +996,13 @@
                                "http fastcgi header: \"%V: %V\"",
                                &h->key, &h->value);
 
-                continue;
+                if (u->buffer.pos < u->buffer.last) {
+                    continue;
+                }
+
+                /* the end of the FastCGI record */
+
+                break;
             }
 
             if (rc == NGX_HTTP_PARSE_HEADER_DONE) {
@@ -1045,17 +1056,6 @@
 
         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,7 +1064,20 @@
             }
         }
 
-        return NGX_OK;
+        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;
+        }
     }
 }
 
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c
index b97515c..348c84b 100644
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -1396,7 +1396,6 @@
         || rc == NGX_HTTP_REQUEST_TIME_OUT
         || r->connection->error)
     {
-
         if (ngx_http_post_action(r) == NGX_OK) {
             return;
         }
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
index cb55283..e73b3b3 100644
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -283,8 +283,12 @@
         ngx_del_timer(c->read);
     }
 
-    r->read_event_handler = ngx_http_upstream_rd_check_broken_connection;
-    r->write_event_handler = ngx_http_upstream_wr_check_broken_connection;
+    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) {
 
