annotate src/http/modules/ngx_http_fastcgi_handler.c @ 34:aab2ea7c0458 NGINX_0_1_17

nginx 0.1.17 *) Change: the ngx_http_rewrite_module was rewritten from the scratch. Now it is possible to redirect, to return the error codes, to check the variables and referrers. The directives can be used inside locations. The redirect directive was canceled. *) Feature: the ngx_http_geo_module. *) Feature: the proxy_set_x_var and fastcgi_set_var directives. *) Bugfix: the location configuration with "=" modifier may be used in another location. *) Bugfix: the correct content type was set only for requests that use small caps letters in extension. *) Bugfix: if the proxy_pass or fastcgi_pass directives were set in the location, and access was denied, and the error was redirected to a static page, then the segmentation fault occurred. *) Bugfix: if in a proxied "Location" header was a relative URL, then a host name and a slash were added to them; bug appeared in 0.1.14. *) Bugfix: the system error message was not logged on Linux.
author Igor Sysoev <http://sysoev.ru>
date Thu, 03 Feb 2005 00:00:00 +0300
parents da8c190bdaba
children a39d1b793287
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2 /*
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
4 */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
5
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
6
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
7 #include <ngx_config.h>
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
8 #include <ngx_core.h>
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
9 #include <ngx_http.h>
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
10 #include <nginx.h>
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
11
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
12
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
13 typedef struct {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
14 ngx_http_upstream_conf_t upstream;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
15
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
16 ngx_peers_t *peers;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
17
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
18 ngx_uint_t params;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
19
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
20 ngx_str_t root;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
21 ngx_str_t index;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
22
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
23 ngx_array_t vars;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
24
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
25 ngx_str_t *location;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
26 } ngx_http_fastcgi_loc_conf_t;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
27
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
29 typedef struct {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
30 ngx_list_t headers;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
31
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
32 ngx_table_elt_t *status;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
33
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
34 ngx_table_elt_t *content_type;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
35 ngx_table_elt_t *content_length;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
36 ngx_table_elt_t *x_powered_by;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
37
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
38 #if (NGX_HTTP_GZIP)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
39 ngx_table_elt_t *content_encoding;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
40 #endif
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
41 } ngx_http_fastcgi_headers_in_t;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
42
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
43
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
44 typedef struct {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
45 ngx_http_fastcgi_headers_in_t headers_in;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
46 } ngx_http_fastcgi_upstream_t;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
47
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
48
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
49 typedef enum {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
50 ngx_http_fastcgi_st_version = 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
51 ngx_http_fastcgi_st_type,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
52 ngx_http_fastcgi_st_request_id_hi,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
53 ngx_http_fastcgi_st_request_id_lo,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
54 ngx_http_fastcgi_st_content_length_hi,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
55 ngx_http_fastcgi_st_content_length_lo,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
56 ngx_http_fastcgi_st_padding_length,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
57 ngx_http_fastcgi_st_reserved,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
58 ngx_http_fastcgi_st_data,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
59 ngx_http_fastcgi_st_padding,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
60 } ngx_http_fastcgi_state_e;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
61
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
62
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
63 typedef struct {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
64 ngx_http_fastcgi_state_e state;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
65 u_char *pos;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
66 u_char *last;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
67 ngx_uint_t type;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
68 size_t length;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
69 size_t padding;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
70
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
71 ngx_http_fastcgi_upstream_t *upstream;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
72 } ngx_http_fastcgi_ctx_t;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
73
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
74
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
75 #define NGX_HTTP_FASTCGI_REMOTE_ADDR 0x0002
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
76 #define NGX_HTTP_FASTCGI_REMOTE_USER 0x0004
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
77 #define NGX_HTTP_FASTCGI_SERVER_NAME 0x0008
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
78 #define NGX_HTTP_FASTCGI_SERVER_ADDR 0x0010
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
79 #define NGX_HTTP_FASTCGI_SERVER_PORT 0x0020
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
80 #define NGX_HTTP_FASTCGI_SCRIPT_NAME 0x0040
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
81 #define NGX_HTTP_FASTCGI_AUTH_TYPE 0x0080
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
82 #define NGX_HTTP_FASTCGI_SERVER_PROTOCOL 0x0100
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
83 #define NGX_HTTP_FASTCGI_SERVER_SOFTWARE 0x0200
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
84 #define NGX_HTTP_FASTCGI_GATEWAY_INTERFACE 0x0400
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
85 #define NGX_HTTP_FASTCGI_REQUEST_URI 0x0800
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
86 #define NGX_HTTP_FASTCGI_REDIRECT_STATUS 0x1000
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
87
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
88
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
89 #define NGX_HTTP_FASTCGI_RESPONDER 1
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
90
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
91 #define NGX_HTTP_FASTCGI_BEGIN_REQUEST 1
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
92 #define NGX_HTTP_FASTCGI_ABORT_REQUEST 2
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
93 #define NGX_HTTP_FASTCGI_END_REQUEST 3
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
94 #define NGX_HTTP_FASTCGI_PARAMS 4
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
95 #define NGX_HTTP_FASTCGI_STDIN 5
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
96 #define NGX_HTTP_FASTCGI_STDOUT 6
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
97 #define NGX_HTTP_FASTCGI_STDERR 7
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
98 #define NGX_HTTP_FASTCGI_DATA 8
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
99
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
100
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
101 typedef struct {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
102 u_char version;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
103 u_char type;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
104 u_char request_id_hi;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
105 u_char request_id_lo;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
106 u_char content_length_hi;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
107 u_char content_length_lo;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
108 u_char padding_length;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
109 u_char reserved;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
110 } ngx_http_fastcgi_header_t;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
111
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
112
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
113 typedef struct {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
114 u_char role_hi;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
115 u_char role_lo;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
116 u_char flags;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
117 u_char reserved[5];
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
118 } ngx_http_fastcgi_begin_request_t;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
119
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
120
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
121 static ngx_int_t ngx_http_fastcgi_create_request(ngx_http_request_t *r);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
122 static ngx_int_t ngx_http_fastcgi_reinit_request(ngx_http_request_t *r);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
123 static ngx_int_t ngx_http_fastcgi_process_header(ngx_http_request_t *r);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
124 static ngx_int_t ngx_http_fastcgi_send_header(ngx_http_request_t *r);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
125 static ngx_int_t ngx_http_fastcgi_input_filter(ngx_event_pipe_t *p,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
126 ngx_buf_t *buf);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
127 static ngx_int_t ngx_http_fastcgi_process_record(ngx_http_request_t *r,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
128 ngx_http_fastcgi_ctx_t *f);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
129 static void ngx_http_fastcgi_abort_request(ngx_http_request_t *r);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
130 static void ngx_http_fastcgi_finalize_request(ngx_http_request_t *r,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
131 ngx_int_t rc);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
132
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
133 static char *ngx_http_fastcgi_pass(ngx_conf_t *cf, ngx_command_t *cmd,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
134 void *conf);
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
135 static char *ngx_http_fastcgi_set_var(ngx_conf_t *cf, ngx_command_t *cmd,
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
136 void *conf);
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
137 static char *ngx_http_fastcgi_lowat_check(ngx_conf_t *cf, void *post,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
138 void *data);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
139 static void *ngx_http_fastcgi_create_loc_conf(ngx_conf_t *cf);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
140 static char *ngx_http_fastcgi_merge_loc_conf(ngx_conf_t *cf,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
141 void *parent, void *child);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
142
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
143
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
144 static ngx_str_t ngx_http_fastcgi_methods[] = {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
145 ngx_string("GET"),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
146 ngx_string("HEAD"),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
147 ngx_string("POST")
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
148 };
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
149
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
150
30
e1ada20fc595 nginx 0.1.15
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
151 static ngx_str_t ngx_http_fastcgi_uri = ngx_string("/");
e1ada20fc595 nginx 0.1.15
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
152
e1ada20fc595 nginx 0.1.15
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
153
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
154 static ngx_http_header_t ngx_http_fastcgi_headers_in[] = {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
155 { ngx_string("Status"), offsetof(ngx_http_fastcgi_headers_in_t, status) },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
156
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
157 { ngx_string("Content-Type"),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
158 offsetof(ngx_http_fastcgi_headers_in_t, content_type) },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
159
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
160 { ngx_string("Content-Length"),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
161 offsetof(ngx_http_fastcgi_headers_in_t, content_length) },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
162
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
163 { ngx_string("X-Powered-By"),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
164 offsetof(ngx_http_fastcgi_headers_in_t, x_powered_by) },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
165
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
166 #if (NGX_HTTP_GZIP)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
167 { ngx_string("Content-Encoding"),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
168 offsetof(ngx_http_fastcgi_headers_in_t, content_encoding) },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
169 #endif
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
170
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
171 { ngx_null_string, 0 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
172 };
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
173
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
174
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
175 static ngx_conf_post_t ngx_http_fastcgi_lowat_post =
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
176 { ngx_http_fastcgi_lowat_check } ;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
177
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
178 static ngx_conf_bitmask_t ngx_http_fastcgi_next_upstream_masks[] = {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
179 { ngx_string("error"), NGX_HTTP_UPSTREAM_FT_ERROR },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
180 { ngx_string("timeout"), NGX_HTTP_UPSTREAM_FT_TIMEOUT },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
181 { ngx_string("invalid_header"), NGX_HTTP_UPSTREAM_FT_INVALID_HEADER },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
182 { ngx_string("http_500"), NGX_HTTP_UPSTREAM_FT_HTTP_500 },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
183 { ngx_string("http_404"), NGX_HTTP_UPSTREAM_FT_HTTP_404 },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
184 { ngx_null_string, 0 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
185 };
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
186
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
187
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
188 static ngx_conf_bitmask_t ngx_http_fastcgi_params_masks[] = {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
189 { ngx_string("remote_addr"), NGX_HTTP_FASTCGI_REMOTE_ADDR },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
190 { ngx_string("server_port"), NGX_HTTP_FASTCGI_SERVER_PORT },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
191 { ngx_string("server_addr"), NGX_HTTP_FASTCGI_SERVER_ADDR },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
192 { ngx_string("server_name"), NGX_HTTP_FASTCGI_SERVER_NAME },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
193 { ngx_string("script_name"), NGX_HTTP_FASTCGI_SCRIPT_NAME },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
194
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
195 { ngx_string("server_protocol"), NGX_HTTP_FASTCGI_SERVER_PROTOCOL },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
196 { ngx_string("server_software"), NGX_HTTP_FASTCGI_SERVER_SOFTWARE },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
197 { ngx_string("gateway_interface"), NGX_HTTP_FASTCGI_GATEWAY_INTERFACE },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
198
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
199 { ngx_string("redirect_status"), NGX_HTTP_FASTCGI_REDIRECT_STATUS },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
200 { ngx_string("request_uri"), NGX_HTTP_FASTCGI_REQUEST_URI },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
201
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
202 { ngx_null_string, 0 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
203 };
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
204
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
205
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
206 static ngx_command_t ngx_http_fastcgi_commands[] = {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
207
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
208 { ngx_string("fastcgi_pass"),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
209 NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
210 ngx_http_fastcgi_pass,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
211 NGX_HTTP_LOC_CONF_OFFSET,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
212 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
213 NULL },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
214
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
215 { ngx_string("fastcgi_root"),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
216 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
217 ngx_conf_set_str_slot,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
218 NGX_HTTP_LOC_CONF_OFFSET,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
219 offsetof(ngx_http_fastcgi_loc_conf_t, root),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
220 NULL },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
221
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
222 { ngx_string("fastcgi_index"),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
223 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
224 ngx_conf_set_str_slot,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
225 NGX_HTTP_LOC_CONF_OFFSET,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
226 offsetof(ngx_http_fastcgi_loc_conf_t, index),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
227 NULL },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
228
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
229 { ngx_string("fastcgi_connect_timeout"),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
230 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
231 ngx_conf_set_msec_slot,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
232 NGX_HTTP_LOC_CONF_OFFSET,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
233 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.connect_timeout),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
234 NULL },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
235
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
236 { ngx_string("fastcgi_send_timeout"),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
237 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
238 ngx_conf_set_msec_slot,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
239 NGX_HTTP_LOC_CONF_OFFSET,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
240 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.send_timeout),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
241 NULL },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
242
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
243 { ngx_string("fastcgi_send_lowat"),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
244 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
245 ngx_conf_set_size_slot,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
246 NGX_HTTP_LOC_CONF_OFFSET,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
247 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.send_lowat),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
248 &ngx_http_fastcgi_lowat_post },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
249
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
250 { ngx_string("fastcgi_header_buffer_size"),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
251 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
252 ngx_conf_set_size_slot,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
253 NGX_HTTP_LOC_CONF_OFFSET,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
254 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.header_buffer_size),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
255 NULL },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
256
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
257 { ngx_string("fastcgi_x_powered_by"),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
258 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
259 ngx_conf_set_flag_slot,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
260 NGX_HTTP_LOC_CONF_OFFSET,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
261 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.x_powered_by),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
262 NULL },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
263
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
264 { ngx_string("fastcgi_read_timeout"),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
265 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
266 ngx_conf_set_msec_slot,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
267 NGX_HTTP_LOC_CONF_OFFSET,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
268 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.read_timeout),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
269 NULL },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
270
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
271 { ngx_string("fastcgi_buffers"),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
272 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE2,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
273 ngx_conf_set_bufs_slot,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
274 NGX_HTTP_LOC_CONF_OFFSET,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
275 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.bufs),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
276 NULL },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
277
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
278 { ngx_string("fastcgi_busy_buffers_size"),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
279 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
280 ngx_conf_set_size_slot,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
281 NGX_HTTP_LOC_CONF_OFFSET,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
282 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.busy_buffers_size),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
283 NULL },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
284
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
285 { ngx_string("fastcgi_temp_path"),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
286 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1234,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
287 ngx_conf_set_path_slot,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
288 NGX_HTTP_LOC_CONF_OFFSET,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
289 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.temp_path),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
290 (void *) ngx_garbage_collector_temp_handler },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
291
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
292 { ngx_string("fastcgi_max_temp_file_size"),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
293 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
294 ngx_conf_set_size_slot,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
295 NGX_HTTP_LOC_CONF_OFFSET,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
296 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.max_temp_file_size),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
297 NULL },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
298
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
299 { ngx_string("fastcgi_temp_file_write_size"),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
300 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
301 ngx_conf_set_size_slot,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
302 NGX_HTTP_LOC_CONF_OFFSET,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
303 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.temp_file_write_size),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
304 NULL },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
305
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
306 { ngx_string("fastcgi_next_upstream"),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
307 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_ANY,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
308 ngx_conf_set_bitmask_slot,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
309 NGX_HTTP_LOC_CONF_OFFSET,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
310 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.next_upstream),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
311 &ngx_http_fastcgi_next_upstream_masks },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
312
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
313 { ngx_string("fastcgi_set_var"),
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
314 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
315 ngx_http_fastcgi_set_var,
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
316 NGX_HTTP_LOC_CONF_OFFSET,
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
317 0,
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
318 NULL },
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
319
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
320 { ngx_string("fastcgi_params"),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
321 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_ANY,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
322 ngx_conf_set_bitmask_slot,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
323 NGX_HTTP_LOC_CONF_OFFSET,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
324 offsetof(ngx_http_fastcgi_loc_conf_t, params),
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
325 &ngx_http_fastcgi_params_masks },
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
326
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
327 ngx_null_command
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
328 };
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
329
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
330
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
331 ngx_http_module_t ngx_http_fastcgi_module_ctx = {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
332 NULL, /* pre conf */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
333
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
334 NULL, /* create main configuration */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
335 NULL, /* init main configuration */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
336
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
337 NULL, /* create server configuration */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
338 NULL, /* merge server configuration */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
339
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
340 ngx_http_fastcgi_create_loc_conf, /* create location configuration */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
341 ngx_http_fastcgi_merge_loc_conf /* merge location configuration */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
342 };
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
343
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
344
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
345 ngx_module_t ngx_http_fastcgi_module = {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
346 NGX_MODULE,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
347 &ngx_http_fastcgi_module_ctx, /* module context */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
348 ngx_http_fastcgi_commands, /* module directives */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
349 NGX_HTTP_MODULE, /* module type */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
350 NULL, /* init module */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
351 NULL /* init process */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
352 };
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
353
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
354
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
355 static ngx_int_t ngx_http_fastcgi_handler(ngx_http_request_t *r)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
356 {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
357 ngx_int_t rc;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
358 ngx_http_upstream_t *u;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
359 ngx_http_fastcgi_loc_conf_t *flcf;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
360
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
361 flcf = ngx_http_get_module_loc_conf(r, ngx_http_fastcgi_module);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
362
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
363 if (!(u = ngx_pcalloc(r->pool, sizeof(ngx_http_upstream_t)))) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
364 return NGX_HTTP_INTERNAL_SERVER_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
365 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
366
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
367 u->peer.log = r->connection->log;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
368 u->peer.log_error = NGX_ERROR_ERR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
369 u->peer.peers = flcf->peers;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
370 u->peer.tries = flcf->peers->number;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
371 #if (NGX_THREADS)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
372 u->peer.lock = &r->connection->lock;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
373 #endif
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
374
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
375 u->output.tag = (ngx_buf_tag_t) &ngx_http_fastcgi_module;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
376
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
377 u->conf = &flcf->upstream;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
378
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
379 u->location = flcf->location;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
380
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
381 u->create_request = ngx_http_fastcgi_create_request;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
382 u->reinit_request = ngx_http_fastcgi_reinit_request;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
383 u->process_header = ngx_http_fastcgi_process_header;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
384 u->send_header = ngx_http_fastcgi_send_header;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
385 u->abort_request = ngx_http_fastcgi_abort_request;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
386 u->finalize_request = ngx_http_fastcgi_finalize_request;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
387
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
388 u->pipe.input_filter = ngx_http_fastcgi_input_filter;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
389 u->pipe.input_ctx = r;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
390
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
391 u->log_ctx = r->connection->log->data;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
392 u->log_handler = ngx_http_upstream_log_error;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
393
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
394 u->schema.len = sizeof("fastcgi://") - 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
395 u->schema.data = (u_char *) "fastcgi://";
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
396 u->uri.len = sizeof("/") - 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
397 u->uri.data = (u_char *) "/";
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
398
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
399 r->upstream = u;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
400
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
401 rc = ngx_http_read_client_request_body(r, ngx_http_upstream_init);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
402
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
403 if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
404 return rc;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
405 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
406
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
407 return NGX_DONE;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
408 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
409
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
410
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
411 static ngx_int_t ngx_http_fastcgi_create_request(ngx_http_request_t *r)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
412 {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
413 u_char ch, *pos, addr_text[INET_ADDRSTRLEN];
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
414 size_t size, len, index, padding, addr_len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
415 off_t file_pos;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
416 ngx_buf_t *b;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
417 socklen_t slen;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
418 ngx_chain_t *cl, *body;
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
419 ngx_uint_t i, n, next, *vindex;
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
420 ngx_list_part_t *part;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
421 ngx_table_elt_t *header;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
422 struct sockaddr_in sin;
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
423 ngx_http_variable_t *var;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
424 ngx_http_variable_value_t *value;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
425 ngx_http_core_main_conf_t *cmcf;
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
426 ngx_http_fastcgi_header_t *h;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
427 ngx_http_fastcgi_loc_conf_t *flcf;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
428 ngx_http_fastcgi_begin_request_t *br;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
429
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
430
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
431 flcf = ngx_http_get_module_loc_conf(r, ngx_http_fastcgi_module);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
432
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
433 if ((flcf->params & NGX_HTTP_FASTCGI_SERVER_ADDR) && r->in_addr == 0) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
434
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
435 slen = sizeof(struct sockaddr_in);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
436 if (getsockname(r->connection->fd,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
437 (struct sockaddr *) &sin, &slen) == -1)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
438 {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
439 ngx_log_error(NGX_LOG_CRIT, r->connection->log,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
440 ngx_socket_errno, "getsockname() failed");
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
441 return NGX_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
442 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
443
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
444 r->in_addr = sin.sin_addr.s_addr;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
445 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
446
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
447 addr_len = ngx_inet_ntop(r->connection->listening->family, &r->in_addr,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
448 addr_text, INET_ADDRSTRLEN);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
449 if (addr_len == 0) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
450 return NGX_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
451 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
452
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
453
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
454 if (r->upstream->method) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
455 len = 1 + 1 + sizeof("REQUEST_METHOD") - 1
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
456 + ngx_http_fastcgi_methods[r->upstream->method - 1].len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
457
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
458 } else {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
459 len = 1 + ((r->method_name.len - 1 > 127) ? 4 : 1)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
460 + sizeof("REQUEST_METHOD") - 1
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
461 + r->method_name.len - 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
462 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
463
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
464
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
465 index = (r->uri.data[r->uri.len - 1] == '/') ? flcf->index.len : 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
466
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
467 len += 1 + ((flcf->root.len + r->uri.len + index > 127) ? 4 : 1)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
468 + sizeof("PATH_TRANSLATED") - 1
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
469 + flcf->root.len + r->uri.len + index;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
470
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
471 if (r->args.len) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
472 len += 1 + ((r->args.len > 127) ? 4 : 1) + sizeof("QUERY_STRING") - 1
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
473 + r->args.len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
474 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
475
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
476 if (r->headers_in.content_length_n > 0) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
477 len += 1 + ((r->headers_in.content_length->value.len > 127) ? 4 : 1)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
478 + sizeof("CONTENT_LENGTH") - 1
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
479 + r->headers_in.content_length->value.len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
480 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
481
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
482
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
483 if (r->headers_in.content_type) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
484 len += 1 + ((r->headers_in.content_type->value.len > 127) ? 4 : 1)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
485 + sizeof("CONTENT_TYPE") - 1
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
486 + r->headers_in.content_type->value.len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
487 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
488
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
489
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
490 if (flcf->params & NGX_HTTP_FASTCGI_REDIRECT_STATUS) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
491 len += 1 + 1 + sizeof("REDIRECT_STATUS200") - 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
492 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
493
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
494 if (flcf->params & NGX_HTTP_FASTCGI_REQUEST_URI) {
30
e1ada20fc595 nginx 0.1.15
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
495 len += 1 + ((r->unparsed_uri.len > 127) ? 4 : 1)
e1ada20fc595 nginx 0.1.15
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
496 + sizeof("REQUEST_URI") - 1 + r->unparsed_uri.len;
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
497 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
498
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
499 if (flcf->params & NGX_HTTP_FASTCGI_SCRIPT_NAME) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
500 len += 1 + ((r->uri.len + index > 127) ? 4 : 1)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
501 + sizeof("SCRIPT_NAME") - 1 + r->uri.len + index ;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
502 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
503
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
504 if (flcf->params & NGX_HTTP_FASTCGI_REMOTE_ADDR) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
505 len += 1 + 1 + sizeof("REMOTE_ADDR") - 1 + r->connection->addr_text.len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
506 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
507
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
508 if (flcf->params & NGX_HTTP_FASTCGI_SERVER_NAME) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
509 len += 1 + 1 + sizeof("SERVER_NAME") - 1 + r->server_name.len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
510 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
511
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
512 if (flcf->params & NGX_HTTP_FASTCGI_SERVER_PORT) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
513 len += 1 + 1 + sizeof("SERVER_PORT") - 1 + r->port_text->len - 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
514 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
515
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
516 if (flcf->params & NGX_HTTP_FASTCGI_SERVER_ADDR) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
517 len += 1 + 1 + sizeof("SERVER_ADDR") - 1 + addr_len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
518 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
519
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
520 if (flcf->params & NGX_HTTP_FASTCGI_SERVER_PROTOCOL
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
521 && r->http_protocol.len)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
522 {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
523 len += 1 + ((r->http_protocol.len > 127) ? 4 : 1)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
524 + sizeof("SERVER_PROTOCOL") - 1 + r->http_protocol.len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
525 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
526
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
527 if (flcf->params & NGX_HTTP_FASTCGI_SERVER_SOFTWARE) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
528 len += 1 + 1 + sizeof("SERVER_SOFTWARE") - 1 + sizeof(NGINX_VER) - 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
529 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
530
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
531 if (flcf->params & NGX_HTTP_FASTCGI_GATEWAY_INTERFACE) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
532 len += 1 + 1 + sizeof("GATEWAY_INTERFACE") - 1 + sizeof("CGI/1.1") - 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
533 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
534
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
535
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
536 cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module);
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
537
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
538 var = cmcf->variables.elts;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
539 vindex = flcf->vars.elts;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
540
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
541 for (i = 0; i < flcf->vars.nelts; i++) {
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
542
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
543 if (!(value = ngx_http_get_variable(r, vindex[i]))) {
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
544 continue;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
545 }
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
546
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
547 if (value->text.len) {
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
548 len += 1 + 1 + var[vindex[i]].name.len + value->text.len;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
549 }
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
550 }
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
551
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
552
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
553 part = &r->headers_in.headers.part;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
554 header = part->elts;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
555
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
556 for (i = 0; /* void */; i++) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
557
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
558 if (i >= part->nelts) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
559 if (part->next == NULL) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
560 break;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
561 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
562
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
563 part = part->next;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
564 header = part->elts;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
565 i = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
566 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
567
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
568 len += ((header[i].key.len > 127) ? 4 : 1)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
569 + ((header[i].value.len > 127) ? 4 : 1)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
570 + 5 + header[i].key.len + header[i].value.len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
571 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
572
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
573
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
574 if (len > 65535) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
575 ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
576 "fastcgi: the request record is too big");
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
577 return NGX_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
578 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
579
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
580
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
581 padding = 8 - len % 8;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
582 padding = (padding == 8) ? 0 : padding;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
583
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
584
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
585 size = sizeof(ngx_http_fastcgi_header_t)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
586 + sizeof(ngx_http_fastcgi_begin_request_t)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
587
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
588 + sizeof(ngx_http_fastcgi_header_t) /* NGX_HTTP_FASTCGI_PARAMS */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
589 + len + padding
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
590 + sizeof(ngx_http_fastcgi_header_t) /* NGX_HTTP_FASTCGI_PARAMS */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
591
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
592 + sizeof(ngx_http_fastcgi_header_t); /* NGX_HTTP_FASTCGI_STDIN */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
593
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
594
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
595 if (!(b = ngx_create_temp_buf(r->pool, size))) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
596 return NGX_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
597 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
598
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
599 if (!(cl = ngx_alloc_chain_link(r->pool))) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
600 return NGX_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
601 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
602
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
603 cl->buf = b;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
604
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
605 h = (ngx_http_fastcgi_header_t *) b->pos;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
606
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
607 h->version = 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
608 h->type = NGX_HTTP_FASTCGI_BEGIN_REQUEST;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
609 h->request_id_hi = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
610 h->request_id_lo = 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
611 h->content_length_hi = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
612 h->content_length_lo = sizeof(ngx_http_fastcgi_begin_request_t);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
613 h->padding_length = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
614 h->reserved = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
615
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
616 br = (ngx_http_fastcgi_begin_request_t *)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
617 (b->pos + sizeof(ngx_http_fastcgi_header_t));
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
618 br->role_hi = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
619 br->role_lo = NGX_HTTP_FASTCGI_RESPONDER;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
620 br->flags = 0; /* NGX_HTTP_FASTCGI_KEEP_CONN */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
621 br->reserved[0] = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
622 br->reserved[1] = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
623 br->reserved[2] = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
624 br->reserved[3] = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
625 br->reserved[4] = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
626
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
627 h = (ngx_http_fastcgi_header_t *)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
628 (b->pos + sizeof(ngx_http_fastcgi_header_t)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
629 + sizeof(ngx_http_fastcgi_begin_request_t));
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
630
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
631 h->version = 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
632 h->type = NGX_HTTP_FASTCGI_PARAMS;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
633 h->request_id_hi = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
634 h->request_id_lo = 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
635 h->content_length_hi = (u_char) ((len >> 8) & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
636 h->content_length_lo = (u_char) (len & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
637 h->padding_length = (u_char) padding;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
638 h->reserved = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
639
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
640 b->last = b->pos + sizeof(ngx_http_fastcgi_header_t)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
641 + sizeof(ngx_http_fastcgi_begin_request_t)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
642 + sizeof(ngx_http_fastcgi_header_t);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
643
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
644
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
645 *b->last++ = sizeof("PATH_TRANSLATED") - 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
646
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
647 len = flcf->root.len + r->uri.len + index;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
648 if (len > 127) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
649 *b->last++ = (u_char) (((len >> 24) & 0x7f) | 0x80);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
650 *b->last++ = (u_char) ((len >> 16) & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
651 *b->last++ = (u_char) ((len >> 8) & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
652 *b->last++ = (u_char) (len & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
653
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
654 } else {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
655 *b->last++ = (u_char) len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
656 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
657
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
658 b->last = ngx_cpymem(b->last, "PATH_TRANSLATED",
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
659 sizeof("PATH_TRANSLATED") - 1);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
660 b->last = ngx_cpymem(b->last, flcf->root.data, flcf->root.len);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
661 b->last = ngx_cpymem(b->last, r->uri.data, r->uri.len);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
662
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
663 if (index) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
664 b->last = ngx_cpymem(b->last, flcf->index.data, index);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
665 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
666
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
667
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
668 *b->last++ = sizeof("REQUEST_METHOD") - 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
669
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
670 if (r->upstream->method) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
671 *b->last++ = (u_char)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
672 ngx_http_fastcgi_methods[r->upstream->method - 1].len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
673
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
674 b->last = ngx_cpymem(b->last, "REQUEST_METHOD",
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
675 sizeof("REQUEST_METHOD") - 1);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
676
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
677 b->last = ngx_cpymem(b->last,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
678 ngx_http_fastcgi_methods[r->upstream->method - 1].data,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
679 ngx_http_fastcgi_methods[r->upstream->method - 1].len);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
680
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
681 } else {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
682 len = r->method_name.len - 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
683 if (len > 127) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
684 *b->last++ = (u_char) (((len >> 24) & 0x7f) | 0x80);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
685 *b->last++ = (u_char) ((len >> 16) & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
686 *b->last++ = (u_char) ((len >> 8) & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
687 *b->last++ = (u_char) (len & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
688
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
689 } else {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
690 *b->last++ = (u_char) len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
691 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
692
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
693 b->last = ngx_cpymem(b->last, "REQUEST_METHOD",
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
694 sizeof("REQUEST_METHOD") - 1);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
695 b->last = ngx_cpymem(b->last, r->method_name.data, len);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
696 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
697
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
698
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
699 if (r->args.len) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
700 *b->last++ = sizeof("QUERY_STRING") - 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
701
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
702 len = r->args.len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
703 if (len > 127) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
704 *b->last++ = (u_char) (((len >> 24) & 0x7f) | 0x80);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
705 *b->last++ = (u_char) ((len >> 16) & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
706 *b->last++ = (u_char) ((len >> 8) & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
707 *b->last++ = (u_char) (len & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
708
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
709 } else {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
710 *b->last++ = (u_char) len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
711 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
712
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
713 b->last = ngx_cpymem(b->last, "QUERY_STRING",
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
714 sizeof("QUERY_STRING") - 1);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
715 b->last = ngx_cpymem(b->last, r->args.data, len);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
716 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
717
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
718
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
719 if (r->headers_in.content_length_n > 0) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
720 *b->last++ = sizeof("CONTENT_LENGTH") - 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
721
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
722 len = r->headers_in.content_length->value.len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
723 if (len > 127) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
724 *b->last++ = (u_char) (((len >> 24) & 0x7f) | 0x80);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
725 *b->last++ = (u_char) ((len >> 16) & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
726 *b->last++ = (u_char) ((len >> 8) & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
727 *b->last++ = (u_char) (len & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
728
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
729 } else {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
730 *b->last++ = (u_char) len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
731 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
732
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
733 b->last = ngx_cpymem(b->last, "CONTENT_LENGTH",
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
734 sizeof("CONTENT_LENGTH") - 1);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
735 b->last = ngx_cpymem(b->last, r->headers_in.content_length->value.data,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
736 len);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
737 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
738
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
739
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
740 if (r->headers_in.content_type) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
741 *b->last++ = sizeof("CONTENT_TYPE") - 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
742
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
743 len = r->headers_in.content_type->value.len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
744 if (len > 127) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
745 *b->last++ = (u_char) (((len >> 24) & 0x7f) | 0x80);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
746 *b->last++ = (u_char) ((len >> 16) & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
747 *b->last++ = (u_char) ((len >> 8) & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
748 *b->last++ = (u_char) (len & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
749
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
750 } else {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
751 *b->last++ = (u_char) len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
752 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
753
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
754 b->last = ngx_cpymem(b->last, "CONTENT_TYPE",
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
755 sizeof("CONTENT_TYPE") - 1);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
756 b->last = ngx_cpymem(b->last, r->headers_in.content_type->value.data,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
757 len);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
758 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
759
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
760
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
761 if (flcf->params & NGX_HTTP_FASTCGI_REDIRECT_STATUS) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
762 *b->last++ = sizeof("REDIRECT_STATUS") - 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
763 *b->last++ = sizeof("200") - 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
764 b->last = ngx_cpymem(b->last, "REDIRECT_STATUS200",
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
765 sizeof("REDIRECT_STATUS200") - 1);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
766 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
767
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
768
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
769 if (flcf->params & NGX_HTTP_FASTCGI_REQUEST_URI) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
770 *b->last++ = sizeof("REQUEST_URI") - 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
771
30
e1ada20fc595 nginx 0.1.15
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
772 len = r->unparsed_uri.len;
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
773 if (len > 127) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
774 *b->last++ = (u_char) (((len >> 24) & 0x7f) | 0x80);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
775 *b->last++ = (u_char) ((len >> 16) & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
776 *b->last++ = (u_char) ((len >> 8) & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
777 *b->last++ = (u_char) (len & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
778
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
779 } else {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
780 *b->last++ = (u_char) len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
781 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
782
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
783 b->last = ngx_cpymem(b->last, "REQUEST_URI", sizeof("REQUEST_URI") - 1);
30
e1ada20fc595 nginx 0.1.15
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
784 b->last = ngx_cpymem(b->last, r->unparsed_uri.data, len);
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
785 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
786
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
787
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
788 if (flcf->params & NGX_HTTP_FASTCGI_SCRIPT_NAME) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
789 *b->last++ = sizeof("SCRIPT_NAME") - 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
790
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
791 len = r->uri.len + index;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
792 if (len > 127) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
793 *b->last++ = (u_char) (((len >> 24) & 0x7f) | 0x80);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
794 *b->last++ = (u_char) ((len >> 16) & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
795 *b->last++ = (u_char) ((len >> 8) & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
796 *b->last++ = (u_char) (len & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
797
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
798 } else {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
799 *b->last++ = (u_char) len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
800 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
801
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
802 b->last = ngx_cpymem(b->last, "SCRIPT_NAME", sizeof("SCRIPT_NAME") - 1);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
803 b->last = ngx_cpymem(b->last, r->uri.data, r->uri.len);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
804
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
805 if (index) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
806 b->last = ngx_cpymem(b->last, flcf->index.data, index);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
807 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
808 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
809
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
810
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
811 if (flcf->params & NGX_HTTP_FASTCGI_REMOTE_ADDR) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
812 *b->last++ = sizeof("REMOTE_ADDR") - 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
813 *b->last++ = (u_char) (r->connection->addr_text.len);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
814 b->last = ngx_cpymem(b->last, "REMOTE_ADDR", sizeof("REMOTE_ADDR") - 1);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
815 b->last = ngx_cpymem(b->last, r->connection->addr_text.data,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
816 r->connection->addr_text.len);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
817 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
818
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
819
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
820 if (flcf->params & NGX_HTTP_FASTCGI_SERVER_NAME) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
821 *b->last++ = sizeof("SERVER_NAME") - 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
822 *b->last++ = (u_char) r->server_name.len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
823 b->last = ngx_cpymem(b->last, "SERVER_NAME", sizeof("SERVER_NAME") - 1);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
824 b->last = ngx_cpymem(b->last, r->server_name.data, r->server_name.len);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
825 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
826
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
827
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
828 if (flcf->params & NGX_HTTP_FASTCGI_SERVER_PORT) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
829 *b->last++ = sizeof("SERVER_PORT") - 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
830 *b->last++ = (u_char) (r->port_text->len - 1);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
831 b->last = ngx_cpymem(b->last, "SERVER_PORT", sizeof("SERVER_PORT") - 1);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
832 b->last = ngx_cpymem(b->last, r->port_text->data + 1,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
833 r->port_text->len - 1);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
834 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
835
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
836
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
837 if (flcf->params & NGX_HTTP_FASTCGI_SERVER_ADDR) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
838 *b->last++ = sizeof("SERVER_ADDR") - 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
839 *b->last++ = (u_char) addr_len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
840 b->last = ngx_cpymem(b->last, "SERVER_ADDR", sizeof("SERVER_ADDR") - 1);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
841 b->last = ngx_cpymem(b->last, addr_text, addr_len);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
842 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
843
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
844
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
845 if (flcf->params & NGX_HTTP_FASTCGI_SERVER_PROTOCOL
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
846 && r->http_protocol.len)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
847 {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
848 *b->last++ = sizeof("SERVER_PROTOCOL") - 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
849
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
850 len = r->http_protocol.len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
851 if (len > 127) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
852 *b->last++ = (u_char) (((len >> 24) & 0x7f) | 0x80);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
853 *b->last++ = (u_char) ((len >> 16) & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
854 *b->last++ = (u_char) ((len >> 8) & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
855 *b->last++ = (u_char) (len & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
856
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
857 } else {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
858 *b->last++ = (u_char) len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
859 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
860
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
861 b->last = ngx_cpymem(b->last, "SERVER_PROTOCOL",
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
862 sizeof("SERVER_PROTOCOL") - 1);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
863 b->last = ngx_cpymem(b->last, r->http_protocol.data, len);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
864 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
865
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
866
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
867 if (flcf->params & NGX_HTTP_FASTCGI_SERVER_SOFTWARE) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
868 *b->last++ = sizeof("SERVER_SOFTWARE") - 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
869 *b->last++ = (u_char) (sizeof(NGINX_VER) - 1);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
870 b->last = ngx_cpymem(b->last, "SERVER_SOFTWARE",
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
871 sizeof("SERVER_SOFTWARE") - 1);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
872 b->last = ngx_cpymem(b->last, NGINX_VER, sizeof(NGINX_VER) - 1);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
873 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
874
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
875
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
876 if (flcf->params & NGX_HTTP_FASTCGI_GATEWAY_INTERFACE) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
877 *b->last++ = sizeof("GATEWAY_INTERFACE") - 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
878 *b->last++ = (u_char) (sizeof("CGI/1.1") - 1);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
879 b->last = ngx_cpymem(b->last, "GATEWAY_INTERFACE",
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
880 sizeof("GATEWAY_INTERFACE") - 1);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
881 b->last = ngx_cpymem(b->last, "CGI/1.1", sizeof("CGI/1.1") - 1);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
882 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
883
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
884
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
885 for (i = 0; i < flcf->vars.nelts; i++) {
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
886
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
887 if (!(value = ngx_http_get_variable(r, vindex[i]))) {
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
888 continue;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
889 }
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
890
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
891 if (value->text.len == 0) {
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
892 continue;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
893 }
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
894
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
895 *b->last++ = (u_char) var[vindex[i]].name.len;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
896 *b->last++ = (u_char) value->text.len;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
897
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
898 b->last = ngx_cpymem(b->last, var[vindex[i]].name.data,
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
899 var[vindex[i]].name.len);
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
900
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
901 b->last = ngx_cpymem(b->last, value->text.data, value->text.len);
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
902 }
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
903
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
904
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
905 part = &r->headers_in.headers.part;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
906 header = part->elts;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
907
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
908 for (i = 0; /* void */; i++) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
909
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
910 if (i >= part->nelts) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
911 if (part->next == NULL) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
912 break;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
913 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
914
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
915 part = part->next;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
916 header = part->elts;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
917 i = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
918 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
919
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
920 len = 5 + header[i].key.len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
921 if (len > 127) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
922 *b->last++ = (u_char) (((len >> 24) & 0x7f) | 0x80);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
923 *b->last++ = (u_char) ((len >> 16) & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
924 *b->last++ = (u_char) ((len >> 8) & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
925 *b->last++ = (u_char) (len & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
926
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
927 } else {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
928 *b->last++ = (u_char) len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
929 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
930
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
931 len = header[i].value.len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
932 if (len > 127) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
933 *b->last++ = (u_char) (((len >> 24) & 0x7f) | 0x80);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
934 *b->last++ = (u_char) ((len >> 16) & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
935 *b->last++ = (u_char) ((len >> 8) & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
936 *b->last++ = (u_char) (len & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
937
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
938 } else {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
939 *b->last++ = (u_char) len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
940 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
941
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
942 b->last = ngx_cpymem(b->last, "HTTP_", sizeof("HTTP_") - 1);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
943
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
944 for (n = 0; n < header[i].key.len; n++) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
945 ch = header[i].key.data[n];
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
946
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
947 if (ch >= 'a' && ch <= 'z') {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
948 ch &= ~0x20;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
949
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
950 } else if (ch == '-') {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
951 ch = '_';
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
952 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
953
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
954 *b->last++ = ch;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
955 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
956
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
957 b->last = ngx_cpymem(b->last, header[i].value.data,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
958 header[i].value.len);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
959 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
960
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
961
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
962 if (padding) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
963 ngx_memzero(b->last, padding);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
964 b->last += padding;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
965 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
966
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
967
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
968 h = (ngx_http_fastcgi_header_t *) b->last;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
969 b->last += sizeof(ngx_http_fastcgi_header_t);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
970
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
971 h->version = 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
972 h->type = NGX_HTTP_FASTCGI_PARAMS;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
973 h->request_id_hi = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
974 h->request_id_lo = 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
975 h->content_length_hi = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
976 h->content_length_lo = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
977 h->padding_length = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
978 h->reserved = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
979
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
980 h = (ngx_http_fastcgi_header_t *) b->last;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
981 b->last += sizeof(ngx_http_fastcgi_header_t);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
982
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
983 body = r->request_body->bufs;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
984 r->request_body->bufs = cl;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
985
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
986 #if (NGX_SUPPRESS_WARN)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
987 file_pos = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
988 pos = NULL;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
989 #endif
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
990
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
991 while (body) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
992
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
993 if (body->buf->in_file) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
994 file_pos = body->buf->file_pos;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
995
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
996 } else {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
997 pos = body->buf->pos;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
998 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
999
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1000 next = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1001
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1002 do {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1003 if (!(b = ngx_alloc_buf(r->pool))) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1004 return NGX_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1005 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1006
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1007 ngx_memcpy(b, body->buf, sizeof(ngx_buf_t));
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1008
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1009 if (body->buf->in_file) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1010 b->file_pos = file_pos;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1011 file_pos += 32 * 1024;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1012
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1013 if (file_pos > body->buf->file_last) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1014 file_pos = body->buf->file_last;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1015 next = 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1016 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1017
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1018 b->file_last = file_pos;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1019 len = (ngx_uint_t) (file_pos - b->file_pos);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1020
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1021 } else {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1022 b->pos = pos;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1023 pos += 32 * 1024;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1024
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1025 if (pos > body->buf->last) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1026 pos = body->buf->last;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1027 next = 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1028 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1029
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1030 b->last = pos;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1031 len = (ngx_uint_t) (pos - b->pos);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1032 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1033
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1034 padding = 8 - len % 8;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1035 padding = (padding == 8) ? 0 : padding;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1036
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1037 h->version = 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1038 h->type = NGX_HTTP_FASTCGI_STDIN;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1039 h->request_id_hi = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1040 h->request_id_lo = 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1041 h->content_length_hi = (u_char) ((len >> 8) & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1042 h->content_length_lo = (u_char) (len & 0xff);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1043 h->padding_length = (u_char) padding;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1044 h->reserved = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1045
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1046 if (!(cl->next = ngx_alloc_chain_link(r->pool))) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1047 return NGX_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1048 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1049
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1050 cl = cl->next;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1051 cl->buf = b;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1052
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1053 b = ngx_create_temp_buf(r->pool, sizeof(ngx_http_fastcgi_header_t)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1054 + padding);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1055 if (b == NULL) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1056 return NGX_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1057 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1058
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1059 if (padding) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1060 ngx_memzero(b->last, padding);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1061 b->last += padding;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1062 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1063
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1064 h = (ngx_http_fastcgi_header_t *) b->last;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1065 b->last += sizeof(ngx_http_fastcgi_header_t);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1066
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1067 if (!(cl->next = ngx_alloc_chain_link(r->pool))) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1068 return NGX_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1069 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1070
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1071 cl = cl->next;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1072 cl->buf = b;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1073
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1074 } while (!next);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1075
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1076 body = body->next;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1077 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1078
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1079 h->version = 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1080 h->type = NGX_HTTP_FASTCGI_STDIN;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1081 h->request_id_hi = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1082 h->request_id_lo = 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1083 h->content_length_hi = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1084 h->content_length_lo = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1085 h->padding_length = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1086 h->reserved = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1087
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1088 cl->next = NULL;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1089
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1090 return NGX_OK;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1091 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1092
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1093
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1094 static ngx_int_t ngx_http_fastcgi_reinit_request(ngx_http_request_t *r)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1095 {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1096 ngx_http_fastcgi_ctx_t *f;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1097
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1098 f = ngx_http_get_module_ctx(r, ngx_http_fastcgi_module);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1099
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1100 if (f == NULL) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1101 return NGX_OK;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1102 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1103
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1104 f->state = ngx_http_fastcgi_st_version;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1105
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1106 ngx_memzero(&f->upstream->headers_in,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1107 sizeof(ngx_http_fastcgi_headers_in_t));
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1108
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1109 if (f->upstream->headers_in.headers.part.elts) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1110 if (ngx_list_init(&f->upstream->headers_in.headers, r->pool, 5,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1111 sizeof(ngx_table_elt_t)) == NGX_ERROR)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1112 {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1113 return NGX_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1114 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1115 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1116
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1117 return NGX_OK;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1118 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1119
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1120
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1121 static ngx_int_t ngx_http_fastcgi_process_header(ngx_http_request_t *r)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1122 {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1123 u_char *start, *last;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1124 ngx_str_t *status_line;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1125 ngx_int_t rc, status;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1126 ngx_uint_t i;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1127 ngx_table_elt_t *h;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1128 ngx_http_upstream_t *u;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1129 ngx_http_fastcgi_ctx_t *f;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1130
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1131 f = ngx_http_get_module_ctx(r, ngx_http_fastcgi_module);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1132
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1133 if (f == NULL) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1134 if (!(f = ngx_pcalloc(r->pool, sizeof(ngx_http_fastcgi_ctx_t)))) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1135 return NGX_HTTP_INTERNAL_SERVER_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1136 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1137
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1138 ngx_http_set_ctx(r, f, ngx_http_fastcgi_module);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1139
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1140 f->upstream = ngx_pcalloc(r->pool, sizeof(ngx_http_fastcgi_upstream_t));
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1141 if (f->upstream == NULL) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1142 return NGX_HTTP_INTERNAL_SERVER_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1143 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1144
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1145 if (ngx_list_init(&f->upstream->headers_in.headers, r->pool, 5,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1146 sizeof(ngx_table_elt_t)) == NGX_ERROR)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1147 {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1148 return NGX_HTTP_INTERNAL_SERVER_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1149 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1150 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1151
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1152 u = r->upstream;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1153
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1154 for ( ;; ) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1155
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1156 if (f->state < ngx_http_fastcgi_st_data) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1157
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1158 f->pos = u->header_in.pos;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1159 f->last = u->header_in.last;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1160
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1161 rc = ngx_http_fastcgi_process_record(r, f);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1162
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1163 u->header_in.pos = f->pos;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1164 u->header_in.last = f->last;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1165
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1166 if (rc == NGX_AGAIN) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1167 return NGX_AGAIN;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1168 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1169
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1170 if (rc == NGX_ERROR) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1171 return NGX_HTTP_UPSTREAM_INVALID_HEADER;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1172 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1173
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1174 if (f->type != NGX_HTTP_FASTCGI_STDOUT) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1175 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1176 "upstream sent unexpected FastCGI record: %d",
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1177 f->type);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1178
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1179 return NGX_HTTP_UPSTREAM_INVALID_HEADER;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1180 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1181
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1182 if (f->length == 0) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1183 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1184 "upstream closed prematurely FastCGI stdout");
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1185
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1186 return NGX_HTTP_UPSTREAM_INVALID_HEADER;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1187 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1188 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1189
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1190 if (f->state == ngx_http_fastcgi_st_padding) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1191
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1192 if (u->header_in.pos + f->padding < u->header_in.last) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1193 f->state = ngx_http_fastcgi_st_version;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1194 u->header_in.pos += f->padding;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1195
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1196 continue;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1197 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1198
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1199 if (u->header_in.pos + f->padding == u->header_in.last) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1200 f->state = ngx_http_fastcgi_st_version;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1201 u->header_in.pos = u->header_in.last;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1202
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1203 return NGX_AGAIN;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1204 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1205
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1206 f->padding -= u->header_in.last - u->header_in.pos;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1207 u->header_in.pos = u->header_in.last;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1208
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1209 return NGX_AGAIN;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1210 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1211
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1212 /* f->state == ngx_http_fastcgi_st_data */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1213
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1214 start = u->header_in.pos;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1215
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1216 if (u->header_in.pos + f->length < u->header_in.last) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1217
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1218 /*
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1219 * set u->header_in.last to the end of the FastCGI record data
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1220 * for ngx_http_parse_header_line()
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1221 */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1222
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1223 last = u->header_in.last;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1224 u->header_in.last = u->header_in.pos + f->length;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1225
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1226 } else {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1227 last = NULL;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1228 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1229
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1230 for ( ;; ) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1231
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1232 rc = ngx_http_parse_header_line(r, &u->header_in);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1233
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1234 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1235 "http fastcgi parser: %d", rc);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1236
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1237 if (rc == NGX_AGAIN) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1238 break;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1239 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1240
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1241 if (rc == NGX_OK) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1242
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1243 /* a header line has been parsed successfully */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1244
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1245 if (!(h = ngx_list_push(&f->upstream->headers_in.headers))) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1246 return NGX_HTTP_INTERNAL_SERVER_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1247 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1248
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1249 h->key.len = r->header_name_end - r->header_name_start;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1250 h->value.len = r->header_end - r->header_start;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1251
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1252 h->key.data = ngx_palloc(r->pool,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1253 h->key.len + 1 + h->value.len + 1);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1254 if (h->key.data == NULL) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1255 return NGX_HTTP_INTERNAL_SERVER_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1256 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1257
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1258 h->value.data = h->key.data + h->key.len + 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1259
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1260 ngx_cpystrn(h->key.data, r->header_name_start, h->key.len + 1);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1261 ngx_cpystrn(h->value.data, r->header_start, h->value.len + 1);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1262
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1263 for (i = 0; ngx_http_fastcgi_headers_in[i].name.len != 0; i++) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1264 if (ngx_http_fastcgi_headers_in[i].name.len != h->key.len) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1265 continue;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1266 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1267
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1268 if (ngx_strcasecmp(ngx_http_fastcgi_headers_in[i].name.data,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1269 h->key.data) == 0)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1270 {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1271 *((ngx_table_elt_t **)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1272 ((char *) &f->upstream->headers_in
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1273 + ngx_http_fastcgi_headers_in[i].offset)) = h;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1274 break;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1275 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1276 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1277
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1278 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1279 "http fastcgi header: \"%V: %V\"",
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1280 &h->key, &h->value);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1281
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1282 continue;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1283 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1284
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1285 if (rc == NGX_HTTP_PARSE_HEADER_DONE) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1286
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1287 /* a whole header has been parsed successfully */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1288
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1289 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1290 "http fastcgi header done");
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1291
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1292 if (f->upstream->headers_in.status) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1293 status_line = &f->upstream->headers_in.status->value;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1294
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1295 status = ngx_atoi(status_line->data, 3);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1296
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1297 if (status == NGX_ERROR) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1298 return NGX_HTTP_INTERNAL_SERVER_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1299 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1300
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1301 r->headers_out.status = status;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1302 r->headers_out.status_line = *status_line;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1303
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1304 } else {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1305 r->headers_out.status = 200;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1306 r->headers_out.status_line.len = sizeof("200 OK") - 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1307 r->headers_out.status_line.data = (u_char *) "200 OK";
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1308 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1309
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1310 u->state->status = r->headers_out.status;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1311 #if 0
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1312 if (u->cachable) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1313 u->cachable = ngx_http_upstream_is_cachable(r);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1314 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1315 #endif
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1316
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1317 break;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1318 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1319
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1320 /* there was error while a header line parsing */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1321
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1322 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1323 ngx_http_upstream_header_errors[rc
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1324 - NGX_HTTP_PARSE_HEADER_ERROR]);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1325
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1326 return NGX_HTTP_UPSTREAM_INVALID_HEADER;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1327
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1328 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1329
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1330 if (last) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1331 u->header_in.last = last;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1332 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1333
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1334 f->length -= u->header_in.pos - start;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1335
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1336 if (rc == NGX_AGAIN) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1337 if (u->header_in.pos == u->header_in.last) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1338 return NGX_AGAIN;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1339 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1340
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1341 ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1342 "upstream split a header in FastCGI records");
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1343
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1344 return NGX_HTTP_UPSTREAM_INVALID_HEADER;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1345 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1346
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1347 if (f->length == 0) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1348 if (f->padding) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1349 f->state = ngx_http_fastcgi_st_padding;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1350 } else {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1351 f->state = ngx_http_fastcgi_st_version;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1352 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1353 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1354
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1355 return NGX_OK;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1356 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1357 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1358
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1359
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1360 static ngx_int_t ngx_http_fastcgi_send_header(ngx_http_request_t *r)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1361 {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1362 ngx_uint_t i;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1363 ngx_list_part_t *part;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1364 ngx_table_elt_t *ho, *h;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1365 ngx_http_fastcgi_ctx_t *f;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1366 ngx_http_fastcgi_headers_in_t *headers_in;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1367
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1368 f = ngx_http_get_module_ctx(r, ngx_http_fastcgi_module);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1369
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1370 headers_in = &f->upstream->headers_in;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1371 part = &headers_in->headers.part;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1372 h = part->elts;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1373
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1374 for (i = 0; /* void */; i++) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1375
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1376 if (i >= part->nelts) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1377 if (part->next == NULL) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1378 break;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1379 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1380
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1381 part = part->next;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1382 h = part->elts;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1383 i = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1384 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1385
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1386 /* ignore some headers */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1387
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1388 if (&h[i] == headers_in->status) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1389 continue;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1390 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1391
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1392
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1393 if (&h[i] == headers_in->x_powered_by
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1394 && !r->upstream->conf->x_powered_by)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1395 {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1396 continue;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1397 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1398
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1399
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1400 /* "Content-Type" is handled specially */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1401
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1402 if (&h[i] == headers_in->content_type) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1403 r->headers_out.content_type = &h[i];
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1404 r->headers_out.content_type->key.len = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1405 continue;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1406 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1407
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1408
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1409 /* copy some header pointers and set up r->headers_out */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1410
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1411 if (!(ho = ngx_list_push(&r->headers_out.headers))) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1412 return NGX_HTTP_INTERNAL_SERVER_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1413 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1414
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1415 *ho = h[i];
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1416
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1417 #if (NGX_HTTP_GZIP)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1418 if (&h[i] == headers_in->content_encoding) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1419 r->headers_out.content_encoding = ho;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1420 continue;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1421 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1422 #endif
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1423
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1424 if (&h[i] == headers_in->content_length) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1425 r->headers_out.content_length = ho;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1426 r->headers_out.content_length_n = ngx_atoi(ho->value.data,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1427 ho->value.len);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1428 continue;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1429 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1430 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1431
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1432 return ngx_http_send_header(r);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1433 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1434
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1435
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1436 static ngx_int_t ngx_http_fastcgi_input_filter(ngx_event_pipe_t *p,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1437 ngx_buf_t *buf)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1438 {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1439 ngx_int_t rc;
32
da8c190bdaba nginx 0.1.16
Igor Sysoev <http://sysoev.ru>
parents: 30
diff changeset
1440 ngx_buf_t *b, **prev;
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1441 ngx_str_t line;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1442 ngx_chain_t *cl;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1443 ngx_http_request_t *r;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1444 ngx_http_fastcgi_ctx_t *f;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1445
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1446 if (buf->pos == buf->last) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1447 return NGX_OK;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1448 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1449
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1450 r = p->input_ctx;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1451 f = ngx_http_get_module_ctx(r, ngx_http_fastcgi_module);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1452
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1453 b = NULL;
32
da8c190bdaba nginx 0.1.16
Igor Sysoev <http://sysoev.ru>
parents: 30
diff changeset
1454 prev = &buf->shadow;
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1455
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1456 f->pos = buf->pos;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1457 f->last = buf->last;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1458
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1459 for ( ;; ) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1460 if (f->state < ngx_http_fastcgi_st_data) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1461
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1462 rc = ngx_http_fastcgi_process_record(r, f);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1463
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1464 if (rc == NGX_AGAIN) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1465 break;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1466 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1467
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1468 if (rc == NGX_ERROR) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1469 return NGX_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1470 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1471
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1472 if (f->type == NGX_HTTP_FASTCGI_STDOUT && f->length == 0) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1473 f->state = ngx_http_fastcgi_st_version;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1474 p->upstream_done = 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1475
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1476 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, p->log, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1477 "http fastcgi closed stdout");
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1478
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1479 continue;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1480 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1481
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1482 if (f->type == NGX_HTTP_FASTCGI_END_REQUEST) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1483 f->state = ngx_http_fastcgi_st_version;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1484 p->upstream_done = 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1485
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1486 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, p->log, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1487 "http fastcgi sent end request");
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1488
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1489 break;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1490 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1491 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1492
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1493
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1494 if (f->state == ngx_http_fastcgi_st_padding) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1495
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1496 if (f->pos + f->padding < f->last) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1497 f->state = ngx_http_fastcgi_st_version;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1498 f->pos += f->padding;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1499
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1500 continue;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1501 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1502
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1503 if (f->pos + f->padding == f->last) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1504 f->state = ngx_http_fastcgi_st_version;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1505
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1506 break;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1507 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1508
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1509 f->padding -= f->last - f->pos;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1510
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1511 break;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1512 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1513
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1514
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1515 /* f->state == ngx_http_fastcgi_st_data */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1516
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1517 if (f->type == NGX_HTTP_FASTCGI_STDERR) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1518
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1519 if (f->length) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1520 line.data = f->pos;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1521
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1522 if (f->pos + f->length <= f->last) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1523 line.len = f->length;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1524 f->pos += f->length;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1525
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1526 } else {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1527 line.len = f->last - f->pos;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1528 f->length -= f->last - f->pos;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1529 f->pos = f->last;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1530 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1531
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1532 /*
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1533 * TODO: copy split stderr output into buffer,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1534 * clean it up
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1535 */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1536
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1537 ngx_log_error(NGX_LOG_ERR, p->log, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1538 "FastCGI stderr: %V", &line);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1539
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1540 if (f->pos == f->last) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1541 break;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1542 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1543 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1544
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1545 f->state = ngx_http_fastcgi_st_version;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1546
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1547 continue;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1548 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1549
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1550
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1551 /* f->type == NGX_HTTP_FASTCGI_STDOUT */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1552
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1553 if (p->free) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1554 b = p->free->buf;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1555 p->free = p->free->next;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1556
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1557 } else {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1558 if (!(b = ngx_alloc_buf(p->pool))) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1559 return NGX_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1560 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1561 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1562
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1563 ngx_memzero(b, sizeof(ngx_buf_t));
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1564
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1565 b->pos = f->pos;
32
da8c190bdaba nginx 0.1.16
Igor Sysoev <http://sysoev.ru>
parents: 30
diff changeset
1566 b->start = buf->start;
da8c190bdaba nginx 0.1.16
Igor Sysoev <http://sysoev.ru>
parents: 30
diff changeset
1567 b->end = buf->end;
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1568 b->tag = p->tag;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1569 b->temporary = 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1570 b->recycled = 1;
32
da8c190bdaba nginx 0.1.16
Igor Sysoev <http://sysoev.ru>
parents: 30
diff changeset
1571
da8c190bdaba nginx 0.1.16
Igor Sysoev <http://sysoev.ru>
parents: 30
diff changeset
1572 *prev = b;
da8c190bdaba nginx 0.1.16
Igor Sysoev <http://sysoev.ru>
parents: 30
diff changeset
1573 prev = &b->shadow;
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1574
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1575 if (!(cl = ngx_alloc_chain_link(p->pool))) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1576 return NGX_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1577 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1578
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1579 cl->buf = b;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1580 cl->next = NULL;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1581
32
da8c190bdaba nginx 0.1.16
Igor Sysoev <http://sysoev.ru>
parents: 30
diff changeset
1582 /* STUB */ b->num = buf->num;
da8c190bdaba nginx 0.1.16
Igor Sysoev <http://sysoev.ru>
parents: 30
diff changeset
1583
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1584 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, p->log, 0, "input buf #%d", b->num);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1585
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1586 ngx_chain_add_link(p->in, p->last_in, cl);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1587
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1588 if (f->pos + f->length < f->last) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1589
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1590 if (f->padding) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1591 f->state = ngx_http_fastcgi_st_padding;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1592 } else {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1593 f->state = ngx_http_fastcgi_st_version;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1594 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1595
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1596 f->pos += f->length;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1597 b->last = f->pos;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1598
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1599 continue;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1600 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1601
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1602 if (f->pos + f->length == f->last) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1603
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1604 if (f->padding) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1605 f->state = ngx_http_fastcgi_st_padding;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1606 } else {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1607 f->state = ngx_http_fastcgi_st_version;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1608 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1609
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1610 b->last = f->last;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1611
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1612 break;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1613 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1614
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1615 f->length -= f->last - f->pos;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1616
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1617 b->last = f->last;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1618
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1619 break;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1620
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1621 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1622
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1623 if (b) {
32
da8c190bdaba nginx 0.1.16
Igor Sysoev <http://sysoev.ru>
parents: 30
diff changeset
1624 b->shadow = buf;
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1625 b->last_shadow = 1;
32
da8c190bdaba nginx 0.1.16
Igor Sysoev <http://sysoev.ru>
parents: 30
diff changeset
1626
da8c190bdaba nginx 0.1.16
Igor Sysoev <http://sysoev.ru>
parents: 30
diff changeset
1627 return NGX_OK;
da8c190bdaba nginx 0.1.16
Igor Sysoev <http://sysoev.ru>
parents: 30
diff changeset
1628 }
da8c190bdaba nginx 0.1.16
Igor Sysoev <http://sysoev.ru>
parents: 30
diff changeset
1629
da8c190bdaba nginx 0.1.16
Igor Sysoev <http://sysoev.ru>
parents: 30
diff changeset
1630 /* there is no data record in the buf, add it to free chain */
da8c190bdaba nginx 0.1.16
Igor Sysoev <http://sysoev.ru>
parents: 30
diff changeset
1631
da8c190bdaba nginx 0.1.16
Igor Sysoev <http://sysoev.ru>
parents: 30
diff changeset
1632 if (ngx_event_pipe_add_free_buf(p, buf) != NGX_OK) {
da8c190bdaba nginx 0.1.16
Igor Sysoev <http://sysoev.ru>
parents: 30
diff changeset
1633 return NGX_ERROR;
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1634 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1635
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1636 return NGX_OK;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1637 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1638
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1639
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1640 static ngx_int_t ngx_http_fastcgi_process_record(ngx_http_request_t *r,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1641 ngx_http_fastcgi_ctx_t *f)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1642 {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1643 u_char ch, *p;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1644 ngx_http_upstream_t *u;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1645 ngx_http_fastcgi_state_e state;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1646
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1647 u = r->upstream;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1648
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1649 state = f->state;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1650
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1651 for (p = f->pos; p < f->last; p++) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1652
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1653 ch = *p;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1654
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1655 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1656 "http fastcgi record byte: %02Xd", ch);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1657
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1658 switch (state) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1659
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1660 case ngx_http_fastcgi_st_version:
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1661 if (ch != 1) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1662 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1663 "upstream sent unsupported FastCGI "
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1664 "protocol version: %d", ch);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1665 return NGX_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1666 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1667 state = ngx_http_fastcgi_st_type;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1668 break;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1669
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1670 case ngx_http_fastcgi_st_type:
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1671 switch (ch) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1672 case NGX_HTTP_FASTCGI_STDOUT:
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1673 case NGX_HTTP_FASTCGI_STDERR:
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1674 case NGX_HTTP_FASTCGI_END_REQUEST:
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1675 f->type = (ngx_uint_t) ch;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1676 break;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1677 default:
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1678 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1679 "upstream sent invalid FastCGI "
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1680 "record type: %d", ch);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1681 return NGX_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1682
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1683 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1684 state = ngx_http_fastcgi_st_request_id_hi;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1685 break;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1686
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1687 /* we support the single request per connection */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1688
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1689 case ngx_http_fastcgi_st_request_id_hi:
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1690 if (ch != 0) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1691 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1692 "upstream sent unexpected FastCGI "
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1693 "request id high byte: %d", ch);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1694 return NGX_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1695 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1696 state = ngx_http_fastcgi_st_request_id_lo;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1697 break;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1698
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1699 case ngx_http_fastcgi_st_request_id_lo:
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1700 if (ch != 1) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1701 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1702 "upstream sent unexpected FastCGI "
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1703 "request id low byte: %d", ch);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1704 return NGX_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1705 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1706 state = ngx_http_fastcgi_st_content_length_hi;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1707 break;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1708
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1709 case ngx_http_fastcgi_st_content_length_hi:
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1710 f->length = ch << 8;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1711 state = ngx_http_fastcgi_st_content_length_lo;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1712 break;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1713
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1714 case ngx_http_fastcgi_st_content_length_lo:
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1715 f->length |= (size_t) ch;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1716 state = ngx_http_fastcgi_st_padding_length;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1717 break;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1718
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1719 case ngx_http_fastcgi_st_padding_length:
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1720 f->padding = (size_t) ch;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1721 state = ngx_http_fastcgi_st_reserved;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1722 break;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1723
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1724 case ngx_http_fastcgi_st_reserved:
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1725 state = ngx_http_fastcgi_st_data;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1726
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1727 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1728 "http fastcgi record length: %z", f->length);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1729
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1730 f->pos = p + 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1731 f->state = state;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1732
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1733 return NGX_OK;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1734
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1735 /* suppress warning */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1736 case ngx_http_fastcgi_st_data:
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1737 case ngx_http_fastcgi_st_padding:
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1738 break;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1739 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1740 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1741
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1742 f->pos = p + 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1743 f->state = state;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1744
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1745 return NGX_AGAIN;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1746 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1747
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1748
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1749 static void ngx_http_fastcgi_abort_request(ngx_http_request_t *r)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1750 {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1751 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1752 "abort http fastcgi request");
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1753
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1754 return;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1755 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1756
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1757
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1758 static void ngx_http_fastcgi_finalize_request(ngx_http_request_t *r,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1759 ngx_int_t rc)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1760 {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1761 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1762 "finalize http fastcgi request");
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1763
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1764 return;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1765 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1766
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1767
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1768 static char *ngx_http_fastcgi_pass(ngx_conf_t *cf, ngx_command_t *cmd,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1769 void *conf)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1770 {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1771 ngx_http_fastcgi_loc_conf_t *lcf = conf;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1772
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1773 ngx_str_t *value;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1774 ngx_inet_upstream_t inet_upstream;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1775 ngx_http_core_loc_conf_t *clcf;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1776 #if (NGX_HAVE_UNIX_DOMAIN)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1777 ngx_unix_domain_upstream_t unix_upstream;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1778 #endif
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1779
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1780 value = cf->args->elts;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1781
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1782 if (ngx_strncasecmp(value[1].data, "unix:", 5) == 0) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1783
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1784 #if (NGX_HAVE_UNIX_DOMAIN)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1785
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1786 ngx_memzero(&unix_upstream, sizeof(ngx_unix_domain_upstream_t));
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1787
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1788 unix_upstream.name = value[1];
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1789 unix_upstream.url = value[1];
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1790
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1791 if (!(lcf->peers = ngx_unix_upstream_parse(cf, &unix_upstream))) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1792 return NGX_CONF_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1793 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1794
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1795 #else
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1796 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1797 "the unix domain sockets are not supported "
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1798 "on this platform");
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1799 return NGX_CONF_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1800
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1801 #endif
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1802
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1803 } else {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1804 ngx_memzero(&inet_upstream, sizeof(ngx_inet_upstream_t));
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1805
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1806 inet_upstream.name = value[1];
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1807 inet_upstream.url = value[1];
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1808
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1809 if (!(lcf->peers = ngx_inet_upstream_parse(cf, &inet_upstream))) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1810 return NGX_CONF_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1811 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1812 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1813
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1814 clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1815
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1816 clcf->handler = ngx_http_fastcgi_handler;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1817
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1818 #if (NGX_PCRE)
30
e1ada20fc595 nginx 0.1.15
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
1819 lcf->location = clcf->regex ? &ngx_http_fastcgi_uri: &clcf->name;
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1820 #else
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1821 lcf->location = &clcf->name;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1822 #endif
30
e1ada20fc595 nginx 0.1.15
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
1823
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1824 if (clcf->name.data[clcf->name.len - 1] == '/') {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1825 clcf->auto_redirect = 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1826 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1827
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1828 return NGX_CONF_OK;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1829 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1830
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1831
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1832 static char *ngx_http_fastcgi_set_var(ngx_conf_t *cf, ngx_command_t *cmd,
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1833 void *conf)
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1834 {
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1835 ngx_http_fastcgi_loc_conf_t *lcf = conf;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1836
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1837 ngx_uint_t i, *index;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1838 ngx_str_t *value;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1839 ngx_http_variable_t *var;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1840 ngx_http_core_main_conf_t *cmcf;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1841
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1842 if (lcf->vars.elts == NULL) {
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1843 if (ngx_array_init(&lcf->vars, cf->pool, 4,
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1844 sizeof(ngx_http_variable_t *)) == NGX_ERROR)
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1845 {
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1846 return NGX_CONF_ERROR;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1847 }
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1848 }
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1849
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1850 cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1851
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1852 value = cf->args->elts;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1853
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1854 var = cmcf->variables.elts;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1855 for (i = 0; i < cmcf->variables.nelts; i++) {
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1856 if (ngx_strcasecmp(var[i].name.data, value[1].data) == 0) {
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1857
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1858 if (!(index = ngx_array_push(&lcf->vars))) {
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1859 return NGX_CONF_ERROR;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1860 }
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1861
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1862 *index = var[i].index;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1863 return NGX_CONF_OK;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1864 }
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1865 }
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1866
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1867 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1868 "unknown variable name \"%V\"", &value[1]);
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1869 return NGX_CONF_ERROR;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1870 }
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1871
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 32
diff changeset
1872
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1873 static char *ngx_http_fastcgi_lowat_check(ngx_conf_t *cf, void *post,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1874 void *data)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1875 {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1876 #if (NGX_FREEBSD)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1877 ssize_t *np = data;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1878
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1879 if (*np >= ngx_freebsd_net_inet_tcp_sendspace) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1880 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1881 "\"fastcgi_send_lowat\" must be less than %d "
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1882 "(sysctl net.inet.tcp.sendspace)",
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1883 ngx_freebsd_net_inet_tcp_sendspace);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1884
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1885 return NGX_CONF_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1886 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1887
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1888 #elif !(NGX_HAVE_SO_SNDLOWAT)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1889 ssize_t *np = data;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1890
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1891 ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1892 "\"fastcgi_send_lowat\" is not supported, ignored");
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1893
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1894 *np = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1895
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1896 #endif
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1897
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1898 return NGX_CONF_OK;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1899 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1900
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1901
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1902 static void *ngx_http_fastcgi_create_loc_conf(ngx_conf_t *cf)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1903 {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1904 ngx_http_fastcgi_loc_conf_t *conf;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1905
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1906 if (!(conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_fastcgi_loc_conf_t)))) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1907 return NGX_CONF_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1908 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1909
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1910 /*
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1911 * set by ngx_pcalloc():
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1912 *
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1913 * conf->upstream.bufs.num = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1914 * conf->upstream.path = NULL;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1915 * conf->upstream.next_upstream = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1916 * conf->upstream.temp_path = NULL;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1917 * conf->params = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1918 * conf->root.len = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1919 * conf->root.data = NULL;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1920 * conf->index.len = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1921 * conf->index.data = NULL;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1922 * conf->location = NULL;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1923 */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1924
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1925 conf->upstream.connect_timeout = NGX_CONF_UNSET_MSEC;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1926 conf->upstream.send_timeout = NGX_CONF_UNSET_MSEC;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1927 conf->upstream.send_lowat = NGX_CONF_UNSET_SIZE;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1928
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1929 conf->upstream.header_buffer_size = NGX_CONF_UNSET_SIZE;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1930 conf->upstream.read_timeout = NGX_CONF_UNSET_MSEC;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1931 conf->upstream.busy_buffers_size = NGX_CONF_UNSET_SIZE;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1932
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1933 conf->upstream.max_temp_file_size = NGX_CONF_UNSET_SIZE;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1934 conf->upstream.temp_file_write_size = NGX_CONF_UNSET_SIZE;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1935
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1936 conf->upstream.x_powered_by = NGX_CONF_UNSET;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1937
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1938 /* "fastcgi_cyclic_temp_file" is disabled */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1939 conf->upstream.cyclic_temp_file = 0;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1940
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1941 return conf;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1942 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1943
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1944
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1945 static char *ngx_http_fastcgi_merge_loc_conf(ngx_conf_t *cf,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1946 void *parent, void *child)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1947 {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1948 ngx_http_fastcgi_loc_conf_t *prev = parent;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1949 ngx_http_fastcgi_loc_conf_t *conf = child;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1950
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1951 size_t size;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1952
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1953 ngx_conf_merge_msec_value(conf->upstream.connect_timeout,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1954 prev->upstream.connect_timeout, 60000);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1955 ngx_conf_merge_msec_value(conf->upstream.send_timeout,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1956 prev->upstream.send_timeout, 60000);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1957 ngx_conf_merge_size_value(conf->upstream.send_lowat,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1958 prev->upstream.send_lowat, 0);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1959
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1960 ngx_conf_merge_msec_value(conf->upstream.read_timeout,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1961 prev->upstream.read_timeout, 60000);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1962
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1963 ngx_conf_merge_msec_value(conf->upstream.x_powered_by,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1964 prev->upstream.x_powered_by, 1);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1965
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1966
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1967 ngx_conf_merge_size_value(conf->upstream.header_buffer_size,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1968 prev->upstream.header_buffer_size,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1969 (size_t) ngx_pagesize);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1970
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1971 ngx_conf_merge_bufs_value(conf->upstream.bufs, prev->upstream.bufs,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1972 8, ngx_pagesize);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1973
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1974 if (conf->upstream.bufs.num < 2) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1975 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1976 "there must be at least 2 \"fastcgi_buffers\"");
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1977 return NGX_CONF_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1978 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1979
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1980
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1981 size = conf->upstream.header_buffer_size;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1982 if (size < conf->upstream.bufs.size) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1983 size = conf->upstream.bufs.size;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1984 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1985
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1986
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1987 ngx_conf_merge_size_value(conf->upstream.busy_buffers_size,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1988 prev->upstream.busy_buffers_size,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1989 NGX_CONF_UNSET_SIZE);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1990
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1991 if (conf->upstream.busy_buffers_size == NGX_CONF_UNSET_SIZE) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1992 conf->upstream.busy_buffers_size = 2 * size;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1993
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1994 } else if (conf->upstream.busy_buffers_size < size) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1995 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1996 "\"fastcgi_busy_buffers_size\" must be equal or bigger than "
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1997 "maximum of the value of \"fastcgi_header_buffer_size\" and "
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1998 "one of the \"fastcgi_buffers\"");
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1999
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2000 return NGX_CONF_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2001
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2002 } else if (conf->upstream.busy_buffers_size
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2003 > (conf->upstream.bufs.num - 1) * conf->upstream.bufs.size)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2004 {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2005 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2006 "\"fastcgi_busy_buffers_size\" must be less than "
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2007 "the size of all \"fastcgi_buffers\" minus one buffer");
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2008
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2009 return NGX_CONF_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2010 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2011
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2012
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2013 ngx_conf_merge_size_value(conf->upstream.temp_file_write_size,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2014 prev->upstream.temp_file_write_size,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2015 NGX_CONF_UNSET_SIZE);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2016
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2017 if (conf->upstream.temp_file_write_size == NGX_CONF_UNSET_SIZE) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2018 conf->upstream.temp_file_write_size = 2 * size;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2019
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2020 } else if (conf->upstream.temp_file_write_size < size) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2021 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2022 "\"fastcgi_temp_file_write_size\" must be equal or bigger than "
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2023 "maximum of the value of \"fastcgi_header_buffer_size\" and "
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2024 "one of the \"fastcgi_buffers\"");
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2025
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2026 return NGX_CONF_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2027 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2028
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2029
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2030 ngx_conf_merge_size_value(conf->upstream.max_temp_file_size,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2031 prev->upstream.max_temp_file_size,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2032 NGX_CONF_UNSET_SIZE);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2033
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2034 if (conf->upstream.max_temp_file_size == NGX_CONF_UNSET_SIZE) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2035
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2036 conf->upstream.max_temp_file_size = 1024 * 1024 * 1024;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2037
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2038 } else if (conf->upstream.max_temp_file_size != 0
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2039 && conf->upstream.max_temp_file_size < size)
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2040 {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2041 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2042 "\"fastcgi_max_temp_file_size\" must be equal to zero to disable "
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2043 "the temporary files usage or must be equal or bigger than "
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2044 "maximum of the value of \"fastcgi_header_buffer_size\" and "
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2045 "one of the \"fastcgi_buffers\"");
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2046
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2047 return NGX_CONF_ERROR;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2048 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2049
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2050
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2051 ngx_conf_merge_bitmask_value(conf->upstream.next_upstream,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2052 prev->upstream.next_upstream,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2053 (NGX_CONF_BITMASK_SET
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2054 |NGX_HTTP_UPSTREAM_FT_ERROR
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2055 |NGX_HTTP_UPSTREAM_FT_TIMEOUT));
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2056
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2057 ngx_conf_merge_path_value(conf->upstream.temp_path,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2058 prev->upstream.temp_path,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2059 NGX_HTTP_FASTCGI_TEMP_PATH, 1, 2, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2060 ngx_garbage_collector_temp_handler, cf);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2061
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2062
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2063 ngx_conf_merge_bitmask_value(conf->params, prev->params,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2064 (NGX_CONF_BITMASK_SET
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2065 |NGX_HTTP_FASTCGI_REMOTE_ADDR
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2066 |NGX_HTTP_FASTCGI_REMOTE_USER
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2067 |NGX_HTTP_FASTCGI_SERVER_NAME
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2068 |NGX_HTTP_FASTCGI_SERVER_PORT
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2069 |NGX_HTTP_FASTCGI_SCRIPT_NAME
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2070 |NGX_HTTP_FASTCGI_AUTH_TYPE
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2071 |NGX_HTTP_FASTCGI_REQUEST_URI
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2072 |NGX_HTTP_FASTCGI_REDIRECT_STATUS));
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2073
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2074 ngx_conf_merge_str_value(conf->root, prev->root, "");
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2075
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2076 if (conf->root.len && conf->root.data[conf->root.len - 1] == '/') {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2077 conf->root.len--;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2078 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2079
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2080 ngx_conf_merge_str_value(conf->index, prev->index, "");
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2081
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2082 return NGX_CONF_OK;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2083 }