post_action status
Roman Vasilyev
roman.vasilyev на yousendit.com
Пн Мар 12 17:41:02 UTC 2012
Понял, спасибо за коррективы, надеюсь включите эти мелкие исправления в
следующий релиз.
Пока применяю этот патч руками.
On 03/12/2012 10:38 AM, Maxim Dounin wrote:
> Hello!
>
> On Mon, Mar 12, 2012 at 10:07:55AM -0700, Roman Vasilyev wrote:
>
>
>> поправил немного
>>
>
>> diff -Naur nginx-1.1.16.old nginx-1.1.16
>> --- nginx-1.1.16.old/src/http/modules/ngx_http_uwsgi_module.c 2012-01-18 07:07:43.000000000 -0800
>> +++ nginx-1.1.16/src/http/modules/ngx_http_uwsgi_module.c 2012-03-12 10:02:13.180557183 -0700
>> @@ -43,7 +43,6 @@
>> static ngx_int_t ngx_http_uwsgi_reinit_request(ngx_http_request_t *r);
>> static ngx_int_t ngx_http_uwsgi_process_status_line(ngx_http_request_t *r);
>> static ngx_int_t ngx_http_uwsgi_process_header(ngx_http_request_t *r);
>> -static ngx_int_t ngx_http_uwsgi_process_header(ngx_http_request_t *r);
>> static void ngx_http_uwsgi_abort_request(ngx_http_request_t *r);
>> static void ngx_http_uwsgi_finalize_request(ngx_http_request_t *r,
>> ngx_int_t rc);
>> @@ -912,10 +911,7 @@
>> }
>>
>> if (rc == NGX_ERROR) {
>> - r->http_version = NGX_HTTP_VERSION_9;
>> -
>> u->process_header = ngx_http_uwsgi_process_header;
>> -
>> return ngx_http_uwsgi_process_header(r);
>> }
>>
>> @@ -951,7 +947,6 @@
>> ngx_str_t *status_line;
>> ngx_int_t rc, status;
>> ngx_table_elt_t *h;
>> - ngx_http_upstream_t *u;
>> ngx_http_upstream_header_t *hh;
>> ngx_http_upstream_main_conf_t *umcf;
>>
>> @@ -1009,18 +1004,17 @@
>> }
>>
>> if (rc == NGX_HTTP_PARSE_HEADER_DONE) {
>> + ngx_http_upstream_t *u = r->upstream;
>>
>> /* a whole header has been parsed successfully */
>>
>> ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
>> "http uwsgi header done");
>>
>> - if (r->http_version> NGX_HTTP_VERSION_9) {
>> + if (r->http_version> NGX_HTTP_VERSION_9&& u->headers_in.status_n) {
>> return NGX_OK;
>> }
>>
> Проверка на http_version тут не нужна вообще, а вынос определения
> переменой u внутрь if'а - это style bug (не говоря уже о том, что
> модули scgi и uwsgi следует сохранять минимально отличающимися). Но
> в целом должно работать.
>
> У меня какой-то такой патч:
>
> # HG changeset patch
> # User Maxim Dounin<mdounin на mdounin.ru>
> # Date 1331573481 -14400
> # Node ID 36bd6a3561882bd8acd13f053f35d0ed1563e11d
> # Parent deba4989d0b6b2dfffe303cda29538644a92b558
> Uwsgi: merged r->http_version fixes from scgi module.
>
> Fixed incorrect use of r->http_version (r4372). Removed duplicate function
> declaration (r4373). Removed error if there is no Status header (r4374).
>
> diff --git a/src/http/modules/ngx_http_uwsgi_module.c b/src/http/modules/ngx_http_uwsgi_module.c
> --- a/src/http/modules/ngx_http_uwsgi_module.c
> +++ b/src/http/modules/ngx_http_uwsgi_module.c
> @@ -43,7 +43,6 @@ static ngx_int_t ngx_http_uwsgi_create_r
> static ngx_int_t ngx_http_uwsgi_reinit_request(ngx_http_request_t *r);
> static ngx_int_t ngx_http_uwsgi_process_status_line(ngx_http_request_t *r);
> static ngx_int_t ngx_http_uwsgi_process_header(ngx_http_request_t *r);
> -static ngx_int_t ngx_http_uwsgi_process_header(ngx_http_request_t *r);
> static void ngx_http_uwsgi_abort_request(ngx_http_request_t *r);
> static void ngx_http_uwsgi_finalize_request(ngx_http_request_t *r,
> ngx_int_t rc);
> @@ -912,10 +911,7 @@ ngx_http_uwsgi_process_status_line(ngx_h
> }
>
> if (rc == NGX_ERROR) {
> - r->http_version = NGX_HTTP_VERSION_9;
> -
> u->process_header = ngx_http_uwsgi_process_header;
> -
> return ngx_http_uwsgi_process_header(r);
> }
>
> @@ -1015,12 +1011,12 @@ ngx_http_uwsgi_process_header(ngx_http_r
> ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
> "http uwsgi header done");
>
> - if (r->http_version> NGX_HTTP_VERSION_9) {
> + u = r->upstream;
> +
> + if (u->headers_in.status_n) {
> return NGX_OK;
> }
>
> - u = r->upstream;
> -
> if (u->headers_in.status) {
> status_line =&u->headers_in.status->value;
>
> @@ -1032,20 +1028,15 @@ ngx_http_uwsgi_process_header(ngx_http_r
> return NGX_HTTP_UPSTREAM_INVALID_HEADER;
> }
>
> - r->http_version = NGX_HTTP_VERSION_10;
> u->headers_in.status_n = status;
> u->headers_in.status_line = *status_line;
>
> } else if (u->headers_in.location) {
> - r->http_version = NGX_HTTP_VERSION_10;
> u->headers_in.status_n = 302;
> ngx_str_set(&u->headers_in.status_line,
> "302 Moved Temporarily");
>
> } else {
> - ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
> - "upstream sent neither valid HTTP/1.0 header "
> - "nor \"Status\" header line");
> u->headers_in.status_n = 200;
> ngx_str_set(&u->headers_in.status_line, "200 OK");
> }
>
>
> Maxim Dounin
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru на nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
Подробная информация о списке рассылки nginx-ru