annotate src/http/modules/ngx_http_fastcgi_module.c @ 6795:1a917932db96

Cache: prefix-based temporary files. On Linux, the rename syscall can be slow due to a global file system lock, acquired for the entire rename operation, unless both old and new files are in the same directory. To address this temporary files are now created in the same directory as the expected resulting cache file when using the "use_temp_path=off" parameter. This change mostly reverts 99639bfdfa2a and 3281de8142f5, restoring the behaviour as of a9138c35120d (with minor changes).
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 03 Nov 2016 17:10:29 +0300
parents 0fba3ed4e7eb
children 1aeaae6e9446
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2 /*
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 4401
diff changeset
4 * Copyright (C) Nginx, Inc.
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5 */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_config.h>
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_core.h>
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10 #include <ngx_http.h>
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13 typedef struct {
5951
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
14 ngx_array_t caches; /* ngx_http_file_cache_t * */
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
15 } ngx_http_fastcgi_main_conf_t;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
16
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
17
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
18 typedef struct {
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
19 ngx_array_t *flushes;
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
20 ngx_array_t *lengths;
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
21 ngx_array_t *values;
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
22 ngx_uint_t number;
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
23 ngx_hash_t hash;
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
24 } ngx_http_fastcgi_params_t;
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
25
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
26
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
27 typedef struct {
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
28 ngx_http_upstream_conf_t upstream;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
29
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
30 ngx_str_t index;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
31
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
32 ngx_http_fastcgi_params_t params;
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
33 #if (NGX_HTTP_CACHE)
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
34 ngx_http_fastcgi_params_t params_cache;
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
35 #endif
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
36
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
37 ngx_array_t *params_source;
1228
863c3490103e fastcgi_catch_stderr
Igor Sysoev <igor@sysoev.ru>
parents: 1142
diff changeset
38 ngx_array_t *catch_stderr;
2390
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
39
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
40 ngx_array_t *fastcgi_lengths;
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
41 ngx_array_t *fastcgi_values;
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
42
4122
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
43 ngx_flag_t keep_conn;
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
44
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
45 #if (NGX_HTTP_CACHE)
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
46 ngx_http_complex_value_t cache_key;
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
47 #endif
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
48
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
49 #if (NGX_PCRE)
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
50 ngx_regex_t *split_regex;
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
51 ngx_str_t split_name;
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
52 #endif
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
53 } ngx_http_fastcgi_loc_conf_t;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
54
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
55
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
56 typedef enum {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
57 ngx_http_fastcgi_st_version = 0,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
58 ngx_http_fastcgi_st_type,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
59 ngx_http_fastcgi_st_request_id_hi,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
60 ngx_http_fastcgi_st_request_id_lo,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
61 ngx_http_fastcgi_st_content_length_hi,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
62 ngx_http_fastcgi_st_content_length_lo,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
63 ngx_http_fastcgi_st_padding_length,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
64 ngx_http_fastcgi_st_reserved,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
65 ngx_http_fastcgi_st_data,
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
66 ngx_http_fastcgi_st_padding
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
67 } ngx_http_fastcgi_state_e;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
68
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
69
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
70 typedef struct {
1276
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
71 u_char *start;
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
72 u_char *end;
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
73 } ngx_http_fastcgi_split_part_t;
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
74
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
75
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
76 typedef struct {
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
77 ngx_http_fastcgi_state_e state;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
78 u_char *pos;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
79 u_char *last;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
80 ngx_uint_t type;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
81 size_t length;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
82 size_t padding;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
83
6052
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
84 ngx_chain_t *free;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
85 ngx_chain_t *busy;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
86
3460
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
87 unsigned fastcgi_stdout:1;
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
88 unsigned large_stderr:1;
6052
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
89 unsigned header_sent:1;
1276
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
90
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
91 ngx_array_t *split_parts;
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
92
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
93 ngx_str_t script_name;
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
94 ngx_str_t path_info;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
95 } ngx_http_fastcgi_ctx_t;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
96
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
97
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
98 #define NGX_HTTP_FASTCGI_RESPONDER 1
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
99
4122
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
100 #define NGX_HTTP_FASTCGI_KEEP_CONN 1
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
101
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
102 #define NGX_HTTP_FASTCGI_BEGIN_REQUEST 1
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
103 #define NGX_HTTP_FASTCGI_ABORT_REQUEST 2
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
104 #define NGX_HTTP_FASTCGI_END_REQUEST 3
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
105 #define NGX_HTTP_FASTCGI_PARAMS 4
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
106 #define NGX_HTTP_FASTCGI_STDIN 5
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
107 #define NGX_HTTP_FASTCGI_STDOUT 6
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
108 #define NGX_HTTP_FASTCGI_STDERR 7
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
109 #define NGX_HTTP_FASTCGI_DATA 8
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
110
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
111
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
112 typedef struct {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
113 u_char version;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
114 u_char type;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
115 u_char request_id_hi;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
116 u_char request_id_lo;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
117 u_char content_length_hi;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
118 u_char content_length_lo;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
119 u_char padding_length;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
120 u_char reserved;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
121 } ngx_http_fastcgi_header_t;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
122
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
123
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
124 typedef struct {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
125 u_char role_hi;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
126 u_char role_lo;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
127 u_char flags;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
128 u_char reserved[5];
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
129 } ngx_http_fastcgi_begin_request_t;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
130
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
131
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
132 typedef struct {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
133 u_char version;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
134 u_char type;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
135 u_char request_id_hi;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
136 u_char request_id_lo;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
137 } ngx_http_fastcgi_header_small_t;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
138
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
139
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
140 typedef struct {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
141 ngx_http_fastcgi_header_t h0;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
142 ngx_http_fastcgi_begin_request_t br;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
143 ngx_http_fastcgi_header_small_t h1;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
144 } ngx_http_fastcgi_request_start_t;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
145
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
146
2390
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
147 static ngx_int_t ngx_http_fastcgi_eval(ngx_http_request_t *r,
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
148 ngx_http_fastcgi_loc_conf_t *flcf);
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
149 #if (NGX_HTTP_CACHE)
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
150 static ngx_int_t ngx_http_fastcgi_create_key(ngx_http_request_t *r);
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
151 #endif
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
152 static ngx_int_t ngx_http_fastcgi_create_request(ngx_http_request_t *r);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
153 static ngx_int_t ngx_http_fastcgi_reinit_request(ngx_http_request_t *r);
6052
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
154 static ngx_int_t ngx_http_fastcgi_body_output_filter(void *data,
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
155 ngx_chain_t *in);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
156 static ngx_int_t ngx_http_fastcgi_process_header(ngx_http_request_t *r);
4122
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
157 static ngx_int_t ngx_http_fastcgi_input_filter_init(void *data);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
158 static ngx_int_t ngx_http_fastcgi_input_filter(ngx_event_pipe_t *p,
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
159 ngx_buf_t *buf);
5394
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
160 static ngx_int_t ngx_http_fastcgi_non_buffered_filter(void *data,
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
161 ssize_t bytes);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
162 static ngx_int_t ngx_http_fastcgi_process_record(ngx_http_request_t *r,
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
163 ngx_http_fastcgi_ctx_t *f);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
164 static void ngx_http_fastcgi_abort_request(ngx_http_request_t *r);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
165 static void ngx_http_fastcgi_finalize_request(ngx_http_request_t *r,
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
166 ngx_int_t rc);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
167
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
168 static ngx_int_t ngx_http_fastcgi_add_variables(ngx_conf_t *cf);
5951
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
169 static void *ngx_http_fastcgi_create_main_conf(ngx_conf_t *cf);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
170 static void *ngx_http_fastcgi_create_loc_conf(ngx_conf_t *cf);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
171 static char *ngx_http_fastcgi_merge_loc_conf(ngx_conf_t *cf,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
172 void *parent, void *child);
5907
195561ef367f Upstream: moved header initializations to separate functions.
Roman Arutyunyan <arut@nginx.com>
parents: 5905
diff changeset
173 static ngx_int_t ngx_http_fastcgi_init_params(ngx_conf_t *cf,
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
174 ngx_http_fastcgi_loc_conf_t *conf, ngx_http_fastcgi_params_t *params,
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
175 ngx_keyval_t *default_params);
4277
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
176
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
177 static ngx_int_t ngx_http_fastcgi_script_name_variable(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
178 ngx_http_variable_value_t *v, uintptr_t data);
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
179 static ngx_int_t ngx_http_fastcgi_path_info_variable(ngx_http_request_t *r,
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
180 ngx_http_variable_value_t *v, uintptr_t data);
2467
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
181 static ngx_http_fastcgi_ctx_t *ngx_http_fastcgi_split(ngx_http_request_t *r,
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
182 ngx_http_fastcgi_loc_conf_t *flcf);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
183
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
184 static char *ngx_http_fastcgi_pass(ngx_conf_t *cf, ngx_command_t *cmd,
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
185 void *conf);
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
186 static char *ngx_http_fastcgi_split_path_info(ngx_conf_t *cf,
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
187 ngx_command_t *cmd, void *conf);
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
188 static char *ngx_http_fastcgi_store(ngx_conf_t *cf, ngx_command_t *cmd,
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
189 void *conf);
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
190 #if (NGX_HTTP_CACHE)
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
191 static char *ngx_http_fastcgi_cache(ngx_conf_t *cf, ngx_command_t *cmd,
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
192 void *conf);
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
193 static char *ngx_http_fastcgi_cache_key(ngx_conf_t *cf, ngx_command_t *cmd,
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
194 void *conf);
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
195 #endif
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
196
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
197 static char *ngx_http_fastcgi_lowat_check(ngx_conf_t *cf, void *post,
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
198 void *data);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
199
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
200
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
201 static ngx_conf_post_t ngx_http_fastcgi_lowat_post =
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
202 { ngx_http_fastcgi_lowat_check };
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
203
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
204
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
205 static ngx_conf_bitmask_t ngx_http_fastcgi_next_upstream_masks[] = {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
206 { ngx_string("error"), NGX_HTTP_UPSTREAM_FT_ERROR },
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
207 { ngx_string("timeout"), NGX_HTTP_UPSTREAM_FT_TIMEOUT },
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
208 { ngx_string("invalid_header"), NGX_HTTP_UPSTREAM_FT_INVALID_HEADER },
6467
91c8d990fb45 Upstream: proxy_next_upstream non_idempotent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6303
diff changeset
209 { ngx_string("non_idempotent"), NGX_HTTP_UPSTREAM_FT_NON_IDEMPOTENT },
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
210 { ngx_string("http_500"), NGX_HTTP_UPSTREAM_FT_HTTP_500 },
623
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 619
diff changeset
211 { ngx_string("http_503"), NGX_HTTP_UPSTREAM_FT_HTTP_503 },
5231
05c53652e7b4 Upstream: http_403 support in proxy_next_upstream (and friends).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5028
diff changeset
212 { ngx_string("http_403"), NGX_HTTP_UPSTREAM_FT_HTTP_403 },
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
213 { ngx_string("http_404"), NGX_HTTP_UPSTREAM_FT_HTTP_404 },
2927
55ceaef03d34 proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents: 2912
diff changeset
214 { ngx_string("updating"), NGX_HTTP_UPSTREAM_FT_UPDATING },
665
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
215 { ngx_string("off"), NGX_HTTP_UPSTREAM_FT_OFF },
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
216 { ngx_null_string, 0 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
217 };
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
218
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
219
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
220 ngx_module_t ngx_http_fastcgi_module;
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
221
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
222
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
223 static ngx_command_t ngx_http_fastcgi_commands[] = {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
224
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
225 { ngx_string("fastcgi_pass"),
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
226 NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1,
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
227 ngx_http_fastcgi_pass,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
228 NGX_HTTP_LOC_CONF_OFFSET,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
229 0,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
230 NULL },
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
231
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
232 { ngx_string("fastcgi_index"),
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
233 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
234 ngx_conf_set_str_slot,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
235 NGX_HTTP_LOC_CONF_OFFSET,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
236 offsetof(ngx_http_fastcgi_loc_conf_t, index),
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
237 NULL },
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
238
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
239 { ngx_string("fastcgi_split_path_info"),
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
240 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
241 ngx_http_fastcgi_split_path_info,
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
242 NGX_HTTP_LOC_CONF_OFFSET,
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
243 0,
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
244 NULL },
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
245
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1276
diff changeset
246 { ngx_string("fastcgi_store"),
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
247 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
248 ngx_http_fastcgi_store,
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
249 NGX_HTTP_LOC_CONF_OFFSET,
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
250 0,
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
251 NULL },
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
252
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
253 { ngx_string("fastcgi_store_access"),
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1276
diff changeset
254 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE123,
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1276
diff changeset
255 ngx_conf_set_access_slot,
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1276
diff changeset
256 NGX_HTTP_LOC_CONF_OFFSET,
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
257 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.store_access),
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1276
diff changeset
258 NULL },
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1276
diff changeset
259
5394
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
260 { ngx_string("fastcgi_buffering"),
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
261 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
262 ngx_conf_set_flag_slot,
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
263 NGX_HTTP_LOC_CONF_OFFSET,
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
264 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.buffering),
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
265 NULL },
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
266
6052
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
267 { ngx_string("fastcgi_request_buffering"),
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
268 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
269 ngx_conf_set_flag_slot,
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
270 NGX_HTTP_LOC_CONF_OFFSET,
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
271 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.request_buffering),
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
272 NULL },
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
273
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
274 { ngx_string("fastcgi_ignore_client_abort"),
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
275 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
276 ngx_conf_set_flag_slot,
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
277 NGX_HTTP_LOC_CONF_OFFSET,
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
278 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.ignore_client_abort),
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
279 NULL },
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
280
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3197
diff changeset
281 { ngx_string("fastcgi_bind"),
6530
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6512
diff changeset
282 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE12,
3399
ac9c0380337d fix typo
Igor Sysoev <igor@sysoev.ru>
parents: 3325
diff changeset
283 ngx_http_upstream_bind_set_slot,
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3197
diff changeset
284 NGX_HTTP_LOC_CONF_OFFSET,
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3197
diff changeset
285 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.local),
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3197
diff changeset
286 NULL },
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3197
diff changeset
287
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
288 { ngx_string("fastcgi_connect_timeout"),
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
289 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
290 ngx_conf_set_msec_slot,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
291 NGX_HTTP_LOC_CONF_OFFSET,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
292 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.connect_timeout),
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
293 NULL },
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
294
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
295 { ngx_string("fastcgi_send_timeout"),
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
296 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
297 ngx_conf_set_msec_slot,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
298 NGX_HTTP_LOC_CONF_OFFSET,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
299 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.send_timeout),
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
300 NULL },
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
301
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
302 { ngx_string("fastcgi_send_lowat"),
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
303 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
304 ngx_conf_set_size_slot,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
305 NGX_HTTP_LOC_CONF_OFFSET,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
306 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.send_lowat),
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
307 &ngx_http_fastcgi_lowat_post },
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
308
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
309 { ngx_string("fastcgi_buffer_size"),
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
310 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
311 ngx_conf_set_size_slot,
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
312 NGX_HTTP_LOC_CONF_OFFSET,
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
313 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.buffer_size),
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
314 NULL },
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
315
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
316 { ngx_string("fastcgi_pass_request_headers"),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
317 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
318 ngx_conf_set_flag_slot,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
319 NGX_HTTP_LOC_CONF_OFFSET,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
320 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.pass_request_headers),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
321 NULL },
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
322
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
323 { ngx_string("fastcgi_pass_request_body"),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
324 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
325 ngx_conf_set_flag_slot,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
326 NGX_HTTP_LOC_CONF_OFFSET,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
327 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.pass_request_body),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
328 NULL },
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
329
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
330 { ngx_string("fastcgi_intercept_errors"),
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
331 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
332 ngx_conf_set_flag_slot,
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
333 NGX_HTTP_LOC_CONF_OFFSET,
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
334 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.intercept_errors),
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
335 NULL },
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
336
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
337 { ngx_string("fastcgi_read_timeout"),
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
338 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
339 ngx_conf_set_msec_slot,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
340 NGX_HTTP_LOC_CONF_OFFSET,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
341 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.read_timeout),
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
342 NULL },
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
343
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
344 { ngx_string("fastcgi_buffers"),
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
345 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE2,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
346 ngx_conf_set_bufs_slot,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
347 NGX_HTTP_LOC_CONF_OFFSET,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
348 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.bufs),
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
349 NULL },
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
350
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
351 { ngx_string("fastcgi_busy_buffers_size"),
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
352 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
353 ngx_conf_set_size_slot,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
354 NGX_HTTP_LOC_CONF_OFFSET,
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
355 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.busy_buffers_size_conf),
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
356 NULL },
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
357
5874
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5847
diff changeset
358 { ngx_string("fastcgi_force_ranges"),
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5847
diff changeset
359 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5847
diff changeset
360 ngx_conf_set_flag_slot,
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5847
diff changeset
361 NGX_HTTP_LOC_CONF_OFFSET,
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5847
diff changeset
362 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.force_ranges),
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5847
diff changeset
363 NULL },
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5847
diff changeset
364
5883
973ee2276300 Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5874
diff changeset
365 { ngx_string("fastcgi_limit_rate"),
973ee2276300 Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5874
diff changeset
366 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
973ee2276300 Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5874
diff changeset
367 ngx_conf_set_size_slot,
973ee2276300 Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5874
diff changeset
368 NGX_HTTP_LOC_CONF_OFFSET,
973ee2276300 Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5874
diff changeset
369 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.limit_rate),
973ee2276300 Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5874
diff changeset
370 NULL },
973ee2276300 Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5874
diff changeset
371
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
372 #if (NGX_HTTP_CACHE)
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
373
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
374 { ngx_string("fastcgi_cache"),
3729
4b773fc06336 fix directive type
Igor Sysoev <igor@sysoev.ru>
parents: 3700
diff changeset
375 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
376 ngx_http_fastcgi_cache,
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
377 NGX_HTTP_LOC_CONF_OFFSET,
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
378 0,
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
379 NULL },
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
380
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
381 { ngx_string("fastcgi_cache_key"),
3729
4b773fc06336 fix directive type
Igor Sysoev <igor@sysoev.ru>
parents: 3700
diff changeset
382 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
383 ngx_http_fastcgi_cache_key,
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
384 NGX_HTTP_LOC_CONF_OFFSET,
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
385 0,
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
386 NULL },
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
387
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
388 { ngx_string("fastcgi_cache_path"),
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
389 NGX_HTTP_MAIN_CONF|NGX_CONF_2MORE,
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
390 ngx_http_file_cache_set_slot,
5951
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
391 NGX_HTTP_MAIN_CONF_OFFSET,
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
392 offsetof(ngx_http_fastcgi_main_conf_t, caches),
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
393 &ngx_http_fastcgi_module },
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
394
3699
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3692
diff changeset
395 { ngx_string("fastcgi_cache_bypass"),
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3692
diff changeset
396 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3692
diff changeset
397 ngx_http_set_predicate_slot,
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3692
diff changeset
398 NGX_HTTP_LOC_CONF_OFFSET,
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3692
diff changeset
399 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.cache_bypass),
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3692
diff changeset
400 NULL },
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3692
diff changeset
401
3526
62a4fd1e6e2c proxy_no_cache and fastcgi_no_cache
Igor Sysoev <igor@sysoev.ru>
parents: 3523
diff changeset
402 { ngx_string("fastcgi_no_cache"),
62a4fd1e6e2c proxy_no_cache and fastcgi_no_cache
Igor Sysoev <igor@sysoev.ru>
parents: 3523
diff changeset
403 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
3692
045ea40cbfe8 use ngx_http_test_predicates(), ngx_http_set_predicate_slot()
Igor Sysoev <igor@sysoev.ru>
parents: 3670
diff changeset
404 ngx_http_set_predicate_slot,
3526
62a4fd1e6e2c proxy_no_cache and fastcgi_no_cache
Igor Sysoev <igor@sysoev.ru>
parents: 3523
diff changeset
405 NGX_HTTP_LOC_CONF_OFFSET,
62a4fd1e6e2c proxy_no_cache and fastcgi_no_cache
Igor Sysoev <igor@sysoev.ru>
parents: 3523
diff changeset
406 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.no_cache),
62a4fd1e6e2c proxy_no_cache and fastcgi_no_cache
Igor Sysoev <igor@sysoev.ru>
parents: 3523
diff changeset
407 NULL },
62a4fd1e6e2c proxy_no_cache and fastcgi_no_cache
Igor Sysoev <igor@sysoev.ru>
parents: 3523
diff changeset
408
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
409 { ngx_string("fastcgi_cache_valid"),
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
410 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
411 ngx_http_file_cache_valid_set_slot,
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
412 NGX_HTTP_LOC_CONF_OFFSET,
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
413 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.cache_valid),
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
414 NULL },
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
415
2729
e85497f36011 fix fastcgi_cache_min_uses
Igor Sysoev <igor@sysoev.ru>
parents: 2716
diff changeset
416 { ngx_string("fastcgi_cache_min_uses"),
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
417 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
418 ngx_conf_set_num_slot,
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
419 NGX_HTTP_LOC_CONF_OFFSET,
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
420 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.cache_min_uses),
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
421 NULL },
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
422
6793
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
423 { ngx_string("fastcgi_cache_max_range_offset"),
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
424 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
425 ngx_conf_set_off_slot,
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
426 NGX_HTTP_LOC_CONF_OFFSET,
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
427 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.cache_max_range_offset),
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
428 NULL },
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
429
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
430 { ngx_string("fastcgi_cache_use_stale"),
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
431 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
432 ngx_conf_set_bitmask_slot,
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
433 NGX_HTTP_LOC_CONF_OFFSET,
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
434 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.cache_use_stale),
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
435 &ngx_http_fastcgi_next_upstream_masks },
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
436
2875
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
437 { ngx_string("fastcgi_cache_methods"),
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
438 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
439 ngx_conf_set_bitmask_slot,
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
440 NGX_HTTP_LOC_CONF_OFFSET,
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
441 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.cache_methods),
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
442 &ngx_http_upstream_cache_method_mask },
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
443
4386
92deb73393f7 Cache lock support for fastcgi, scgi, uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4329
diff changeset
444 { ngx_string("fastcgi_cache_lock"),
92deb73393f7 Cache lock support for fastcgi, scgi, uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4329
diff changeset
445 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
92deb73393f7 Cache lock support for fastcgi, scgi, uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4329
diff changeset
446 ngx_conf_set_flag_slot,
92deb73393f7 Cache lock support for fastcgi, scgi, uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4329
diff changeset
447 NGX_HTTP_LOC_CONF_OFFSET,
92deb73393f7 Cache lock support for fastcgi, scgi, uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4329
diff changeset
448 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.cache_lock),
92deb73393f7 Cache lock support for fastcgi, scgi, uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4329
diff changeset
449 NULL },
92deb73393f7 Cache lock support for fastcgi, scgi, uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4329
diff changeset
450
92deb73393f7 Cache lock support for fastcgi, scgi, uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4329
diff changeset
451 { ngx_string("fastcgi_cache_lock_timeout"),
92deb73393f7 Cache lock support for fastcgi, scgi, uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4329
diff changeset
452 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
92deb73393f7 Cache lock support for fastcgi, scgi, uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4329
diff changeset
453 ngx_conf_set_msec_slot,
92deb73393f7 Cache lock support for fastcgi, scgi, uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4329
diff changeset
454 NGX_HTTP_LOC_CONF_OFFSET,
92deb73393f7 Cache lock support for fastcgi, scgi, uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4329
diff changeset
455 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.cache_lock_timeout),
92deb73393f7 Cache lock support for fastcgi, scgi, uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4329
diff changeset
456 NULL },
92deb73393f7 Cache lock support for fastcgi, scgi, uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4329
diff changeset
457
5905
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5883
diff changeset
458 { ngx_string("fastcgi_cache_lock_age"),
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5883
diff changeset
459 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5883
diff changeset
460 ngx_conf_set_msec_slot,
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5883
diff changeset
461 NGX_HTTP_LOC_CONF_OFFSET,
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5883
diff changeset
462 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.cache_lock_age),
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5883
diff changeset
463 NULL },
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5883
diff changeset
464
5441
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5394
diff changeset
465 { ngx_string("fastcgi_cache_revalidate"),
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5394
diff changeset
466 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5394
diff changeset
467 ngx_conf_set_flag_slot,
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5394
diff changeset
468 NGX_HTTP_LOC_CONF_OFFSET,
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5394
diff changeset
469 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.cache_revalidate),
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5394
diff changeset
470 NULL },
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5394
diff changeset
471
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
472 #endif
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
473
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
474 { ngx_string("fastcgi_temp_path"),
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
475 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1234,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
476 ngx_conf_set_path_slot,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
477 NGX_HTTP_LOC_CONF_OFFSET,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
478 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.temp_path),
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2467
diff changeset
479 NULL },
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
480
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
481 { ngx_string("fastcgi_max_temp_file_size"),
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
482 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
483 ngx_conf_set_size_slot,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
484 NGX_HTTP_LOC_CONF_OFFSET,
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
485 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.max_temp_file_size_conf),
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
486 NULL },
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
487
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
488 { ngx_string("fastcgi_temp_file_write_size"),
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
489 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
490 ngx_conf_set_size_slot,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
491 NGX_HTTP_LOC_CONF_OFFSET,
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
492 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.temp_file_write_size_conf),
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
493 NULL },
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
494
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
495 { ngx_string("fastcgi_next_upstream"),
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
496 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
497 ngx_conf_set_bitmask_slot,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
498 NGX_HTTP_LOC_CONF_OFFSET,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
499 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.next_upstream),
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
500 &ngx_http_fastcgi_next_upstream_masks },
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
501
5832
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5829
diff changeset
502 { ngx_string("fastcgi_next_upstream_tries"),
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5829
diff changeset
503 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5829
diff changeset
504 ngx_conf_set_num_slot,
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5829
diff changeset
505 NGX_HTTP_LOC_CONF_OFFSET,
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5829
diff changeset
506 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.next_upstream_tries),
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5829
diff changeset
507 NULL },
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5829
diff changeset
508
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5829
diff changeset
509 { ngx_string("fastcgi_next_upstream_timeout"),
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5829
diff changeset
510 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5829
diff changeset
511 ngx_conf_set_msec_slot,
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5829
diff changeset
512 NGX_HTTP_LOC_CONF_OFFSET,
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5829
diff changeset
513 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.next_upstream_timeout),
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5829
diff changeset
514 NULL },
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5829
diff changeset
515
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
516 { ngx_string("fastcgi_param"),
4329
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
517 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE23,
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
518 ngx_http_upstream_param_set_slot,
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
519 NGX_HTTP_LOC_CONF_OFFSET,
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
520 offsetof(ngx_http_fastcgi_loc_conf_t, params_source),
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
521 NULL },
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
522
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
523 { ngx_string("fastcgi_pass_header"),
3729
4b773fc06336 fix directive type
Igor Sysoev <igor@sysoev.ru>
parents: 3700
diff changeset
524 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
525 ngx_conf_set_str_array_slot,
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
526 NGX_HTTP_LOC_CONF_OFFSET,
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
527 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.pass_headers),
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
528 NULL },
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
529
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
530 { ngx_string("fastcgi_hide_header"),
3729
4b773fc06336 fix directive type
Igor Sysoev <igor@sysoev.ru>
parents: 3700
diff changeset
531 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
532 ngx_conf_set_str_array_slot,
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
533 NGX_HTTP_LOC_CONF_OFFSET,
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
534 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.hide_headers),
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
535 NULL },
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
536
2786
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2729
diff changeset
537 { ngx_string("fastcgi_ignore_headers"),
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2729
diff changeset
538 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2729
diff changeset
539 ngx_conf_set_bitmask_slot,
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2729
diff changeset
540 NGX_HTTP_LOC_CONF_OFFSET,
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2729
diff changeset
541 offsetof(ngx_http_fastcgi_loc_conf_t, upstream.ignore_headers),
3667
12bd9e26fadb use shared ngx_http_upstream_ignore_headers_masks[]
Igor Sysoev <igor@sysoev.ru>
parents: 3610
diff changeset
542 &ngx_http_upstream_ignore_headers_masks },
2786
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2729
diff changeset
543
1228
863c3490103e fastcgi_catch_stderr
Igor Sysoev <igor@sysoev.ru>
parents: 1142
diff changeset
544 { ngx_string("fastcgi_catch_stderr"),
4273
e444e8f6538b Fixed NGX_CONF_TAKE1/NGX_CONF_FLAG misuse.
Sergey Budnevitch <sb@waeme.net>
parents: 4136
diff changeset
545 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
1228
863c3490103e fastcgi_catch_stderr
Igor Sysoev <igor@sysoev.ru>
parents: 1142
diff changeset
546 ngx_conf_set_str_array_slot,
863c3490103e fastcgi_catch_stderr
Igor Sysoev <igor@sysoev.ru>
parents: 1142
diff changeset
547 NGX_HTTP_LOC_CONF_OFFSET,
863c3490103e fastcgi_catch_stderr
Igor Sysoev <igor@sysoev.ru>
parents: 1142
diff changeset
548 offsetof(ngx_http_fastcgi_loc_conf_t, catch_stderr),
863c3490103e fastcgi_catch_stderr
Igor Sysoev <igor@sysoev.ru>
parents: 1142
diff changeset
549 NULL },
863c3490103e fastcgi_catch_stderr
Igor Sysoev <igor@sysoev.ru>
parents: 1142
diff changeset
550
4122
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
551 { ngx_string("fastcgi_keep_conn"),
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
552 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
553 ngx_conf_set_flag_slot,
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
554 NGX_HTTP_LOC_CONF_OFFSET,
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
555 offsetof(ngx_http_fastcgi_loc_conf_t, keep_conn),
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
556 NULL },
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
557
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
558 ngx_null_command
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
559 };
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
560
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
561
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 665
diff changeset
562 static ngx_http_module_t ngx_http_fastcgi_module_ctx = {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
563 ngx_http_fastcgi_add_variables, /* preconfiguration */
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
564 NULL, /* postconfiguration */
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
565
5951
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
566 ngx_http_fastcgi_create_main_conf, /* create main configuration */
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
567 NULL, /* init main configuration */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
568
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
569 NULL, /* create server configuration */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
570 NULL, /* merge server configuration */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
571
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
572 ngx_http_fastcgi_create_loc_conf, /* create location configuration */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
573 ngx_http_fastcgi_merge_loc_conf /* merge location configuration */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
574 };
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
575
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
576
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
577 ngx_module_t ngx_http_fastcgi_module = {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
578 NGX_MODULE_V1,
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
579 &ngx_http_fastcgi_module_ctx, /* module context */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
580 ngx_http_fastcgi_commands, /* module directives */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
581 NGX_HTTP_MODULE, /* module type */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
582 NULL, /* init master */
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
583 NULL, /* init module */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
584 NULL, /* init process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
585 NULL, /* init thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
586 NULL, /* exit thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
587 NULL, /* exit process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
588 NULL, /* exit master */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
589 NGX_MODULE_V1_PADDING
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
590 };
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
591
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
592
1883
09dfe92b9414 fix order
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
593 static ngx_http_fastcgi_request_start_t ngx_http_fastcgi_request_start = {
09dfe92b9414 fix order
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
594 { 1, /* version */
09dfe92b9414 fix order
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
595 NGX_HTTP_FASTCGI_BEGIN_REQUEST, /* type */
09dfe92b9414 fix order
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
596 0, /* request_id_hi */
09dfe92b9414 fix order
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
597 1, /* request_id_lo */
09dfe92b9414 fix order
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
598 0, /* content_length_hi */
09dfe92b9414 fix order
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
599 sizeof(ngx_http_fastcgi_begin_request_t), /* content_length_lo */
09dfe92b9414 fix order
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
600 0, /* padding_length */
09dfe92b9414 fix order
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
601 0 }, /* reserved */
09dfe92b9414 fix order
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
602
09dfe92b9414 fix order
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
603 { 0, /* role_hi */
09dfe92b9414 fix order
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
604 NGX_HTTP_FASTCGI_RESPONDER, /* role_lo */
09dfe92b9414 fix order
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
605 0, /* NGX_HTTP_FASTCGI_KEEP_CONN */ /* flags */
09dfe92b9414 fix order
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
606 { 0, 0, 0, 0, 0 } }, /* reserved[5] */
09dfe92b9414 fix order
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
607
09dfe92b9414 fix order
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
608 { 1, /* version */
09dfe92b9414 fix order
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
609 NGX_HTTP_FASTCGI_PARAMS, /* type */
09dfe92b9414 fix order
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
610 0, /* request_id_hi */
09dfe92b9414 fix order
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
611 1 }, /* request_id_lo */
09dfe92b9414 fix order
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
612
09dfe92b9414 fix order
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
613 };
09dfe92b9414 fix order
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
614
09dfe92b9414 fix order
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
615
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
616 static ngx_http_variable_t ngx_http_fastcgi_vars[] = {
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
617
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
618 { ngx_string("fastcgi_script_name"), NULL,
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
619 ngx_http_fastcgi_script_name_variable, 0,
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
620 NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
621
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
622 { ngx_string("fastcgi_path_info"), NULL,
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
623 ngx_http_fastcgi_path_info_variable, 0,
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
624 NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
625
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
626 { ngx_null_string, NULL, NULL, 0, 0, 0 }
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
627 };
1884
7756b1085119 fix order
Igor Sysoev <igor@sysoev.ru>
parents: 1883
diff changeset
628
7756b1085119 fix order
Igor Sysoev <igor@sysoev.ru>
parents: 1883
diff changeset
629
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
630 static ngx_str_t ngx_http_fastcgi_hide_headers[] = {
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
631 ngx_string("Status"),
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
632 ngx_string("X-Accel-Expires"),
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
633 ngx_string("X-Accel-Redirect"),
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
634 ngx_string("X-Accel-Limit-Rate"),
1886
2819956d1ca0 add X-Accel-Charset to ingored header, fix X-Accel-Buffering
Igor Sysoev <igor@sysoev.ru>
parents: 1884
diff changeset
635 ngx_string("X-Accel-Buffering"),
2819956d1ca0 add X-Accel-Charset to ingored header, fix X-Accel-Buffering
Igor Sysoev <igor@sysoev.ru>
parents: 1884
diff changeset
636 ngx_string("X-Accel-Charset"),
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
637 ngx_null_string
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
638 };
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
639
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
640
3197
d5d1ad05d3a6 hide cacheable Set-Cookie and P3P FastCGI response headers
Igor Sysoev <igor@sysoev.ru>
parents: 3025
diff changeset
641 #if (NGX_HTTP_CACHE)
d5d1ad05d3a6 hide cacheable Set-Cookie and P3P FastCGI response headers
Igor Sysoev <igor@sysoev.ru>
parents: 3025
diff changeset
642
3563
90d7227d47bf do not pass if-... headers for cacheable fastcgi responses
Igor Sysoev <igor@sysoev.ru>
parents: 3562
diff changeset
643 static ngx_keyval_t ngx_http_fastcgi_cache_headers[] = {
5441
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5394
diff changeset
644 { ngx_string("HTTP_IF_MODIFIED_SINCE"),
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5394
diff changeset
645 ngx_string("$upstream_cache_last_modified") },
3563
90d7227d47bf do not pass if-... headers for cacheable fastcgi responses
Igor Sysoev <igor@sysoev.ru>
parents: 3562
diff changeset
646 { ngx_string("HTTP_IF_UNMODIFIED_SINCE"), ngx_string("") },
5738
c95d7882dfc9 Upstream: cache revalidation using If-None-Match.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5604
diff changeset
647 { ngx_string("HTTP_IF_NONE_MATCH"), ngx_string("$upstream_cache_etag") },
3563
90d7227d47bf do not pass if-... headers for cacheable fastcgi responses
Igor Sysoev <igor@sysoev.ru>
parents: 3562
diff changeset
648 { ngx_string("HTTP_IF_MATCH"), ngx_string("") },
90d7227d47bf do not pass if-... headers for cacheable fastcgi responses
Igor Sysoev <igor@sysoev.ru>
parents: 3562
diff changeset
649 { ngx_string("HTTP_RANGE"), ngx_string("") },
90d7227d47bf do not pass if-... headers for cacheable fastcgi responses
Igor Sysoev <igor@sysoev.ru>
parents: 3562
diff changeset
650 { ngx_string("HTTP_IF_RANGE"), ngx_string("") },
90d7227d47bf do not pass if-... headers for cacheable fastcgi responses
Igor Sysoev <igor@sysoev.ru>
parents: 3562
diff changeset
651 { ngx_null_string, ngx_null_string }
90d7227d47bf do not pass if-... headers for cacheable fastcgi responses
Igor Sysoev <igor@sysoev.ru>
parents: 3562
diff changeset
652 };
90d7227d47bf do not pass if-... headers for cacheable fastcgi responses
Igor Sysoev <igor@sysoev.ru>
parents: 3562
diff changeset
653
3197
d5d1ad05d3a6 hide cacheable Set-Cookie and P3P FastCGI response headers
Igor Sysoev <igor@sysoev.ru>
parents: 3025
diff changeset
654 #endif
d5d1ad05d3a6 hide cacheable Set-Cookie and P3P FastCGI response headers
Igor Sysoev <igor@sysoev.ru>
parents: 3025
diff changeset
655
d5d1ad05d3a6 hide cacheable Set-Cookie and P3P FastCGI response headers
Igor Sysoev <igor@sysoev.ru>
parents: 3025
diff changeset
656
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2467
diff changeset
657 static ngx_path_init_t ngx_http_fastcgi_temp_path = {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2467
diff changeset
658 ngx_string(NGX_HTTP_FASTCGI_TEMP_PATH), { 1, 2, 0 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2467
diff changeset
659 };
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2467
diff changeset
660
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2467
diff changeset
661
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
662 static ngx_int_t
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
663 ngx_http_fastcgi_handler(ngx_http_request_t *r)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
664 {
5951
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
665 ngx_int_t rc;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
666 ngx_http_upstream_t *u;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
667 ngx_http_fastcgi_ctx_t *f;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
668 ngx_http_fastcgi_loc_conf_t *flcf;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
669 #if (NGX_HTTP_CACHE)
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
670 ngx_http_fastcgi_main_conf_t *fmcf;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
671 #endif
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
672
3006
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 2989
diff changeset
673 if (ngx_http_upstream_create(r) != NGX_OK) {
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 2989
diff changeset
674 return NGX_HTTP_INTERNAL_SERVER_ERROR;
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 2989
diff changeset
675 }
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 2989
diff changeset
676
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
677 f = ngx_pcalloc(r->pool, sizeof(ngx_http_fastcgi_ctx_t));
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
678 if (f == NULL) {
3006
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 2989
diff changeset
679 return NGX_HTTP_INTERNAL_SERVER_ERROR;
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
680 }
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
681
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
682 ngx_http_set_ctx(r, f, ngx_http_fastcgi_module);
2395
b1a24d3cf4dd clear fastcgi ctx for internal redirection via named location
Igor Sysoev <igor@sysoev.ru>
parents: 2391
diff changeset
683
2390
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
684 flcf = ngx_http_get_module_loc_conf(r, ngx_http_fastcgi_module);
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
685
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
686 if (flcf->fastcgi_lengths) {
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
687 if (ngx_http_fastcgi_eval(r, flcf) != NGX_OK) {
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
688 return NGX_HTTP_INTERNAL_SERVER_ERROR;
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
689 }
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
690 }
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
691
3006
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 2989
diff changeset
692 u = r->upstream;
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 2989
diff changeset
693
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3494
diff changeset
694 ngx_str_set(&u->schema, "fastcgi://");
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
695 u->output.tag = (ngx_buf_tag_t) &ngx_http_fastcgi_module;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
696
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
697 u->conf = &flcf->upstream;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
698
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
699 #if (NGX_HTTP_CACHE)
5951
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
700 fmcf = ngx_http_get_module_main_conf(r, ngx_http_fastcgi_module);
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
701
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
702 u->caches = &fmcf->caches;
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
703 u->create_key = ngx_http_fastcgi_create_key;
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
704 #endif
5951
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
705
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
706 u->create_request = ngx_http_fastcgi_create_request;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
707 u->reinit_request = ngx_http_fastcgi_reinit_request;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
708 u->process_header = ngx_http_fastcgi_process_header;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
709 u->abort_request = ngx_http_fastcgi_abort_request;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
710 u->finalize_request = ngx_http_fastcgi_finalize_request;
4615
adcd60233817 Added r->state reset on fastcgi/scgi/uwsgi request start.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
711 r->state = 0;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
712
5394
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
713 u->buffering = flcf->upstream.buffering;
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
714
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
715 u->pipe = ngx_pcalloc(r->pool, sizeof(ngx_event_pipe_t));
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
716 if (u->pipe == NULL) {
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
717 return NGX_HTTP_INTERNAL_SERVER_ERROR;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
718 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
719
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
720 u->pipe->input_filter = ngx_http_fastcgi_input_filter;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
721 u->pipe->input_ctx = r;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
722
4122
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
723 u->input_filter_init = ngx_http_fastcgi_input_filter_init;
5394
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
724 u->input_filter = ngx_http_fastcgi_non_buffered_filter;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
725 u->input_filter_ctx = r;
4122
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
726
6052
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
727 if (!flcf->upstream.request_buffering
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
728 && flcf->upstream.pass_request_body)
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
729 {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
730 r->request_body_no_buffering = 1;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
731 }
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
732
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
733 rc = ngx_http_read_client_request_body(r, ngx_http_upstream_init);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
734
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
735 if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
736 return rc;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
737 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
738
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
739 return NGX_DONE;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
740 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
741
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
742
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
743 static ngx_int_t
2390
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
744 ngx_http_fastcgi_eval(ngx_http_request_t *r, ngx_http_fastcgi_loc_conf_t *flcf)
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
745 {
3610
edcc271f7c4c change variable names
Igor Sysoev <igor@sysoev.ru>
parents: 3563
diff changeset
746 ngx_url_t url;
edcc271f7c4c change variable names
Igor Sysoev <igor@sysoev.ru>
parents: 3563
diff changeset
747 ngx_http_upstream_t *u;
edcc271f7c4c change variable names
Igor Sysoev <igor@sysoev.ru>
parents: 3563
diff changeset
748
edcc271f7c4c change variable names
Igor Sysoev <igor@sysoev.ru>
parents: 3563
diff changeset
749 ngx_memzero(&url, sizeof(ngx_url_t));
edcc271f7c4c change variable names
Igor Sysoev <igor@sysoev.ru>
parents: 3563
diff changeset
750
edcc271f7c4c change variable names
Igor Sysoev <igor@sysoev.ru>
parents: 3563
diff changeset
751 if (ngx_http_script_run(r, &url.url, flcf->fastcgi_lengths->elts, 0,
2390
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
752 flcf->fastcgi_values->elts)
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
753 == NULL)
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
754 {
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
755 return NGX_ERROR;
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
756 }
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
757
3610
edcc271f7c4c change variable names
Igor Sysoev <igor@sysoev.ru>
parents: 3563
diff changeset
758 url.no_resolve = 1;
edcc271f7c4c change variable names
Igor Sysoev <igor@sysoev.ru>
parents: 3563
diff changeset
759
edcc271f7c4c change variable names
Igor Sysoev <igor@sysoev.ru>
parents: 3563
diff changeset
760 if (ngx_parse_url(r->pool, &url) != NGX_OK) {
6474
Ruslan Ermilov <ru@nginx.com>
parents: 6467
diff changeset
761 if (url.err) {
2390
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
762 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
3610
edcc271f7c4c change variable names
Igor Sysoev <igor@sysoev.ru>
parents: 3563
diff changeset
763 "%s in upstream \"%V\"", url.err, &url.url);
2390
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
764 }
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
765
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
766 return NGX_ERROR;
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
767 }
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
768
3610
edcc271f7c4c change variable names
Igor Sysoev <igor@sysoev.ru>
parents: 3563
diff changeset
769 u = r->upstream;
edcc271f7c4c change variable names
Igor Sysoev <igor@sysoev.ru>
parents: 3563
diff changeset
770
edcc271f7c4c change variable names
Igor Sysoev <igor@sysoev.ru>
parents: 3563
diff changeset
771 u->resolved = ngx_pcalloc(r->pool, sizeof(ngx_http_upstream_resolved_t));
edcc271f7c4c change variable names
Igor Sysoev <igor@sysoev.ru>
parents: 3563
diff changeset
772 if (u->resolved == NULL) {
edcc271f7c4c change variable names
Igor Sysoev <igor@sysoev.ru>
parents: 3563
diff changeset
773 return NGX_ERROR;
edcc271f7c4c change variable names
Igor Sysoev <igor@sysoev.ru>
parents: 3563
diff changeset
774 }
edcc271f7c4c change variable names
Igor Sysoev <igor@sysoev.ru>
parents: 3563
diff changeset
775
6784
1af120241cde Upstream: removed unnecessary condition in proxy_eval() and friends.
Ruslan Ermilov <ru@nginx.com>
parents: 6747
diff changeset
776 if (url.addrs) {
3610
edcc271f7c4c change variable names
Igor Sysoev <igor@sysoev.ru>
parents: 3563
diff changeset
777 u->resolved->sockaddr = url.addrs[0].sockaddr;
edcc271f7c4c change variable names
Igor Sysoev <igor@sysoev.ru>
parents: 3563
diff changeset
778 u->resolved->socklen = url.addrs[0].socklen;
6785
d1d0dd69a419 Upstream: added the ngx_http_upstream_resolved_t.name field.
Ruslan Ermilov <ru@nginx.com>
parents: 6784
diff changeset
779 u->resolved->name = url.addrs[0].name;
3610
edcc271f7c4c change variable names
Igor Sysoev <igor@sysoev.ru>
parents: 3563
diff changeset
780 u->resolved->naddrs = 1;
2422
7af1e5fe102c variable support for unix sockets in fastcgi_pass and proxy_pass
Igor Sysoev <igor@sysoev.ru>
parents: 2396
diff changeset
781 }
2390
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
782
6785
d1d0dd69a419 Upstream: added the ngx_http_upstream_resolved_t.name field.
Ruslan Ermilov <ru@nginx.com>
parents: 6784
diff changeset
783 u->resolved->host = url.host;
6303
a93345ee8f52 Upstream: fixed "no port" detection in evaluated upstreams.
Ruslan Ermilov <ru@nginx.com>
parents: 6230
diff changeset
784 u->resolved->port = url.port;
a93345ee8f52 Upstream: fixed "no port" detection in evaluated upstreams.
Ruslan Ermilov <ru@nginx.com>
parents: 6230
diff changeset
785 u->resolved->no_port = url.no_port;
a93345ee8f52 Upstream: fixed "no port" detection in evaluated upstreams.
Ruslan Ermilov <ru@nginx.com>
parents: 6230
diff changeset
786
2390
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
787 return NGX_OK;
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
788 }
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
789
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
790
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
791 #if (NGX_HTTP_CACHE)
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
792
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
793 static ngx_int_t
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
794 ngx_http_fastcgi_create_key(ngx_http_request_t *r)
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
795 {
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
796 ngx_str_t *key;
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
797 ngx_http_fastcgi_loc_conf_t *flcf;
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
798
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
799 key = ngx_array_push(&r->cache->keys);
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
800 if (key == NULL) {
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
801 return NGX_ERROR;
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
802 }
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
803
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
804 flcf = ngx_http_get_module_loc_conf(r, ngx_http_fastcgi_module);
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
805
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
806 if (ngx_http_complex_value(r, &flcf->cache_key, key) != NGX_OK) {
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
807 return NGX_ERROR;
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
808 }
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
809
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
810 return NGX_OK;
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
811 }
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
812
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
813 #endif
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
814
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
815
2390
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
816 static ngx_int_t
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
817 ngx_http_fastcgi_create_request(ngx_http_request_t *r)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
818 {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
819 off_t file_pos;
3560
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
820 u_char ch, *pos, *lowcase_key;
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
821 size_t size, len, key_len, val_len, padding,
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
822 allocated;
4329
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
823 ngx_uint_t i, n, next, hash, skip_empty, header_params;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
824 ngx_buf_t *b;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
825 ngx_chain_t *cl, *body;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
826 ngx_list_part_t *part;
3560
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
827 ngx_table_elt_t *header, **ignored;
6052
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
828 ngx_http_upstream_t *u;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
829 ngx_http_script_code_pt code;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
830 ngx_http_script_engine_t e, le;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
831 ngx_http_fastcgi_header_t *h;
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
832 ngx_http_fastcgi_params_t *params;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
833 ngx_http_fastcgi_loc_conf_t *flcf;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
834 ngx_http_script_len_code_pt lcode;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
835
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
836 len = 0;
3560
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
837 header_params = 0;
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
838 ignored = NULL;
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
839
6052
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
840 u = r->upstream;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
841
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
842 flcf = ngx_http_get_module_loc_conf(r, ngx_http_fastcgi_module);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
843
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
844 #if (NGX_HTTP_CACHE)
6052
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
845 params = u->cacheable ? &flcf->params_cache : &flcf->params;
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
846 #else
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
847 params = &flcf->params;
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
848 #endif
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
849
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
850 if (params->lengths) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
851 ngx_memzero(&le, sizeof(ngx_http_script_engine_t));
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
852
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
853 ngx_http_script_flush_no_cacheable_variables(r, params->flushes);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
854 le.flushed = 1;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
855
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
856 le.ip = params->lengths->elts;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
857 le.request = r;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
858
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
859 while (*(uintptr_t *) le.ip) {
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
860
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
861 lcode = *(ngx_http_script_len_code_pt *) le.ip;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
862 key_len = lcode(&le);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
863
4329
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
864 lcode = *(ngx_http_script_len_code_pt *) le.ip;
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
865 skip_empty = lcode(&le);
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
866
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
867 for (val_len = 0; *(uintptr_t *) le.ip; val_len += lcode(&le)) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
868 lcode = *(ngx_http_script_len_code_pt *) le.ip;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
869 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
870 le.ip += sizeof(uintptr_t);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
871
4329
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
872 if (skip_empty && val_len == 0) {
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
873 continue;
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
874 }
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
875
537
c9ad0d9c7d59 nginx-0.1.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
876 len += 1 + key_len + ((val_len > 127) ? 4 : 1) + val_len;
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
877 }
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
878 }
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
879
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
880 if (flcf->upstream.pass_request_headers) {
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
881
3560
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
882 allocated = 0;
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
883 lowcase_key = NULL;
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
884
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
885 if (params->number) {
4015
e0a435f5f504 Fix ignored headers handling in fastcgi/scgi/uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3976
diff changeset
886 n = 0;
e0a435f5f504 Fix ignored headers handling in fastcgi/scgi/uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3976
diff changeset
887 part = &r->headers_in.headers.part;
e0a435f5f504 Fix ignored headers handling in fastcgi/scgi/uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3976
diff changeset
888
e0a435f5f504 Fix ignored headers handling in fastcgi/scgi/uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3976
diff changeset
889 while (part) {
e0a435f5f504 Fix ignored headers handling in fastcgi/scgi/uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3976
diff changeset
890 n += part->nelts;
e0a435f5f504 Fix ignored headers handling in fastcgi/scgi/uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3976
diff changeset
891 part = part->next;
e0a435f5f504 Fix ignored headers handling in fastcgi/scgi/uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3976
diff changeset
892 }
e0a435f5f504 Fix ignored headers handling in fastcgi/scgi/uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3976
diff changeset
893
e0a435f5f504 Fix ignored headers handling in fastcgi/scgi/uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3976
diff changeset
894 ignored = ngx_palloc(r->pool, n * sizeof(void *));
3560
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
895 if (ignored == NULL) {
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
896 return NGX_ERROR;
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
897 }
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
898 }
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
899
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
900 part = &r->headers_in.headers.part;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
901 header = part->elts;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
902
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
903 for (i = 0; /* void */; i++) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
904
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
905 if (i >= part->nelts) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
906 if (part->next == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
907 break;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
908 }
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
909
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
910 part = part->next;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
911 header = part->elts;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
912 i = 0;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
913 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
914
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
915 if (params->number) {
3560
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
916 if (allocated < header[i].key.len) {
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
917 allocated = header[i].key.len + 16;
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
918 lowcase_key = ngx_pnalloc(r->pool, allocated);
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
919 if (lowcase_key == NULL) {
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
920 return NGX_ERROR;
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
921 }
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
922 }
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
923
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
924 hash = 0;
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
925
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
926 for (n = 0; n < header[i].key.len; n++) {
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
927 ch = header[i].key.data[n];
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
928
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
929 if (ch >= 'A' && ch <= 'Z') {
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
930 ch |= 0x20;
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
931
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
932 } else if (ch == '-') {
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
933 ch = '_';
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
934 }
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
935
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
936 hash = ngx_hash(hash, ch);
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
937 lowcase_key[n] = ch;
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
938 }
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
939
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
940 if (ngx_hash_find(&params->hash, hash, lowcase_key, n)) {
3560
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
941 ignored[header_params++] = &header[i];
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
942 continue;
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
943 }
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
944
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
945 n += sizeof("HTTP_") - 1;
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
946
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
947 } else {
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
948 n = sizeof("HTTP_") - 1 + header[i].key.len;
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
949 }
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
950
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
951 len += ((n > 127) ? 4 : 1) + ((header[i].value.len > 127) ? 4 : 1)
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
952 + n + header[i].value.len;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
953 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
954 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
955
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
956
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
957 if (len > 65535) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
958 ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
1678
d24280472a9f log how big fastcgi record
Igor Sysoev <igor@sysoev.ru>
parents: 1658
diff changeset
959 "fastcgi request record is too big: %uz", len);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
960 return NGX_ERROR;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
961 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
962
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
963
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
964 padding = 8 - len % 8;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
965 padding = (padding == 8) ? 0 : padding;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
966
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
967
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
968 size = sizeof(ngx_http_fastcgi_header_t)
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
969 + sizeof(ngx_http_fastcgi_begin_request_t)
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
970
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
971 + sizeof(ngx_http_fastcgi_header_t) /* NGX_HTTP_FASTCGI_PARAMS */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
972 + len + padding
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
973 + sizeof(ngx_http_fastcgi_header_t) /* NGX_HTTP_FASTCGI_PARAMS */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
974
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
975 + sizeof(ngx_http_fastcgi_header_t); /* NGX_HTTP_FASTCGI_STDIN */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
976
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
977
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
978 b = ngx_create_temp_buf(r->pool, size);
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
979 if (b == NULL) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
980 return NGX_ERROR;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
981 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
982
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
983 cl = ngx_alloc_chain_link(r->pool);
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
984 if (cl == NULL) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
985 return NGX_ERROR;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
986 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
987
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
988 cl->buf = b;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
989
4122
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
990 ngx_http_fastcgi_request_start.br.flags =
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
991 flcf->keep_conn ? NGX_HTTP_FASTCGI_KEEP_CONN : 0;
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
992
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
993 ngx_memcpy(b->pos, &ngx_http_fastcgi_request_start,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
994 sizeof(ngx_http_fastcgi_request_start_t));
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
995
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
996 h = (ngx_http_fastcgi_header_t *)
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
997 (b->pos + sizeof(ngx_http_fastcgi_header_t)
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
998 + sizeof(ngx_http_fastcgi_begin_request_t));
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
999
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1000 h->content_length_hi = (u_char) ((len >> 8) & 0xff);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1001 h->content_length_lo = (u_char) (len & 0xff);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1002 h->padding_length = (u_char) padding;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1003 h->reserved = 0;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1004
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1005 b->last = b->pos + sizeof(ngx_http_fastcgi_header_t)
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1006 + sizeof(ngx_http_fastcgi_begin_request_t)
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1007 + sizeof(ngx_http_fastcgi_header_t);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1008
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1009
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
1010 if (params->lengths) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1011 ngx_memzero(&e, sizeof(ngx_http_script_engine_t));
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1012
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
1013 e.ip = params->values->elts;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1014 e.pos = b->last;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1015 e.request = r;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1016 e.flushed = 1;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1017
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
1018 le.ip = params->lengths->elts;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1019
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1020 while (*(uintptr_t *) le.ip) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1021
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1022 lcode = *(ngx_http_script_len_code_pt *) le.ip;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1023 key_len = (u_char) lcode(&le);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1024
4329
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
1025 lcode = *(ngx_http_script_len_code_pt *) le.ip;
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
1026 skip_empty = lcode(&le);
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
1027
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1028 for (val_len = 0; *(uintptr_t *) le.ip; val_len += lcode(&le)) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1029 lcode = *(ngx_http_script_len_code_pt *) le.ip;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1030 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1031 le.ip += sizeof(uintptr_t);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1032
4329
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
1033 if (skip_empty && val_len == 0) {
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
1034 e.skip = 1;
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
1035
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
1036 while (*(uintptr_t *) e.ip) {
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
1037 code = *(ngx_http_script_code_pt *) e.ip;
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
1038 code((ngx_http_script_engine_t *) &e);
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
1039 }
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
1040 e.ip += sizeof(uintptr_t);
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
1041
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
1042 e.skip = 0;
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
1043
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
1044 continue;
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
1045 }
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
1046
537
c9ad0d9c7d59 nginx-0.1.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
1047 *e.pos++ = (u_char) key_len;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1048
537
c9ad0d9c7d59 nginx-0.1.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
1049 if (val_len > 127) {
c9ad0d9c7d59 nginx-0.1.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
1050 *e.pos++ = (u_char) (((val_len >> 24) & 0x7f) | 0x80);
c9ad0d9c7d59 nginx-0.1.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
1051 *e.pos++ = (u_char) ((val_len >> 16) & 0xff);
c9ad0d9c7d59 nginx-0.1.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
1052 *e.pos++ = (u_char) ((val_len >> 8) & 0xff);
c9ad0d9c7d59 nginx-0.1.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
1053 *e.pos++ = (u_char) (val_len & 0xff);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1054
537
c9ad0d9c7d59 nginx-0.1.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
1055 } else {
c9ad0d9c7d59 nginx-0.1.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
1056 *e.pos++ = (u_char) val_len;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1057 }
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1058
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1059 while (*(uintptr_t *) e.ip) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1060 code = *(ngx_http_script_code_pt *) e.ip;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1061 code((ngx_http_script_engine_t *) &e);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1062 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1063 e.ip += sizeof(uintptr_t);
1945
ab18958e1322 fastcgi params debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 1886
diff changeset
1064
ab18958e1322 fastcgi params debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 1886
diff changeset
1065 ngx_log_debug4(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
ab18958e1322 fastcgi params debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 1886
diff changeset
1066 "fastcgi param: \"%*s: %*s\"",
ab18958e1322 fastcgi params debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 1886
diff changeset
1067 key_len, e.pos - (key_len + val_len),
ab18958e1322 fastcgi params debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 1886
diff changeset
1068 val_len, e.pos - val_len);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1069 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1070
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1071 b->last = e.pos;
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1072 }
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1073
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1074
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1075 if (flcf->upstream.pass_request_headers) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1076
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1077 part = &r->headers_in.headers.part;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1078 header = part->elts;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1079
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1080 for (i = 0; /* void */; i++) {
491
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1081
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1082 if (i >= part->nelts) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1083 if (part->next == NULL) {
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1084 break;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1085 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1086
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1087 part = part->next;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1088 header = part->elts;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1089 i = 0;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1090 }
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1091
3560
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
1092 for (n = 0; n < header_params; n++) {
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
1093 if (&header[i] == ignored[n]) {
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
1094 goto next;
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
1095 }
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
1096 }
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
1097
3559
519dcf4cb3de add client request headers debug logging in fastcgi
Igor Sysoev <igor@sysoev.ru>
parents: 3558
diff changeset
1098 key_len = sizeof("HTTP_") - 1 + header[i].key.len;
519dcf4cb3de add client request headers debug logging in fastcgi
Igor Sysoev <igor@sysoev.ru>
parents: 3558
diff changeset
1099 if (key_len > 127) {
519dcf4cb3de add client request headers debug logging in fastcgi
Igor Sysoev <igor@sysoev.ru>
parents: 3558
diff changeset
1100 *b->last++ = (u_char) (((key_len >> 24) & 0x7f) | 0x80);
519dcf4cb3de add client request headers debug logging in fastcgi
Igor Sysoev <igor@sysoev.ru>
parents: 3558
diff changeset
1101 *b->last++ = (u_char) ((key_len >> 16) & 0xff);
519dcf4cb3de add client request headers debug logging in fastcgi
Igor Sysoev <igor@sysoev.ru>
parents: 3558
diff changeset
1102 *b->last++ = (u_char) ((key_len >> 8) & 0xff);
519dcf4cb3de add client request headers debug logging in fastcgi
Igor Sysoev <igor@sysoev.ru>
parents: 3558
diff changeset
1103 *b->last++ = (u_char) (key_len & 0xff);
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1104
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1105 } else {
3559
519dcf4cb3de add client request headers debug logging in fastcgi
Igor Sysoev <igor@sysoev.ru>
parents: 3558
diff changeset
1106 *b->last++ = (u_char) key_len;
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1107 }
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1108
3559
519dcf4cb3de add client request headers debug logging in fastcgi
Igor Sysoev <igor@sysoev.ru>
parents: 3558
diff changeset
1109 val_len = header[i].value.len;
519dcf4cb3de add client request headers debug logging in fastcgi
Igor Sysoev <igor@sysoev.ru>
parents: 3558
diff changeset
1110 if (val_len > 127) {
519dcf4cb3de add client request headers debug logging in fastcgi
Igor Sysoev <igor@sysoev.ru>
parents: 3558
diff changeset
1111 *b->last++ = (u_char) (((val_len >> 24) & 0x7f) | 0x80);
519dcf4cb3de add client request headers debug logging in fastcgi
Igor Sysoev <igor@sysoev.ru>
parents: 3558
diff changeset
1112 *b->last++ = (u_char) ((val_len >> 16) & 0xff);
519dcf4cb3de add client request headers debug logging in fastcgi
Igor Sysoev <igor@sysoev.ru>
parents: 3558
diff changeset
1113 *b->last++ = (u_char) ((val_len >> 8) & 0xff);
519dcf4cb3de add client request headers debug logging in fastcgi
Igor Sysoev <igor@sysoev.ru>
parents: 3558
diff changeset
1114 *b->last++ = (u_char) (val_len & 0xff);
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1115
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1116 } else {
3559
519dcf4cb3de add client request headers debug logging in fastcgi
Igor Sysoev <igor@sysoev.ru>
parents: 3558
diff changeset
1117 *b->last++ = (u_char) val_len;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1118 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1119
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1120 b->last = ngx_cpymem(b->last, "HTTP_", sizeof("HTTP_") - 1);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1121
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1122 for (n = 0; n < header[i].key.len; n++) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1123 ch = header[i].key.data[n];
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1124
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1125 if (ch >= 'a' && ch <= 'z') {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1126 ch &= ~0x20;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1127
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1128 } else if (ch == '-') {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1129 ch = '_';
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1130 }
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1131
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1132 *b->last++ = ch;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1133 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1134
3559
519dcf4cb3de add client request headers debug logging in fastcgi
Igor Sysoev <igor@sysoev.ru>
parents: 3558
diff changeset
1135 b->last = ngx_copy(b->last, header[i].value.data, val_len);
519dcf4cb3de add client request headers debug logging in fastcgi
Igor Sysoev <igor@sysoev.ru>
parents: 3558
diff changeset
1136
519dcf4cb3de add client request headers debug logging in fastcgi
Igor Sysoev <igor@sysoev.ru>
parents: 3558
diff changeset
1137 ngx_log_debug4(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
519dcf4cb3de add client request headers debug logging in fastcgi
Igor Sysoev <igor@sysoev.ru>
parents: 3558
diff changeset
1138 "fastcgi param: \"%*s: %*s\"",
519dcf4cb3de add client request headers debug logging in fastcgi
Igor Sysoev <igor@sysoev.ru>
parents: 3558
diff changeset
1139 key_len, b->last - (key_len + val_len),
519dcf4cb3de add client request headers debug logging in fastcgi
Igor Sysoev <igor@sysoev.ru>
parents: 3558
diff changeset
1140 val_len, b->last - val_len);
3560
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
1141 next:
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
1142
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
1143 continue;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1144 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1145 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1146
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1147
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1148 if (padding) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1149 ngx_memzero(b->last, padding);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1150 b->last += padding;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1151 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1152
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1153
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1154 h = (ngx_http_fastcgi_header_t *) b->last;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1155 b->last += sizeof(ngx_http_fastcgi_header_t);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1156
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1157 h->version = 1;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1158 h->type = NGX_HTTP_FASTCGI_PARAMS;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1159 h->request_id_hi = 0;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1160 h->request_id_lo = 1;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1161 h->content_length_hi = 0;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1162 h->content_length_lo = 0;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1163 h->padding_length = 0;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1164 h->reserved = 0;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1165
6052
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1166 if (r->request_body_no_buffering) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1167
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1168 u->request_bufs = cl;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1169
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1170 u->output.output_filter = ngx_http_fastcgi_body_output_filter;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1171 u->output.filter_ctx = r;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1172
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1173 } else if (flcf->upstream.pass_request_body) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1174
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1175 body = u->request_bufs;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1176 u->request_bufs = cl;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1177
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1178 #if (NGX_SUPPRESS_WARN)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1179 file_pos = 0;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1180 pos = NULL;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1181 #endif
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1182
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1183 while (body) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1184
6512
b5734248d5e7 FastCGI: skip special bufs in buffered request body chain.
Valentin Bartenev <vbart@nginx.com>
parents: 6480
diff changeset
1185 if (ngx_buf_special(body->buf)) {
b5734248d5e7 FastCGI: skip special bufs in buffered request body chain.
Valentin Bartenev <vbart@nginx.com>
parents: 6480
diff changeset
1186 body = body->next;
b5734248d5e7 FastCGI: skip special bufs in buffered request body chain.
Valentin Bartenev <vbart@nginx.com>
parents: 6480
diff changeset
1187 continue;
b5734248d5e7 FastCGI: skip special bufs in buffered request body chain.
Valentin Bartenev <vbart@nginx.com>
parents: 6480
diff changeset
1188 }
b5734248d5e7 FastCGI: skip special bufs in buffered request body chain.
Valentin Bartenev <vbart@nginx.com>
parents: 6480
diff changeset
1189
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1190 if (body->buf->in_file) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1191 file_pos = body->buf->file_pos;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1192
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1193 } else {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1194 pos = body->buf->pos;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1195 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1196
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1197 next = 0;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1198
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1199 do {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1200 b = ngx_alloc_buf(r->pool);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1201 if (b == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1202 return NGX_ERROR;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1203 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1204
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1205 ngx_memcpy(b, body->buf, sizeof(ngx_buf_t));
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1206
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1207 if (body->buf->in_file) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1208 b->file_pos = file_pos;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1209 file_pos += 32 * 1024;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1210
1142
e479e0b02e5a fix "zero size buf" if request body file is multiple of 32K and FastCGI is used
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
1211 if (file_pos >= body->buf->file_last) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1212 file_pos = body->buf->file_last;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1213 next = 1;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1214 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1215
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1216 b->file_last = file_pos;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1217 len = (ngx_uint_t) (file_pos - b->file_pos);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1218
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1219 } else {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1220 b->pos = pos;
5847
52b4984d2b3c FastCGI: fixed start pointers in request buffers.
Roman Arutyunyan <arut@nginx.com>
parents: 5832
diff changeset
1221 b->start = pos;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1222 pos += 32 * 1024;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1223
1142
e479e0b02e5a fix "zero size buf" if request body file is multiple of 32K and FastCGI is used
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
1224 if (pos >= body->buf->last) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1225 pos = body->buf->last;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1226 next = 1;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1227 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1228
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1229 b->last = pos;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1230 len = (ngx_uint_t) (pos - b->pos);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1231 }
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1232
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1233 padding = 8 - len % 8;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1234 padding = (padding == 8) ? 0 : padding;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1235
6052
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1236 h = (ngx_http_fastcgi_header_t *) cl->buf->last;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1237 cl->buf->last += sizeof(ngx_http_fastcgi_header_t);
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1238
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1239 h->version = 1;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1240 h->type = NGX_HTTP_FASTCGI_STDIN;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1241 h->request_id_hi = 0;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1242 h->request_id_lo = 1;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1243 h->content_length_hi = (u_char) ((len >> 8) & 0xff);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1244 h->content_length_lo = (u_char) (len & 0xff);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1245 h->padding_length = (u_char) padding;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1246 h->reserved = 0;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1247
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1248 cl->next = ngx_alloc_chain_link(r->pool);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1249 if (cl->next == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1250 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1251 }
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1252
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1253 cl = cl->next;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1254 cl->buf = b;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1255
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1256 b = ngx_create_temp_buf(r->pool,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1257 sizeof(ngx_http_fastcgi_header_t)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1258 + padding);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1259 if (b == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1260 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1261 }
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1262
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1263 if (padding) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1264 ngx_memzero(b->last, padding);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1265 b->last += padding;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1266 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1267
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1268 cl->next = ngx_alloc_chain_link(r->pool);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1269 if (cl->next == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1270 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1271 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1272
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1273 cl = cl->next;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1274 cl->buf = b;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1275
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1276 } while (!next);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1277
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1278 body = body->next;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1279 }
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1280
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1281 } else {
6052
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1282 u->request_bufs = cl;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1283 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1284
6052
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1285 if (!r->request_body_no_buffering) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1286 h = (ngx_http_fastcgi_header_t *) cl->buf->last;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1287 cl->buf->last += sizeof(ngx_http_fastcgi_header_t);
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1288
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1289 h->version = 1;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1290 h->type = NGX_HTTP_FASTCGI_STDIN;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1291 h->request_id_hi = 0;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1292 h->request_id_lo = 1;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1293 h->content_length_hi = 0;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1294 h->content_length_lo = 0;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1295 h->padding_length = 0;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1296 h->reserved = 0;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1297 }
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1298
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1299 cl->next = NULL;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1300
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1301 return NGX_OK;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1302 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1303
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1304
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1305 static ngx_int_t
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1306 ngx_http_fastcgi_reinit_request(ngx_http_request_t *r)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1307 {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1308 ngx_http_fastcgi_ctx_t *f;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1309
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1310 f = ngx_http_get_module_ctx(r, ngx_http_fastcgi_module);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1311
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1312 if (f == NULL) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1313 return NGX_OK;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1314 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1315
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1316 f->state = ngx_http_fastcgi_st_version;
615
5ef026a2ac74 nginx-0.3.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1317 f->fastcgi_stdout = 0;
3460
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1318 f->large_stderr = 0;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1319
5604
22d485944c20 FastCGI: f->split_parts reset on request start.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5575
diff changeset
1320 if (f->split_parts) {
22d485944c20 FastCGI: f->split_parts reset on request start.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5575
diff changeset
1321 f->split_parts->nelts = 0;
22d485944c20 FastCGI: f->split_parts reset on request start.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5575
diff changeset
1322 }
22d485944c20 FastCGI: f->split_parts reset on request start.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5575
diff changeset
1323
4615
adcd60233817 Added r->state reset on fastcgi/scgi/uwsgi request start.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
1324 r->state = 0;
adcd60233817 Added r->state reset on fastcgi/scgi/uwsgi request start.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
1325
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1326 return NGX_OK;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1327 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1328
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1329
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1330 static ngx_int_t
6052
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1331 ngx_http_fastcgi_body_output_filter(void *data, ngx_chain_t *in)
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1332 {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1333 ngx_http_request_t *r = data;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1334
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1335 off_t file_pos;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1336 u_char *pos, *start;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1337 size_t len, padding;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1338 ngx_buf_t *b;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1339 ngx_int_t rc;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1340 ngx_uint_t next, last;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1341 ngx_chain_t *cl, *tl, *out, **ll;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1342 ngx_http_fastcgi_ctx_t *f;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1343 ngx_http_fastcgi_header_t *h;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1344
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1345 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1346 "fastcgi output filter");
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1347
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1348 f = ngx_http_get_module_ctx(r, ngx_http_fastcgi_module);
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1349
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1350 if (in == NULL) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1351 out = in;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1352 goto out;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1353 }
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1354
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1355 out = NULL;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1356 ll = &out;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1357
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1358 if (!f->header_sent) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1359 /* first buffer contains headers, pass it unmodified */
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1360
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1361 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1362 "fastcgi output header");
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1363
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1364 f->header_sent = 1;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1365
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1366 tl = ngx_alloc_chain_link(r->pool);
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1367 if (tl == NULL) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1368 return NGX_ERROR;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1369 }
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1370
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1371 tl->buf = in->buf;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1372 *ll = tl;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1373 ll = &tl->next;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1374
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1375 in = in->next;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1376
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1377 if (in == NULL) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1378 tl->next = NULL;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1379 goto out;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1380 }
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1381 }
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1382
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1383 cl = ngx_chain_get_free_buf(r->pool, &f->free);
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1384 if (cl == NULL) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1385 return NGX_ERROR;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1386 }
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1387
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1388 b = cl->buf;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1389
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1390 b->tag = (ngx_buf_tag_t) &ngx_http_fastcgi_body_output_filter;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1391 b->temporary = 1;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1392
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1393 if (b->start == NULL) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1394 /* reserve space for maximum possible padding, 7 bytes */
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1395
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1396 b->start = ngx_palloc(r->pool,
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1397 sizeof(ngx_http_fastcgi_header_t) + 7);
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1398 if (b->start == NULL) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1399 return NGX_ERROR;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1400 }
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1401
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1402 b->pos = b->start;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1403 b->last = b->start;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1404
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1405 b->end = b->start + sizeof(ngx_http_fastcgi_header_t) + 7;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1406 }
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1407
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1408 *ll = cl;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1409
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1410 last = 0;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1411 padding = 0;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1412
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1413 #if (NGX_SUPPRESS_WARN)
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1414 file_pos = 0;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1415 pos = NULL;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1416 #endif
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1417
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1418 while (in) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1419
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1420 ngx_log_debug7(NGX_LOG_DEBUG_EVENT, r->connection->log, 0,
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1421 "fastcgi output in l:%d f:%d %p, pos %p, size: %z "
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1422 "file: %O, size: %O",
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1423 in->buf->last_buf,
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1424 in->buf->in_file,
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1425 in->buf->start, in->buf->pos,
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1426 in->buf->last - in->buf->pos,
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1427 in->buf->file_pos,
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1428 in->buf->file_last - in->buf->file_pos);
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1429
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1430 if (in->buf->last_buf) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1431 last = 1;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1432 }
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1433
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1434 if (ngx_buf_special(in->buf)) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1435 in = in->next;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1436 continue;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1437 }
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1438
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1439 if (in->buf->in_file) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1440 file_pos = in->buf->file_pos;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1441
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1442 } else {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1443 pos = in->buf->pos;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1444 }
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1445
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1446 next = 0;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1447
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1448 do {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1449 tl = ngx_chain_get_free_buf(r->pool, &f->free);
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1450 if (tl == NULL) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1451 return NGX_ERROR;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1452 }
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1453
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1454 b = tl->buf;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1455 start = b->start;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1456
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1457 ngx_memcpy(b, in->buf, sizeof(ngx_buf_t));
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1458
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1459 /*
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1460 * restore b->start to preserve memory allocated in the buffer,
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1461 * to reuse it later for headers and padding
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1462 */
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1463
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1464 b->start = start;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1465
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1466 if (in->buf->in_file) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1467 b->file_pos = file_pos;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1468 file_pos += 32 * 1024;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1469
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1470 if (file_pos >= in->buf->file_last) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1471 file_pos = in->buf->file_last;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1472 next = 1;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1473 }
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1474
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1475 b->file_last = file_pos;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1476 len = (ngx_uint_t) (file_pos - b->file_pos);
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1477
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1478 } else {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1479 b->pos = pos;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1480 pos += 32 * 1024;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1481
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1482 if (pos >= in->buf->last) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1483 pos = in->buf->last;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1484 next = 1;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1485 }
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1486
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1487 b->last = pos;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1488 len = (ngx_uint_t) (pos - b->pos);
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1489 }
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1490
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1491 b->tag = (ngx_buf_tag_t) &ngx_http_fastcgi_body_output_filter;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1492 b->shadow = in->buf;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1493 b->last_shadow = next;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1494
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1495 b->last_buf = 0;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1496 b->last_in_chain = 0;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1497
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1498 padding = 8 - len % 8;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1499 padding = (padding == 8) ? 0 : padding;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1500
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1501 h = (ngx_http_fastcgi_header_t *) cl->buf->last;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1502 cl->buf->last += sizeof(ngx_http_fastcgi_header_t);
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1503
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1504 h->version = 1;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1505 h->type = NGX_HTTP_FASTCGI_STDIN;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1506 h->request_id_hi = 0;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1507 h->request_id_lo = 1;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1508 h->content_length_hi = (u_char) ((len >> 8) & 0xff);
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1509 h->content_length_lo = (u_char) (len & 0xff);
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1510 h->padding_length = (u_char) padding;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1511 h->reserved = 0;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1512
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1513 cl->next = tl;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1514 cl = tl;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1515
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1516 tl = ngx_chain_get_free_buf(r->pool, &f->free);
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1517 if (tl == NULL) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1518 return NGX_ERROR;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1519 }
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1520
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1521 b = tl->buf;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1522
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1523 b->tag = (ngx_buf_tag_t) &ngx_http_fastcgi_body_output_filter;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1524 b->temporary = 1;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1525
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1526 if (b->start == NULL) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1527 /* reserve space for maximum possible padding, 7 bytes */
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1528
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1529 b->start = ngx_palloc(r->pool,
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1530 sizeof(ngx_http_fastcgi_header_t) + 7);
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1531 if (b->start == NULL) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1532 return NGX_ERROR;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1533 }
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1534
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1535 b->pos = b->start;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1536 b->last = b->start;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1537
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1538 b->end = b->start + sizeof(ngx_http_fastcgi_header_t) + 7;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1539 }
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1540
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1541 if (padding) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1542 ngx_memzero(b->last, padding);
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1543 b->last += padding;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1544 }
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1545
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1546 cl->next = tl;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1547 cl = tl;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1548
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1549 } while (!next);
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1550
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1551 in = in->next;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1552 }
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1553
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1554 if (last) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1555 h = (ngx_http_fastcgi_header_t *) cl->buf->last;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1556 cl->buf->last += sizeof(ngx_http_fastcgi_header_t);
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1557
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1558 h->version = 1;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1559 h->type = NGX_HTTP_FASTCGI_STDIN;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1560 h->request_id_hi = 0;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1561 h->request_id_lo = 1;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1562 h->content_length_hi = 0;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1563 h->content_length_lo = 0;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1564 h->padding_length = 0;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1565 h->reserved = 0;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1566
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1567 cl->buf->last_buf = 1;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1568
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1569 } else if (padding == 0) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1570 /* TODO: do not allocate buffers instead */
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1571 cl->buf->temporary = 0;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1572 cl->buf->sync = 1;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1573 }
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1574
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1575 cl->next = NULL;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1576
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1577 out:
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1578
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1579 #if (NGX_DEBUG)
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1580
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1581 for (cl = out; cl; cl = cl->next) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1582 ngx_log_debug7(NGX_LOG_DEBUG_EVENT, r->connection->log, 0,
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1583 "fastcgi output out l:%d f:%d %p, pos %p, size: %z "
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1584 "file: %O, size: %O",
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1585 cl->buf->last_buf,
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1586 cl->buf->in_file,
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1587 cl->buf->start, cl->buf->pos,
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1588 cl->buf->last - cl->buf->pos,
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1589 cl->buf->file_pos,
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1590 cl->buf->file_last - cl->buf->file_pos);
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1591 }
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1592
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1593 #endif
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1594
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1595 rc = ngx_chain_writer(&r->upstream->writer, out);
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1596
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1597 ngx_chain_update_chains(r->pool, &f->free, &f->busy, &out,
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1598 (ngx_buf_tag_t) &ngx_http_fastcgi_body_output_filter);
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1599
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1600 for (cl = f->free; cl; cl = cl->next) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1601
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1602 /* mark original buffers as sent */
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1603
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1604 if (cl->buf->shadow) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1605 if (cl->buf->last_shadow) {
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1606 b = cl->buf->shadow;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1607 b->pos = b->last;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1608 }
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1609
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1610 cl->buf->shadow = NULL;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1611 }
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1612 }
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1613
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1614 return rc;
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1615 }
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1616
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1617
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
1618 static ngx_int_t
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1619 ngx_http_fastcgi_process_header(ngx_http_request_t *r)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1620 {
3025
baff3edcb6e2 refactor fastcgi stderr handling
Igor Sysoev <igor@sysoev.ru>
parents: 3011
diff changeset
1621 u_char *p, *msg, *start, *last,
baff3edcb6e2 refactor fastcgi stderr handling
Igor Sysoev <igor@sysoev.ru>
parents: 3011
diff changeset
1622 *part_start, *part_end;
1276
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1623 size_t size;
3025
baff3edcb6e2 refactor fastcgi stderr handling
Igor Sysoev <igor@sysoev.ru>
parents: 3011
diff changeset
1624 ngx_str_t *status_line, *pattern;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1625 ngx_int_t rc, status;
1276
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1626 ngx_buf_t buf;
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
1627 ngx_uint_t i;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1628 ngx_table_elt_t *h;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1629 ngx_http_upstream_t *u;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1630 ngx_http_fastcgi_ctx_t *f;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1631 ngx_http_upstream_header_t *hh;
1228
863c3490103e fastcgi_catch_stderr
Igor Sysoev <igor@sysoev.ru>
parents: 1142
diff changeset
1632 ngx_http_fastcgi_loc_conf_t *flcf;
1276
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1633 ngx_http_fastcgi_split_part_t *part;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1634 ngx_http_upstream_main_conf_t *umcf;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1635
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1636 f = ngx_http_get_module_ctx(r, ngx_http_fastcgi_module);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1637
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1638 umcf = ngx_http_get_module_main_conf(r, ngx_http_upstream_module);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1639
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1640 u = r->upstream;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1641
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1642 for ( ;; ) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1643
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1644 if (f->state < ngx_http_fastcgi_st_data) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1645
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1646 f->pos = u->buffer.pos;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1647 f->last = u->buffer.last;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1648
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1649 rc = ngx_http_fastcgi_process_record(r, f);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1650
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1651 u->buffer.pos = f->pos;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1652 u->buffer.last = f->last;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1653
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1654 if (rc == NGX_AGAIN) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1655 return NGX_AGAIN;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1656 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1657
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1658 if (rc == NGX_ERROR) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1659 return NGX_HTTP_UPSTREAM_INVALID_HEADER;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1660 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1661
491
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1662 if (f->type != NGX_HTTP_FASTCGI_STDOUT
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1663 && f->type != NGX_HTTP_FASTCGI_STDERR)
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1664 {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1665 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
6480
f01ab2dbcfdc Fixed logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6474
diff changeset
1666 "upstream sent unexpected FastCGI record: %ui",
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1667 f->type);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1668
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1669 return NGX_HTTP_UPSTREAM_INVALID_HEADER;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1670 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1671
491
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1672 if (f->type == NGX_HTTP_FASTCGI_STDOUT && f->length == 0) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1673 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
4593
834049edae24 Fixed grammar in error messages.
Ruslan Ermilov <ru@nginx.com>
parents: 4529
diff changeset
1674 "upstream prematurely closed FastCGI stdout");
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1675
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1676 return NGX_HTTP_UPSTREAM_INVALID_HEADER;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1677 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1678 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1679
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1680 if (f->state == ngx_http_fastcgi_st_padding) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1681
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1682 if (u->buffer.pos + f->padding < u->buffer.last) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1683 f->state = ngx_http_fastcgi_st_version;
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1684 u->buffer.pos += f->padding;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1685
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1686 continue;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1687 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1688
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1689 if (u->buffer.pos + f->padding == u->buffer.last) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1690 f->state = ngx_http_fastcgi_st_version;
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1691 u->buffer.pos = u->buffer.last;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1692
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1693 return NGX_AGAIN;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1694 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1695
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1696 f->padding -= u->buffer.last - u->buffer.pos;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1697 u->buffer.pos = u->buffer.last;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1698
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1699 return NGX_AGAIN;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1700 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1701
491
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1702
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1703 /* f->state == ngx_http_fastcgi_st_data */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1704
491
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1705 if (f->type == NGX_HTTP_FASTCGI_STDERR) {
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1706
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1707 if (f->length) {
3025
baff3edcb6e2 refactor fastcgi stderr handling
Igor Sysoev <igor@sysoev.ru>
parents: 3011
diff changeset
1708 msg = u->buffer.pos;
491
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1709
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1710 if (u->buffer.pos + f->length <= u->buffer.last) {
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1711 u->buffer.pos += f->length;
491
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1712 f->length = 0;
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1713 f->state = ngx_http_fastcgi_st_padding;
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1714
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1715 } else {
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1716 f->length -= u->buffer.last - u->buffer.pos;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1717 u->buffer.pos = u->buffer.last;
491
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1718 }
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1719
3025
baff3edcb6e2 refactor fastcgi stderr handling
Igor Sysoev <igor@sysoev.ru>
parents: 3011
diff changeset
1720 for (p = u->buffer.pos - 1; msg < p; p--) {
baff3edcb6e2 refactor fastcgi stderr handling
Igor Sysoev <igor@sysoev.ru>
parents: 3011
diff changeset
1721 if (*p != LF && *p != CR && *p != '.' && *p != ' ') {
baff3edcb6e2 refactor fastcgi stderr handling
Igor Sysoev <igor@sysoev.ru>
parents: 3011
diff changeset
1722 break;
baff3edcb6e2 refactor fastcgi stderr handling
Igor Sysoev <igor@sysoev.ru>
parents: 3011
diff changeset
1723 }
491
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1724 }
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1725
3025
baff3edcb6e2 refactor fastcgi stderr handling
Igor Sysoev <igor@sysoev.ru>
parents: 3011
diff changeset
1726 p++;
baff3edcb6e2 refactor fastcgi stderr handling
Igor Sysoev <igor@sysoev.ru>
parents: 3011
diff changeset
1727
491
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1728 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
3025
baff3edcb6e2 refactor fastcgi stderr handling
Igor Sysoev <igor@sysoev.ru>
parents: 3011
diff changeset
1729 "FastCGI sent in stderr: \"%*s\"", p - msg, msg);
491
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1730
1228
863c3490103e fastcgi_catch_stderr
Igor Sysoev <igor@sysoev.ru>
parents: 1142
diff changeset
1731 flcf = ngx_http_get_module_loc_conf(r, ngx_http_fastcgi_module);
863c3490103e fastcgi_catch_stderr
Igor Sysoev <igor@sysoev.ru>
parents: 1142
diff changeset
1732
863c3490103e fastcgi_catch_stderr
Igor Sysoev <igor@sysoev.ru>
parents: 1142
diff changeset
1733 if (flcf->catch_stderr) {
863c3490103e fastcgi_catch_stderr
Igor Sysoev <igor@sysoev.ru>
parents: 1142
diff changeset
1734 pattern = flcf->catch_stderr->elts;
863c3490103e fastcgi_catch_stderr
Igor Sysoev <igor@sysoev.ru>
parents: 1142
diff changeset
1735
863c3490103e fastcgi_catch_stderr
Igor Sysoev <igor@sysoev.ru>
parents: 1142
diff changeset
1736 for (i = 0; i < flcf->catch_stderr->nelts; i++) {
3025
baff3edcb6e2 refactor fastcgi stderr handling
Igor Sysoev <igor@sysoev.ru>
parents: 3011
diff changeset
1737 if (ngx_strnstr(msg, (char *) pattern[i].data,
baff3edcb6e2 refactor fastcgi stderr handling
Igor Sysoev <igor@sysoev.ru>
parents: 3011
diff changeset
1738 p - msg)
baff3edcb6e2 refactor fastcgi stderr handling
Igor Sysoev <igor@sysoev.ru>
parents: 3011
diff changeset
1739 != NULL)
baff3edcb6e2 refactor fastcgi stderr handling
Igor Sysoev <igor@sysoev.ru>
parents: 3011
diff changeset
1740 {
1700
7f3350b18e75 return NGX_HTTP_UPSTREAM_INVALID_HEADER instead of NGX_HTTP_BAD_GATEWAY
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
1741 return NGX_HTTP_UPSTREAM_INVALID_HEADER;
1228
863c3490103e fastcgi_catch_stderr
Igor Sysoev <igor@sysoev.ru>
parents: 1142
diff changeset
1742 }
863c3490103e fastcgi_catch_stderr
Igor Sysoev <igor@sysoev.ru>
parents: 1142
diff changeset
1743 }
863c3490103e fastcgi_catch_stderr
Igor Sysoev <igor@sysoev.ru>
parents: 1142
diff changeset
1744 }
863c3490103e fastcgi_catch_stderr
Igor Sysoev <igor@sysoev.ru>
parents: 1142
diff changeset
1745
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1746 if (u->buffer.pos == u->buffer.last) {
615
5ef026a2ac74 nginx-0.3.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1747
5ef026a2ac74 nginx-0.3.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1748 if (!f->fastcgi_stdout) {
5ef026a2ac74 nginx-0.3.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1749
5ef026a2ac74 nginx-0.3.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1750 /*
5ef026a2ac74 nginx-0.3.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1751 * the special handling the large number
5ef026a2ac74 nginx-0.3.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1752 * of the PHP warnings to not allocate memory
5ef026a2ac74 nginx-0.3.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1753 */
5ef026a2ac74 nginx-0.3.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1754
3460
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1755 #if (NGX_HTTP_CACHE)
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1756 if (r->cache) {
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1757 u->buffer.pos = u->buffer.start
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1758 + r->cache->header_start;
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1759 } else {
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1760 u->buffer.pos = u->buffer.start;
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1761 }
3850
ca7b9caa20e5 fix large stderr handling without http cache
Igor Sysoev <igor@sysoev.ru>
parents: 3735
diff changeset
1762 #else
ca7b9caa20e5 fix large stderr handling without http cache
Igor Sysoev <igor@sysoev.ru>
parents: 3735
diff changeset
1763 u->buffer.pos = u->buffer.start;
3460
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1764 #endif
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1765 u->buffer.last = u->buffer.pos;
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1766 f->large_stderr = 1;
615
5ef026a2ac74 nginx-0.3.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1767 }
5ef026a2ac74 nginx-0.3.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1768
491
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1769 return NGX_AGAIN;
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1770 }
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1771
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1772 } else {
5027
2ab25df19dc6 FastCGI: unconditional state transitions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5026
diff changeset
1773 f->state = ngx_http_fastcgi_st_padding;
491
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1774 }
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1775
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1776 continue;
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1777 }
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1778
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1779
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1780 /* f->type == NGX_HTTP_FASTCGI_STDOUT */
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
1781
3460
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1782 #if (NGX_HTTP_CACHE)
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1783
3469
08a66ba99191 fix segfault if there was non cached large FastCGI stderr output before header,
Igor Sysoev <igor@sysoev.ru>
parents: 3460
diff changeset
1784 if (f->large_stderr && r->cache) {
3494
67b8a4e0d7e1 fix building without HTTP cache, the bug had been introduced in r3461
Igor Sysoev <igor@sysoev.ru>
parents: 3469
diff changeset
1785 ssize_t len;
67b8a4e0d7e1 fix building without HTTP cache, the bug had been introduced in r3461
Igor Sysoev <igor@sysoev.ru>
parents: 3469
diff changeset
1786 ngx_http_fastcgi_header_t *fh;
3460
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1787
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1788 start = u->buffer.start + r->cache->header_start;
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1789
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1790 len = u->buffer.pos - start - 2 * sizeof(ngx_http_fastcgi_header_t);
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1791
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1792 /*
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1793 * A tail of large stderr output before HTTP header is placed
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1794 * in a cache file without a FastCGI record header.
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1795 * To workaround it we put a dummy FastCGI record header at the
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1796 * start of the stderr output or update r->cache_header_start,
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1797 * if there is no enough place for the record header.
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1798 */
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1799
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1800 if (len >= 0) {
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1801 fh = (ngx_http_fastcgi_header_t *) start;
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1802 fh->version = 1;
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1803 fh->type = NGX_HTTP_FASTCGI_STDERR;
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1804 fh->request_id_hi = 0;
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1805 fh->request_id_lo = 1;
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1806 fh->content_length_hi = (u_char) ((len >> 8) & 0xff);
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1807 fh->content_length_lo = (u_char) (len & 0xff);
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1808 fh->padding_length = 0;
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1809 fh->reserved = 0;
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1810
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1811 } else {
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1812 r->cache->header_start += u->buffer.pos - start
6474
Ruslan Ermilov <ru@nginx.com>
parents: 6467
diff changeset
1813 - sizeof(ngx_http_fastcgi_header_t);
3460
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1814 }
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1815
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1816 f->large_stderr = 0;
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1817 }
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1818
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1819 #endif
bbea0b19b608 fix cached FastCGI response with large stderr output before header
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
1820
615
5ef026a2ac74 nginx-0.3.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1821 f->fastcgi_stdout = 1;
5ef026a2ac74 nginx-0.3.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1822
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1823 start = u->buffer.pos;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1824
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1825 if (u->buffer.pos + f->length < u->buffer.last) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1826
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1827 /*
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1828 * set u->buffer.last to the end of the FastCGI record data
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1829 * for ngx_http_parse_header_line()
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1830 */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1831
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1832 last = u->buffer.last;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1833 u->buffer.last = u->buffer.pos + f->length;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1834
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1835 } else {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1836 last = NULL;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1837 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1838
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1839 for ( ;; ) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1840
1276
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1841 part_start = u->buffer.pos;
3011
5957e869f04d fix a garbage in a split fastcgi header
Igor Sysoev <igor@sysoev.ru>
parents: 3010
diff changeset
1842 part_end = u->buffer.last;
1276
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1843
2256
8c17cfe63d2c underscores_in_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
1844 rc = ngx_http_parse_header_line(r, &u->buffer, 1);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1845
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1846 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
6480
f01ab2dbcfdc Fixed logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6474
diff changeset
1847 "http fastcgi parser: %i", rc);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1848
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1849 if (rc == NGX_AGAIN) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1850 break;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1851 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1852
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1853 if (rc == NGX_OK) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1854
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1855 /* a header line has been parsed successfully */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1856
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1857 h = ngx_list_push(&u->headers_in.headers);
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1858 if (h == NULL) {
1699
976db8c6fb64 return NGX_ERROR instead of NGX_HTTP_INTERNAL_SERVER_ERROR in u->parse_header()
Igor Sysoev <igor@sysoev.ru>
parents: 1698
diff changeset
1859 return NGX_ERROR;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1860 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1861
1276
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1862 if (f->split_parts && f->split_parts->nelts) {
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1863
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1864 part = f->split_parts->elts;
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1865 size = u->buffer.pos - part_start;
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1866
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1867 for (i = 0; i < f->split_parts->nelts; i++) {
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1868 size += part[i].end - part[i].start;
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1869 }
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1870
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2030
diff changeset
1871 p = ngx_pnalloc(r->pool, size);
1276
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1872 if (p == NULL) {
1699
976db8c6fb64 return NGX_ERROR instead of NGX_HTTP_INTERNAL_SERVER_ERROR in u->parse_header()
Igor Sysoev <igor@sysoev.ru>
parents: 1698
diff changeset
1873 return NGX_ERROR;
1276
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1874 }
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1875
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1876 buf.pos = p;
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1877
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1878 for (i = 0; i < f->split_parts->nelts; i++) {
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1879 p = ngx_cpymem(p, part[i].start,
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1880 part[i].end - part[i].start);
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1881 }
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1882
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1883 p = ngx_cpymem(p, part_start, u->buffer.pos - part_start);
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1884
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1885 buf.last = p;
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1886
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1887 f->split_parts->nelts = 0;
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1888
2256
8c17cfe63d2c underscores_in_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
1889 rc = ngx_http_parse_header_line(r, &buf, 1);
1276
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1890
5604
22d485944c20 FastCGI: f->split_parts reset on request start.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5575
diff changeset
1891 if (rc != NGX_OK) {
22d485944c20 FastCGI: f->split_parts reset on request start.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5575
diff changeset
1892 ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
22d485944c20 FastCGI: f->split_parts reset on request start.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5575
diff changeset
1893 "invalid header after joining "
22d485944c20 FastCGI: f->split_parts reset on request start.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5575
diff changeset
1894 "FastCGI records");
22d485944c20 FastCGI: f->split_parts reset on request start.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5575
diff changeset
1895 return NGX_ERROR;
22d485944c20 FastCGI: f->split_parts reset on request start.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5575
diff changeset
1896 }
22d485944c20 FastCGI: f->split_parts reset on request start.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5575
diff changeset
1897
1276
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1898 h->key.len = r->header_name_end - r->header_name_start;
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1899 h->key.data = r->header_name_start;
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1900 h->key.data[h->key.len] = '\0';
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1901
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1902 h->value.len = r->header_end - r->header_start;
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1903 h->value.data = r->header_start;
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1904 h->value.data[h->value.len] = '\0';
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1905
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2030
diff changeset
1906 h->lowcase_key = ngx_pnalloc(r->pool, h->key.len);
1276
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1907 if (h->lowcase_key == NULL) {
1699
976db8c6fb64 return NGX_ERROR instead of NGX_HTTP_INTERNAL_SERVER_ERROR in u->parse_header()
Igor Sysoev <igor@sysoev.ru>
parents: 1698
diff changeset
1908 return NGX_ERROR;
1276
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1909 }
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1910
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1911 } else {
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1912
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1913 h->key.len = r->header_name_end - r->header_name_start;
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1914 h->value.len = r->header_end - r->header_start;
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1915
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2030
diff changeset
1916 h->key.data = ngx_pnalloc(r->pool,
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2030
diff changeset
1917 h->key.len + 1 + h->value.len + 1
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2030
diff changeset
1918 + h->key.len);
1276
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1919 if (h->key.data == NULL) {
1699
976db8c6fb64 return NGX_ERROR instead of NGX_HTTP_INTERNAL_SERVER_ERROR in u->parse_header()
Igor Sysoev <igor@sysoev.ru>
parents: 1698
diff changeset
1920 return NGX_ERROR;
1276
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1921 }
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1922
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1923 h->value.data = h->key.data + h->key.len + 1;
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1924 h->lowcase_key = h->key.data + h->key.len + 1
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1925 + h->value.len + 1;
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1926
4529
1ebec1d15a25 Fixed incorrect ngx_cpystrn() usage in ngx_http_*_process_header().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4522
diff changeset
1927 ngx_memcpy(h->key.data, r->header_name_start, h->key.len);
1ebec1d15a25 Fixed incorrect ngx_cpystrn() usage in ngx_http_*_process_header().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4522
diff changeset
1928 h->key.data[h->key.len] = '\0';
1ebec1d15a25 Fixed incorrect ngx_cpystrn() usage in ngx_http_*_process_header().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4522
diff changeset
1929 ngx_memcpy(h->value.data, r->header_start, h->value.len);
1ebec1d15a25 Fixed incorrect ngx_cpystrn() usage in ngx_http_*_process_header().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4522
diff changeset
1930 h->value.data[h->value.len] = '\0';
1276
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1931 }
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
1932
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1933 h->hash = r->header_hash;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1934
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
1935 if (h->key.len == r->lowcase_index) {
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
1936 ngx_memcpy(h->lowcase_key, r->lowcase_header, h->key.len);
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
1937
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
1938 } else {
2135
8c6521eedf84 ngx_strlow()
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1939 ngx_strlow(h->lowcase_key, h->key.data, h->key.len);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1940 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1941
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
1942 hh = ngx_hash_find(&umcf->headers_in_hash, h->hash,
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
1943 h->lowcase_key, h->key.len);
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
1944
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
1945 if (hh && hh->handler(r, h, hh->offset) != NGX_OK) {
1699
976db8c6fb64 return NGX_ERROR instead of NGX_HTTP_INTERNAL_SERVER_ERROR in u->parse_header()
Igor Sysoev <igor@sysoev.ru>
parents: 1698
diff changeset
1946 return NGX_ERROR;
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
1947 }
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
1948
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1949 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1950 "http fastcgi header: \"%V: %V\"",
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1951 &h->key, &h->value);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1952
615
5ef026a2ac74 nginx-0.3.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1953 if (u->buffer.pos < u->buffer.last) {
5ef026a2ac74 nginx-0.3.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1954 continue;
5ef026a2ac74 nginx-0.3.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1955 }
5ef026a2ac74 nginx-0.3.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1956
5ef026a2ac74 nginx-0.3.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1957 /* the end of the FastCGI record */
5ef026a2ac74 nginx-0.3.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1958
5ef026a2ac74 nginx-0.3.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1959 break;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1960 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1961
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1962 if (rc == NGX_HTTP_PARSE_HEADER_DONE) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1963
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1964 /* a whole header has been parsed successfully */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1965
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1966 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1967 "http fastcgi header done");
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1968
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1969 if (u->headers_in.status) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1970 status_line = &u->headers_in.status->value;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1971
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1972 status = ngx_atoi(status_line->data, 3);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1973
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1974 if (status == NGX_ERROR) {
1698
70202cd85645 return NGX_HTTP_UPSTREAM_INVALID_HEADER for invalid status
Igor Sysoev <igor@sysoev.ru>
parents: 1678
diff changeset
1975 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
70202cd85645 return NGX_HTTP_UPSTREAM_INVALID_HEADER for invalid status
Igor Sysoev <igor@sysoev.ru>
parents: 1678
diff changeset
1976 "upstream sent invalid status \"%V\"",
70202cd85645 return NGX_HTTP_UPSTREAM_INVALID_HEADER for invalid status
Igor Sysoev <igor@sysoev.ru>
parents: 1678
diff changeset
1977 status_line);
70202cd85645 return NGX_HTTP_UPSTREAM_INVALID_HEADER for invalid status
Igor Sysoev <igor@sysoev.ru>
parents: 1678
diff changeset
1978 return NGX_HTTP_UPSTREAM_INVALID_HEADER;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1979 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1980
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
1981 u->headers_in.status_n = status;
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
1982 u->headers_in.status_line = *status_line;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1983
2140
dce5ddef5af9 if upstream sent a location header without status use 302
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
1984 } else if (u->headers_in.location) {
dce5ddef5af9 if upstream sent a location header without status use 302
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
1985 u->headers_in.status_n = 302;
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3494
diff changeset
1986 ngx_str_set(&u->headers_in.status_line,
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3494
diff changeset
1987 "302 Moved Temporarily");
2140
dce5ddef5af9 if upstream sent a location header without status use 302
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
1988
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1989 } else {
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
1990 u->headers_in.status_n = 200;
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3494
diff changeset
1991 ngx_str_set(&u->headers_in.status_line, "200 OK");
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1992 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1993
5575
d15822784cf9 Upstream: fix $upstream_status variable.
Piotr Sikora <piotr@cloudflare.com>
parents: 5466
diff changeset
1994 if (u->state && u->state->status == 0) {
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
1995 u->state->status = u->headers_in.status_n;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1996 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1997
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1998 break;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1999 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2000
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2001 /* there was error while a header line parsing */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2002
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2003 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
619
7a16e281c01f nginx-0.3.31-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 615
diff changeset
2004 "upstream sent invalid header");
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2005
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2006 return NGX_HTTP_UPSTREAM_INVALID_HEADER;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2007 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2008
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2009 if (last) {
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2010 u->buffer.last = last;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2011 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2012
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2013 f->length -= u->buffer.pos - start;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2014
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2015 if (f->length == 0) {
5027
2ab25df19dc6 FastCGI: unconditional state transitions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5026
diff changeset
2016 f->state = ngx_http_fastcgi_st_padding;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2017 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2018
615
5ef026a2ac74 nginx-0.3.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
2019 if (rc == NGX_HTTP_PARSE_HEADER_DONE) {
5ef026a2ac74 nginx-0.3.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
2020 return NGX_OK;
5ef026a2ac74 nginx-0.3.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
2021 }
5ef026a2ac74 nginx-0.3.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
2022
1274
7ffdd1bb86d5 omit unnecessary conditions
Igor Sysoev <igor@sysoev.ru>
parents: 1272
diff changeset
2023 if (rc == NGX_OK) {
1998
63c60504c0bf fix error introduced in r1273 and r1275:
Igor Sysoev <igor@sysoev.ru>
parents: 1945
diff changeset
2024 continue;
615
5ef026a2ac74 nginx-0.3.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
2025 }
5ef026a2ac74 nginx-0.3.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
2026
1274
7ffdd1bb86d5 omit unnecessary conditions
Igor Sysoev <igor@sysoev.ru>
parents: 1272
diff changeset
2027 /* rc == NGX_AGAIN */
7ffdd1bb86d5 omit unnecessary conditions
Igor Sysoev <igor@sysoev.ru>
parents: 1272
diff changeset
2028
1276
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
2029 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
2030 "upstream split a header line in FastCGI records");
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
2031
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
2032 if (f->split_parts == NULL) {
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
2033 f->split_parts = ngx_array_create(r->pool, 1,
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
2034 sizeof(ngx_http_fastcgi_split_part_t));
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
2035 if (f->split_parts == NULL) {
1699
976db8c6fb64 return NGX_ERROR instead of NGX_HTTP_INTERNAL_SERVER_ERROR in u->parse_header()
Igor Sysoev <igor@sysoev.ru>
parents: 1698
diff changeset
2036 return NGX_ERROR;
1276
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
2037 }
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
2038 }
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
2039
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
2040 part = ngx_array_push(f->split_parts);
4811
21d1e3bcb356 Added three missing checks for NULL after ngx_array_push() calls.
Valentin Bartenev <vbart@nginx.com>
parents: 4616
diff changeset
2041 if (part == NULL) {
21d1e3bcb356 Added three missing checks for NULL after ngx_array_push() calls.
Valentin Bartenev <vbart@nginx.com>
parents: 4616
diff changeset
2042 return NGX_ERROR;
21d1e3bcb356 Added three missing checks for NULL after ngx_array_push() calls.
Valentin Bartenev <vbart@nginx.com>
parents: 4616
diff changeset
2043 }
1276
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
2044
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
2045 part->start = part_start;
3011
5957e869f04d fix a garbage in a split fastcgi header
Igor Sysoev <igor@sysoev.ru>
parents: 3010
diff changeset
2046 part->end = part_end;
1276
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
2047
3010
37400c84396e continue to parse available fastcgi record after a split header,
Igor Sysoev <igor@sysoev.ru>
parents: 3006
diff changeset
2048 if (u->buffer.pos < u->buffer.last) {
37400c84396e continue to parse available fastcgi record after a split header,
Igor Sysoev <igor@sysoev.ru>
parents: 3006
diff changeset
2049 continue;
37400c84396e continue to parse available fastcgi record after a split header,
Igor Sysoev <igor@sysoev.ru>
parents: 3006
diff changeset
2050 }
37400c84396e continue to parse available fastcgi record after a split header,
Igor Sysoev <igor@sysoev.ru>
parents: 3006
diff changeset
2051
1276
1494a23b1ed4 fix headers split in FastCGI records
Igor Sysoev <igor@sysoev.ru>
parents: 1274
diff changeset
2052 return NGX_AGAIN;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2053 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2054 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2055
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2056
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
2057 static ngx_int_t
4122
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2058 ngx_http_fastcgi_input_filter_init(void *data)
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2059 {
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2060 ngx_http_request_t *r = data;
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2061 ngx_http_fastcgi_loc_conf_t *flcf;
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2062
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2063 flcf = ngx_http_get_module_loc_conf(r, ngx_http_fastcgi_module);
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2064
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2065 r->upstream->pipe->length = flcf->keep_conn ?
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2066 (off_t) sizeof(ngx_http_fastcgi_header_t) : -1;
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2067
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2068 return NGX_OK;
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2069 }
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2070
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2071
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2072 static ngx_int_t
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
2073 ngx_http_fastcgi_input_filter(ngx_event_pipe_t *p, ngx_buf_t *buf)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2074 {
4122
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2075 u_char *m, *msg;
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2076 ngx_int_t rc;
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2077 ngx_buf_t *b, **prev;
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2078 ngx_chain_t *cl;
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2079 ngx_http_request_t *r;
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2080 ngx_http_fastcgi_ctx_t *f;
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2081 ngx_http_fastcgi_loc_conf_t *flcf;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2082
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2083 if (buf->pos == buf->last) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2084 return NGX_OK;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2085 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2086
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2087 r = p->input_ctx;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2088 f = ngx_http_get_module_ctx(r, ngx_http_fastcgi_module);
4122
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2089 flcf = ngx_http_get_module_loc_conf(r, ngx_http_fastcgi_module);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2090
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2091 b = NULL;
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
2092 prev = &buf->shadow;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2093
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2094 f->pos = buf->pos;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2095 f->last = buf->last;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2096
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2097 for ( ;; ) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2098 if (f->state < ngx_http_fastcgi_st_data) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2099
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2100 rc = ngx_http_fastcgi_process_record(r, f);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2101
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2102 if (rc == NGX_AGAIN) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2103 break;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2104 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2105
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2106 if (rc == NGX_ERROR) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2107 return NGX_ERROR;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2108 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2109
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2110 if (f->type == NGX_HTTP_FASTCGI_STDOUT && f->length == 0) {
5027
2ab25df19dc6 FastCGI: unconditional state transitions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5026
diff changeset
2111 f->state = ngx_http_fastcgi_st_padding;
4122
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2112
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2113 if (!flcf->keep_conn) {
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2114 p->upstream_done = 1;
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2115 }
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2116
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2117 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, p->log, 0,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2118 "http fastcgi closed stdout");
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2119
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2120 continue;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2121 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2122
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2123 if (f->type == NGX_HTTP_FASTCGI_END_REQUEST) {
4122
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2124
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2125 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, p->log, 0,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2126 "http fastcgi sent end request");
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2127
5028
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2128 if (!flcf->keep_conn) {
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2129 p->upstream_done = 1;
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2130 break;
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2131 }
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2132
5027
2ab25df19dc6 FastCGI: unconditional state transitions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5026
diff changeset
2133 continue;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2134 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2135 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2136
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2137
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2138 if (f->state == ngx_http_fastcgi_st_padding) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2139
5028
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2140 if (f->type == NGX_HTTP_FASTCGI_END_REQUEST) {
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2141
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2142 if (f->pos + f->padding < f->last) {
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2143 p->upstream_done = 1;
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2144 break;
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2145 }
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2146
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2147 if (f->pos + f->padding == f->last) {
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2148 p->upstream_done = 1;
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2149 r->upstream->keepalive = 1;
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2150 break;
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2151 }
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2152
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2153 f->padding -= f->last - f->pos;
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2154
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2155 break;
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2156 }
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2157
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2158 if (f->pos + f->padding < f->last) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2159 f->state = ngx_http_fastcgi_st_version;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2160 f->pos += f->padding;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2161
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2162 continue;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2163 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2164
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2165 if (f->pos + f->padding == f->last) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2166 f->state = ngx_http_fastcgi_st_version;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2167
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2168 break;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2169 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2170
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2171 f->padding -= f->last - f->pos;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2172
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2173 break;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2174 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2175
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2176
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2177 /* f->state == ngx_http_fastcgi_st_data */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2178
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2179 if (f->type == NGX_HTTP_FASTCGI_STDERR) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2180
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2181 if (f->length) {
639
715d24327080 nginx-0.3.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
2182
715d24327080 nginx-0.3.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
2183 if (f->pos == f->last) {
715d24327080 nginx-0.3.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
2184 break;
715d24327080 nginx-0.3.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
2185 }
715d24327080 nginx-0.3.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
2186
3025
baff3edcb6e2 refactor fastcgi stderr handling
Igor Sysoev <igor@sysoev.ru>
parents: 3011
diff changeset
2187 msg = f->pos;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2188
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2189 if (f->pos + f->length <= f->last) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2190 f->pos += f->length;
491
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
2191 f->length = 0;
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
2192 f->state = ngx_http_fastcgi_st_padding;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2193
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2194 } else {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2195 f->length -= f->last - f->pos;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2196 f->pos = f->last;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2197 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2198
3025
baff3edcb6e2 refactor fastcgi stderr handling
Igor Sysoev <igor@sysoev.ru>
parents: 3011
diff changeset
2199 for (m = f->pos - 1; msg < m; m--) {
baff3edcb6e2 refactor fastcgi stderr handling
Igor Sysoev <igor@sysoev.ru>
parents: 3011
diff changeset
2200 if (*m != LF && *m != CR && *m != '.' && *m != ' ') {
baff3edcb6e2 refactor fastcgi stderr handling
Igor Sysoev <igor@sysoev.ru>
parents: 3011
diff changeset
2201 break;
baff3edcb6e2 refactor fastcgi stderr handling
Igor Sysoev <igor@sysoev.ru>
parents: 3011
diff changeset
2202 }
491
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
2203 }
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2204
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2205 ngx_log_error(NGX_LOG_ERR, p->log, 0,
3025
baff3edcb6e2 refactor fastcgi stderr handling
Igor Sysoev <igor@sysoev.ru>
parents: 3011
diff changeset
2206 "FastCGI sent in stderr: \"%*s\"",
baff3edcb6e2 refactor fastcgi stderr handling
Igor Sysoev <igor@sysoev.ru>
parents: 3011
diff changeset
2207 m + 1 - msg, msg);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2208
491
0f836f0288ee nginx-0.1.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
2209 } else {
5027
2ab25df19dc6 FastCGI: unconditional state transitions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5026
diff changeset
2210 f->state = ngx_http_fastcgi_st_padding;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2211 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2212
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2213 continue;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2214 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2215
5028
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2216 if (f->type == NGX_HTTP_FASTCGI_END_REQUEST) {
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2217
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2218 if (f->pos + f->length <= f->last) {
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2219 f->state = ngx_http_fastcgi_st_padding;
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2220 f->pos += f->length;
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2221
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2222 continue;
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2223 }
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2224
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2225 f->length -= f->last - f->pos;
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2226
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2227 break;
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2228 }
44025ae9fc67 FastCGI: proper handling of split fastcgi end request.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5027
diff changeset
2229
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2230
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2231 /* f->type == NGX_HTTP_FASTCGI_STDOUT */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2232
639
715d24327080 nginx-0.3.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
2233 if (f->pos == f->last) {
715d24327080 nginx-0.3.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
2234 break;
715d24327080 nginx-0.3.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
2235 }
715d24327080 nginx-0.3.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
2236
5466
e7b3b9855be8 Use ngx_chain_get_free_buf() in pipe input filters.
Valentin Bartenev <vbart@nginx.com>
parents: 5451
diff changeset
2237 cl = ngx_chain_get_free_buf(p->pool, &p->free);
e7b3b9855be8 Use ngx_chain_get_free_buf() in pipe input filters.
Valentin Bartenev <vbart@nginx.com>
parents: 5451
diff changeset
2238 if (cl == NULL) {
e7b3b9855be8 Use ngx_chain_get_free_buf() in pipe input filters.
Valentin Bartenev <vbart@nginx.com>
parents: 5451
diff changeset
2239 return NGX_ERROR;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2240 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2241
5466
e7b3b9855be8 Use ngx_chain_get_free_buf() in pipe input filters.
Valentin Bartenev <vbart@nginx.com>
parents: 5451
diff changeset
2242 b = cl->buf;
e7b3b9855be8 Use ngx_chain_get_free_buf() in pipe input filters.
Valentin Bartenev <vbart@nginx.com>
parents: 5451
diff changeset
2243
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2244 ngx_memzero(b, sizeof(ngx_buf_t));
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2245
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2246 b->pos = f->pos;
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
2247 b->start = buf->start;
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
2248 b->end = buf->end;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2249 b->tag = p->tag;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2250 b->temporary = 1;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2251 b->recycled = 1;
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
2252
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
2253 *prev = b;
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
2254 prev = &b->shadow;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2255
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
2256 if (p->in) {
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
2257 *p->last_in = cl;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
2258 } else {
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
2259 p->in = cl;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
2260 }
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
2261 p->last_in = &cl->next;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
2262
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
2263
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
2264 /* STUB */ b->num = buf->num;
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
2265
1030
5a86fcc480c6 add debug logging for FastCGI zero size buf alert
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
2266 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, p->log, 0,
1037
c28c8bdb57f4 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 1030
diff changeset
2267 "input buf #%d %p", b->num, b->pos);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2268
5027
2ab25df19dc6 FastCGI: unconditional state transitions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5026
diff changeset
2269 if (f->pos + f->length <= f->last) {
2ab25df19dc6 FastCGI: unconditional state transitions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5026
diff changeset
2270 f->state = ngx_http_fastcgi_st_padding;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2271 f->pos += f->length;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2272 b->last = f->pos;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2273
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2274 continue;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2275 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2276
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2277 f->length -= f->last - f->pos;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2278
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2279 b->last = f->last;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2280
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2281 break;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2282
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2283 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2284
4122
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2285 if (flcf->keep_conn) {
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2286
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2287 /* set p->length, minimal amount of data we want to see */
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2288
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2289 if (f->state < ngx_http_fastcgi_st_data) {
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2290 p->length = 1;
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2291
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2292 } else if (f->state == ngx_http_fastcgi_st_padding) {
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2293 p->length = f->padding;
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2294
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2295 } else {
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2296 /* ngx_http_fastcgi_st_data */
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2297
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2298 p->length = f->length;
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2299 }
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2300 }
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2301
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2302 if (b) {
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
2303 b->shadow = buf;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2304 b->last_shadow = 1;
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
2305
1030
5a86fcc480c6 add debug logging for FastCGI zero size buf alert
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
2306 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, p->log, 0,
1037
c28c8bdb57f4 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 1030
diff changeset
2307 "input buf %p %z", b->pos, b->last - b->pos);
1030
5a86fcc480c6 add debug logging for FastCGI zero size buf alert
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
2308
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
2309 return NGX_OK;
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
2310 }
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
2311
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
2312 /* there is no data record in the buf, add it to free chain */
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
2313
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
2314 if (ngx_event_pipe_add_free_buf(p, buf) != NGX_OK) {
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
2315 return NGX_ERROR;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2316 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2317
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2318 return NGX_OK;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2319 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2320
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2321
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
2322 static ngx_int_t
5394
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2323 ngx_http_fastcgi_non_buffered_filter(void *data, ssize_t bytes)
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2324 {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2325 u_char *m, *msg;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2326 ngx_int_t rc;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2327 ngx_buf_t *b, *buf;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2328 ngx_chain_t *cl, **ll;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2329 ngx_http_request_t *r;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2330 ngx_http_upstream_t *u;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2331 ngx_http_fastcgi_ctx_t *f;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2332
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2333 r = data;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2334 f = ngx_http_get_module_ctx(r, ngx_http_fastcgi_module);
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2335
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2336 u = r->upstream;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2337 buf = &u->buffer;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2338
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2339 buf->pos = buf->last;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2340 buf->last += bytes;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2341
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2342 for (cl = u->out_bufs, ll = &u->out_bufs; cl; cl = cl->next) {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2343 ll = &cl->next;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2344 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2345
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2346 f->pos = buf->pos;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2347 f->last = buf->last;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2348
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2349 for ( ;; ) {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2350 if (f->state < ngx_http_fastcgi_st_data) {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2351
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2352 rc = ngx_http_fastcgi_process_record(r, f);
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2353
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2354 if (rc == NGX_AGAIN) {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2355 break;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2356 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2357
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2358 if (rc == NGX_ERROR) {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2359 return NGX_ERROR;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2360 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2361
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2362 if (f->type == NGX_HTTP_FASTCGI_STDOUT && f->length == 0) {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2363 f->state = ngx_http_fastcgi_st_padding;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2364
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2365 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2366 "http fastcgi closed stdout");
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2367
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2368 continue;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2369 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2370 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2371
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2372 if (f->state == ngx_http_fastcgi_st_padding) {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2373
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2374 if (f->type == NGX_HTTP_FASTCGI_END_REQUEST) {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2375
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2376 if (f->pos + f->padding < f->last) {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2377 u->length = 0;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2378 break;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2379 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2380
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2381 if (f->pos + f->padding == f->last) {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2382 u->length = 0;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2383 u->keepalive = 1;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2384 break;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2385 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2386
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2387 f->padding -= f->last - f->pos;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2388
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2389 break;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2390 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2391
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2392 if (f->pos + f->padding < f->last) {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2393 f->state = ngx_http_fastcgi_st_version;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2394 f->pos += f->padding;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2395
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2396 continue;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2397 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2398
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2399 if (f->pos + f->padding == f->last) {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2400 f->state = ngx_http_fastcgi_st_version;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2401
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2402 break;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2403 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2404
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2405 f->padding -= f->last - f->pos;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2406
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2407 break;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2408 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2409
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2410
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2411 /* f->state == ngx_http_fastcgi_st_data */
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2412
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2413 if (f->type == NGX_HTTP_FASTCGI_STDERR) {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2414
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2415 if (f->length) {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2416
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2417 if (f->pos == f->last) {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2418 break;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2419 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2420
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2421 msg = f->pos;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2422
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2423 if (f->pos + f->length <= f->last) {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2424 f->pos += f->length;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2425 f->length = 0;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2426 f->state = ngx_http_fastcgi_st_padding;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2427
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2428 } else {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2429 f->length -= f->last - f->pos;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2430 f->pos = f->last;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2431 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2432
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2433 for (m = f->pos - 1; msg < m; m--) {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2434 if (*m != LF && *m != CR && *m != '.' && *m != ' ') {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2435 break;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2436 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2437 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2438
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2439 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2440 "FastCGI sent in stderr: \"%*s\"",
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2441 m + 1 - msg, msg);
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2442
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2443 } else {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2444 f->state = ngx_http_fastcgi_st_padding;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2445 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2446
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2447 continue;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2448 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2449
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2450 if (f->type == NGX_HTTP_FASTCGI_END_REQUEST) {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2451
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2452 if (f->pos + f->length <= f->last) {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2453 f->state = ngx_http_fastcgi_st_padding;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2454 f->pos += f->length;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2455
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2456 continue;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2457 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2458
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2459 f->length -= f->last - f->pos;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2460
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2461 break;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2462 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2463
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2464
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2465 /* f->type == NGX_HTTP_FASTCGI_STDOUT */
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2466
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2467 if (f->pos == f->last) {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2468 break;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2469 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2470
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2471 cl = ngx_chain_get_free_buf(r->pool, &u->free_bufs);
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2472 if (cl == NULL) {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2473 return NGX_ERROR;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2474 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2475
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2476 *ll = cl;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2477 ll = &cl->next;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2478
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2479 b = cl->buf;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2480
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2481 b->flush = 1;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2482 b->memory = 1;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2483
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2484 b->pos = f->pos;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2485 b->tag = u->output.tag;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2486
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2487 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2488 "http fastcgi output buf %p", b->pos);
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2489
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2490 if (f->pos + f->length <= f->last) {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2491 f->state = ngx_http_fastcgi_st_padding;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2492 f->pos += f->length;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2493 b->last = f->pos;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2494
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2495 continue;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2496 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2497
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2498 f->length -= f->last - f->pos;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2499 b->last = f->last;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2500
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2501 break;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2502 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2503
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2504 /* provide continuous buffer for subrequests in memory */
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2505
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2506 if (r->subrequest_in_memory) {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2507
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2508 cl = u->out_bufs;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2509
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2510 if (cl) {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2511 buf->pos = cl->buf->pos;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2512 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2513
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2514 buf->last = buf->pos;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2515
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2516 for (cl = u->out_bufs; cl; cl = cl->next) {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2517 ngx_log_debug3(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
6480
f01ab2dbcfdc Fixed logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6474
diff changeset
2518 "http fastcgi in memory %p-%p %O",
5394
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2519 cl->buf->pos, cl->buf->last, ngx_buf_size(cl->buf));
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2520
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2521 if (buf->last == cl->buf->pos) {
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2522 buf->last = cl->buf->last;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2523 continue;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2524 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2525
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2526 buf->last = ngx_movemem(buf->last, cl->buf->pos,
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2527 cl->buf->last - cl->buf->pos);
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2528
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2529 cl->buf->pos = buf->last - (cl->buf->last - cl->buf->pos);
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2530 cl->buf->last = buf->last;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2531 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2532 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2533
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2534 return NGX_OK;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2535 }
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2536
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2537
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2538 static ngx_int_t
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
2539 ngx_http_fastcgi_process_record(ngx_http_request_t *r,
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
2540 ngx_http_fastcgi_ctx_t *f)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2541 {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2542 u_char ch, *p;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2543 ngx_http_fastcgi_state_e state;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2544
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2545 state = f->state;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2546
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2547 for (p = f->pos; p < f->last; p++) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2548
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2549 ch = *p;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2550
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2551 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2552 "http fastcgi record byte: %02Xd", ch);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2553
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2554 switch (state) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2555
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2556 case ngx_http_fastcgi_st_version:
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2557 if (ch != 1) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2558 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2559 "upstream sent unsupported FastCGI "
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2560 "protocol version: %d", ch);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2561 return NGX_ERROR;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2562 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2563 state = ngx_http_fastcgi_st_type;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2564 break;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2565
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2566 case ngx_http_fastcgi_st_type:
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2567 switch (ch) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2568 case NGX_HTTP_FASTCGI_STDOUT:
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2569 case NGX_HTTP_FASTCGI_STDERR:
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2570 case NGX_HTTP_FASTCGI_END_REQUEST:
6474
Ruslan Ermilov <ru@nginx.com>
parents: 6467
diff changeset
2571 f->type = (ngx_uint_t) ch;
Ruslan Ermilov <ru@nginx.com>
parents: 6467
diff changeset
2572 break;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2573 default:
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2574 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2575 "upstream sent invalid FastCGI "
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2576 "record type: %d", ch);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2577 return NGX_ERROR;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2578
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2579 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2580 state = ngx_http_fastcgi_st_request_id_hi;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2581 break;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2582
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2583 /* we support the single request per connection */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2584
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2585 case ngx_http_fastcgi_st_request_id_hi:
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2586 if (ch != 0) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2587 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2588 "upstream sent unexpected FastCGI "
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2589 "request id high byte: %d", ch);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2590 return NGX_ERROR;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2591 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2592 state = ngx_http_fastcgi_st_request_id_lo;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2593 break;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2594
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2595 case ngx_http_fastcgi_st_request_id_lo:
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2596 if (ch != 1) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2597 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2598 "upstream sent unexpected FastCGI "
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2599 "request id low byte: %d", ch);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2600 return NGX_ERROR;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2601 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2602 state = ngx_http_fastcgi_st_content_length_hi;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2603 break;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2604
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2605 case ngx_http_fastcgi_st_content_length_hi:
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2606 f->length = ch << 8;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2607 state = ngx_http_fastcgi_st_content_length_lo;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2608 break;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2609
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2610 case ngx_http_fastcgi_st_content_length_lo:
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2611 f->length |= (size_t) ch;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2612 state = ngx_http_fastcgi_st_padding_length;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2613 break;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2614
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2615 case ngx_http_fastcgi_st_padding_length:
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2616 f->padding = (size_t) ch;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2617 state = ngx_http_fastcgi_st_reserved;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2618 break;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2619
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2620 case ngx_http_fastcgi_st_reserved:
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2621 state = ngx_http_fastcgi_st_data;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2622
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2623 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2624 "http fastcgi record length: %z", f->length);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2625
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2626 f->pos = p + 1;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2627 f->state = state;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2628
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2629 return NGX_OK;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2630
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2631 /* suppress warning */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2632 case ngx_http_fastcgi_st_data:
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2633 case ngx_http_fastcgi_st_padding:
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2634 break;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2635 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2636 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2637
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2638 f->state = state;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2639
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2640 return NGX_AGAIN;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2641 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2642
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2643
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
2644 static void
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
2645 ngx_http_fastcgi_abort_request(ngx_http_request_t *r)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2646 {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2647 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2648 "abort http fastcgi request");
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2649
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2650 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2651 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2652
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2653
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
2654 static void
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
2655 ngx_http_fastcgi_finalize_request(ngx_http_request_t *r, ngx_int_t rc)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2656 {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2657 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2658 "finalize http fastcgi request");
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2659
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2660 return;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2661 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2662
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2663
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2664 static ngx_int_t
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2665 ngx_http_fastcgi_add_variables(ngx_conf_t *cf)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2666 {
6474
Ruslan Ermilov <ru@nginx.com>
parents: 6467
diff changeset
2667 ngx_http_variable_t *var, *v;
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
2668
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
2669 for (v = ngx_http_fastcgi_vars; v->name.len; v++) {
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
2670 var = ngx_http_add_variable(cf, &v->name, v->flags);
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
2671 if (var == NULL) {
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
2672 return NGX_ERROR;
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
2673 }
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
2674
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
2675 var->get_handler = v->get_handler;
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
2676 var->data = v->data;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2677 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2678
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2679 return NGX_OK;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2680 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2681
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2682
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
2683 static void *
5951
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
2684 ngx_http_fastcgi_create_main_conf(ngx_conf_t *cf)
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
2685 {
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
2686 ngx_http_fastcgi_main_conf_t *conf;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
2687
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
2688 conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_fastcgi_main_conf_t));
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
2689 if (conf == NULL) {
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
2690 return NULL;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
2691 }
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
2692
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
2693 #if (NGX_HTTP_CACHE)
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
2694 if (ngx_array_init(&conf->caches, cf->pool, 4,
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
2695 sizeof(ngx_http_file_cache_t *))
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
2696 != NGX_OK)
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
2697 {
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
2698 return NULL;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
2699 }
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
2700 #endif
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
2701
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
2702 return conf;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
2703 }
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
2704
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
2705
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
2706 static void *
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
2707 ngx_http_fastcgi_create_loc_conf(ngx_conf_t *cf)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2708 {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2709 ngx_http_fastcgi_loc_conf_t *conf;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2710
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
2711 conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_fastcgi_loc_conf_t));
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
2712 if (conf == NULL) {
2912
c7d57b539248 return NULL instead of NGX_CONF_ERROR on a create conf failure
Igor Sysoev <igor@sysoev.ru>
parents: 2895
diff changeset
2713 return NULL;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2714 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2715
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2716 /*
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2717 * set by ngx_pcalloc():
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2718 *
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2719 * conf->upstream.bufs.num = 0;
2786
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2729
diff changeset
2720 * conf->upstream.ignore_headers = 0;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2721 * conf->upstream.next_upstream = 0;
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
2722 * conf->upstream.cache_zone = NULL;
2875
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
2723 * conf->upstream.cache_use_stale = 0;
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
2724 * conf->upstream.cache_methods = 0;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2725 * conf->upstream.temp_path = NULL;
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
2726 * conf->upstream.hide_headers_hash = { NULL, 0 };
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2727 * conf->upstream.uri = { 0, NULL };
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2728 * conf->upstream.location = NULL;
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
2729 * conf->upstream.store_lengths = NULL;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
2730 * conf->upstream.store_values = NULL;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2731 *
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3494
diff changeset
2732 * conf->index.len = { 0, NULL };
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2733 */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2734
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
2735 conf->upstream.store = NGX_CONF_UNSET;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
2736 conf->upstream.store_access = NGX_CONF_UNSET_UINT;
5832
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5829
diff changeset
2737 conf->upstream.next_upstream_tries = NGX_CONF_UNSET_UINT;
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2738 conf->upstream.buffering = NGX_CONF_UNSET;
6052
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
2739 conf->upstream.request_buffering = NGX_CONF_UNSET;
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
2740 conf->upstream.ignore_client_abort = NGX_CONF_UNSET;
5874
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5847
diff changeset
2741 conf->upstream.force_ranges = NGX_CONF_UNSET;
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2742
5008
fd84344f1df7 Fixed and improved the "*_bind" directives of proxying modules.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
2743 conf->upstream.local = NGX_CONF_UNSET_PTR;
fd84344f1df7 Fixed and improved the "*_bind" directives of proxying modules.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
2744
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2745 conf->upstream.connect_timeout = NGX_CONF_UNSET_MSEC;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2746 conf->upstream.send_timeout = NGX_CONF_UNSET_MSEC;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
2747 conf->upstream.read_timeout = NGX_CONF_UNSET_MSEC;
5832
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5829
diff changeset
2748 conf->upstream.next_upstream_timeout = NGX_CONF_UNSET_MSEC;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
2749
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2750 conf->upstream.send_lowat = NGX_CONF_UNSET_SIZE;
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2751 conf->upstream.buffer_size = NGX_CONF_UNSET_SIZE;
5883
973ee2276300 Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5874
diff changeset
2752 conf->upstream.limit_rate = NGX_CONF_UNSET_SIZE;
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2753
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2754 conf->upstream.busy_buffers_size_conf = NGX_CONF_UNSET_SIZE;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2755 conf->upstream.max_temp_file_size_conf = NGX_CONF_UNSET_SIZE;
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2756 conf->upstream.temp_file_write_size_conf = NGX_CONF_UNSET_SIZE;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2757
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2758 conf->upstream.pass_request_headers = NGX_CONF_UNSET;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2759 conf->upstream.pass_request_body = NGX_CONF_UNSET;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2760
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
2761 #if (NGX_HTTP_CACHE)
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
2762 conf->upstream.cache = NGX_CONF_UNSET;
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
2763 conf->upstream.cache_min_uses = NGX_CONF_UNSET_UINT;
6793
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
2764 conf->upstream.cache_max_range_offset = NGX_CONF_UNSET;
3699
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3692
diff changeset
2765 conf->upstream.cache_bypass = NGX_CONF_UNSET_PTR;
3526
62a4fd1e6e2c proxy_no_cache and fastcgi_no_cache
Igor Sysoev <igor@sysoev.ru>
parents: 3523
diff changeset
2766 conf->upstream.no_cache = NGX_CONF_UNSET_PTR;
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
2767 conf->upstream.cache_valid = NGX_CONF_UNSET_PTR;
4386
92deb73393f7 Cache lock support for fastcgi, scgi, uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4329
diff changeset
2768 conf->upstream.cache_lock = NGX_CONF_UNSET;
92deb73393f7 Cache lock support for fastcgi, scgi, uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4329
diff changeset
2769 conf->upstream.cache_lock_timeout = NGX_CONF_UNSET_MSEC;
5905
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5883
diff changeset
2770 conf->upstream.cache_lock_age = NGX_CONF_UNSET_MSEC;
5441
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5394
diff changeset
2771 conf->upstream.cache_revalidate = NGX_CONF_UNSET;
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
2772 #endif
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
2773
1701
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1700
diff changeset
2774 conf->upstream.hide_headers = NGX_CONF_UNSET_PTR;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1700
diff changeset
2775 conf->upstream.pass_headers = NGX_CONF_UNSET_PTR;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1700
diff changeset
2776
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
2777 conf->upstream.intercept_errors = NGX_CONF_UNSET;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2778
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2779 /* "fastcgi_cyclic_temp_file" is disabled */
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2780 conf->upstream.cyclic_temp_file = 0;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2781
5394
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2782 conf->upstream.change_buffering = 1;
8c827bb1b2b6 FastCGI: non-buffered mode support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
2783
1452
cd586e963db0 change ngx_conf_merge_ptr_value() and update fastcgi_catch_stderr
Igor Sysoev <igor@sysoev.ru>
parents: 1295
diff changeset
2784 conf->catch_stderr = NGX_CONF_UNSET_PTR;
cd586e963db0 change ngx_conf_merge_ptr_value() and update fastcgi_catch_stderr
Igor Sysoev <igor@sysoev.ru>
parents: 1295
diff changeset
2785
4122
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2786 conf->keep_conn = NGX_CONF_UNSET;
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
2787
3976
215fe9223419 update r3945 with more descriptive error message
Igor Sysoev <igor@sysoev.ru>
parents: 3879
diff changeset
2788 ngx_str_set(&conf->upstream.module, "fastcgi");
215fe9223419 update r3945 with more descriptive error message
Igor Sysoev <igor@sysoev.ru>
parents: 3879
diff changeset
2789
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2790 return conf;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2791 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2792
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2793
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
2794 static char *
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
2795 ngx_http_fastcgi_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2796 {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2797 ngx_http_fastcgi_loc_conf_t *prev = parent;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2798 ngx_http_fastcgi_loc_conf_t *conf = child;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2799
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2800 size_t size;
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
2801 ngx_int_t rc;
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
2802 ngx_hash_init_t hash;
3731
72cc5b789021 inherit proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass inside
Igor Sysoev <igor@sysoev.ru>
parents: 3729
diff changeset
2803 ngx_http_core_loc_conf_t *clcf;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2804
5948
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
2805 #if (NGX_HTTP_CACHE)
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
2806
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
2807 if (conf->upstream.store > 0) {
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
2808 conf->upstream.cache = 0;
5948
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
2809 }
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
2810
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
2811 if (conf->upstream.cache > 0) {
5948
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
2812 conf->upstream.store = 0;
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
2813 }
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
2814
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
2815 #endif
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
2816
5940
e3b3b89d74e8 Upstream: fixed inheritance of proxy_store and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5938
diff changeset
2817 if (conf->upstream.store == NGX_CONF_UNSET) {
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
2818 ngx_conf_merge_value(conf->upstream.store,
2894
d26f4e80c71f style fix
Igor Sysoev <igor@sysoev.ru>
parents: 2875
diff changeset
2819 prev->upstream.store, 0);
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
2820
5947
d9025ea1f5a5 Upstream: simplified proxy_store and friends configuration code.
Valentin Bartenev <vbart@nginx.com>
parents: 5940
diff changeset
2821 conf->upstream.store_lengths = prev->upstream.store_lengths;
d9025ea1f5a5 Upstream: simplified proxy_store and friends configuration code.
Valentin Bartenev <vbart@nginx.com>
parents: 5940
diff changeset
2822 conf->upstream.store_values = prev->upstream.store_values;
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
2823 }
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
2824
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
2825 ngx_conf_merge_uint_value(conf->upstream.store_access,
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
2826 prev->upstream.store_access, 0600);
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1276
diff changeset
2827
5832
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5829
diff changeset
2828 ngx_conf_merge_uint_value(conf->upstream.next_upstream_tries,
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5829
diff changeset
2829 prev->upstream.next_upstream_tries, 0);
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5829
diff changeset
2830
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2831 ngx_conf_merge_value(conf->upstream.buffering,
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2832 prev->upstream.buffering, 1);
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2833
6052
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
2834 ngx_conf_merge_value(conf->upstream.request_buffering,
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
2835 prev->upstream.request_buffering, 1);
8ad78808a612 FastCGI: fastcgi_request_buffering.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5951
diff changeset
2836
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
2837 ngx_conf_merge_value(conf->upstream.ignore_client_abort,
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
2838 prev->upstream.ignore_client_abort, 0);
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
2839
5874
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5847
diff changeset
2840 ngx_conf_merge_value(conf->upstream.force_ranges,
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5847
diff changeset
2841 prev->upstream.force_ranges, 0);
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5847
diff changeset
2842
5008
fd84344f1df7 Fixed and improved the "*_bind" directives of proxying modules.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
2843 ngx_conf_merge_ptr_value(conf->upstream.local,
fd84344f1df7 Fixed and improved the "*_bind" directives of proxying modules.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
2844 prev->upstream.local, NULL);
fd84344f1df7 Fixed and improved the "*_bind" directives of proxying modules.
Ruslan Ermilov <ru@nginx.com>
parents: 4947
diff changeset
2845
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2846 ngx_conf_merge_msec_value(conf->upstream.connect_timeout,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2847 prev->upstream.connect_timeout, 60000);
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
2848
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2849 ngx_conf_merge_msec_value(conf->upstream.send_timeout,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2850 prev->upstream.send_timeout, 60000);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2851
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2852 ngx_conf_merge_msec_value(conf->upstream.read_timeout,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2853 prev->upstream.read_timeout, 60000);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2854
5832
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5829
diff changeset
2855 ngx_conf_merge_msec_value(conf->upstream.next_upstream_timeout,
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5829
diff changeset
2856 prev->upstream.next_upstream_timeout, 0);
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5829
diff changeset
2857
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
2858 ngx_conf_merge_size_value(conf->upstream.send_lowat,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
2859 prev->upstream.send_lowat, 0);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2860
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2861 ngx_conf_merge_size_value(conf->upstream.buffer_size,
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2862 prev->upstream.buffer_size,
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2863 (size_t) ngx_pagesize);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2864
5883
973ee2276300 Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5874
diff changeset
2865 ngx_conf_merge_size_value(conf->upstream.limit_rate,
973ee2276300 Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5874
diff changeset
2866 prev->upstream.limit_rate, 0);
973ee2276300 Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5874
diff changeset
2867
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
2868
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2869 ngx_conf_merge_bufs_value(conf->upstream.bufs, prev->upstream.bufs,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2870 8, ngx_pagesize);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2871
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2872 if (conf->upstream.bufs.num < 2) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2873 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2874 "there must be at least 2 \"fastcgi_buffers\"");
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2875 return NGX_CONF_ERROR;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2876 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2877
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2878
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2879 size = conf->upstream.buffer_size;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2880 if (size < conf->upstream.bufs.size) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2881 size = conf->upstream.bufs.size;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2882 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2883
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2884
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2885 ngx_conf_merge_size_value(conf->upstream.busy_buffers_size_conf,
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2886 prev->upstream.busy_buffers_size_conf,
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2887 NGX_CONF_UNSET_SIZE);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2888
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2889 if (conf->upstream.busy_buffers_size_conf == NGX_CONF_UNSET_SIZE) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2890 conf->upstream.busy_buffers_size = 2 * size;
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2891 } else {
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2892 conf->upstream.busy_buffers_size =
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2893 conf->upstream.busy_buffers_size_conf;
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2894 }
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2895
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2896 if (conf->upstream.busy_buffers_size < size) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2897 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
4593
834049edae24 Fixed grammar in error messages.
Ruslan Ermilov <ru@nginx.com>
parents: 4529
diff changeset
2898 "\"fastcgi_busy_buffers_size\" must be equal to or greater than "
834049edae24 Fixed grammar in error messages.
Ruslan Ermilov <ru@nginx.com>
parents: 4529
diff changeset
2899 "the maximum of the value of \"fastcgi_buffer_size\" and "
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2900 "one of the \"fastcgi_buffers\"");
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2901
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2902 return NGX_CONF_ERROR;
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2903 }
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2904
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2905 if (conf->upstream.busy_buffers_size
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2906 > (conf->upstream.bufs.num - 1) * conf->upstream.bufs.size)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2907 {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2908 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2909 "\"fastcgi_busy_buffers_size\" must be less than "
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2910 "the size of all \"fastcgi_buffers\" minus one buffer");
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2911
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2912 return NGX_CONF_ERROR;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2913 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2914
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2915
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2916 ngx_conf_merge_size_value(conf->upstream.temp_file_write_size_conf,
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2917 prev->upstream.temp_file_write_size_conf,
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2918 NGX_CONF_UNSET_SIZE);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2919
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2920 if (conf->upstream.temp_file_write_size_conf == NGX_CONF_UNSET_SIZE) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2921 conf->upstream.temp_file_write_size = 2 * size;
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2922 } else {
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2923 conf->upstream.temp_file_write_size =
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2924 conf->upstream.temp_file_write_size_conf;
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2925 }
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2926
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2927 if (conf->upstream.temp_file_write_size < size) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2928 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
4593
834049edae24 Fixed grammar in error messages.
Ruslan Ermilov <ru@nginx.com>
parents: 4529
diff changeset
2929 "\"fastcgi_temp_file_write_size\" must be equal to or greater "
834049edae24 Fixed grammar in error messages.
Ruslan Ermilov <ru@nginx.com>
parents: 4529
diff changeset
2930 "than the maximum of the value of \"fastcgi_buffer_size\" and "
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2931 "one of the \"fastcgi_buffers\"");
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2932
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2933 return NGX_CONF_ERROR;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2934 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2935
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2936
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2937 ngx_conf_merge_size_value(conf->upstream.max_temp_file_size_conf,
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2938 prev->upstream.max_temp_file_size_conf,
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2939 NGX_CONF_UNSET_SIZE);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2940
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2941 if (conf->upstream.max_temp_file_size_conf == NGX_CONF_UNSET_SIZE) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2942 conf->upstream.max_temp_file_size = 1024 * 1024 * 1024;
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2943 } else {
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2944 conf->upstream.max_temp_file_size =
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2945 conf->upstream.max_temp_file_size_conf;
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2946 }
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2947
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2948 if (conf->upstream.max_temp_file_size != 0
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
2949 && conf->upstream.max_temp_file_size < size)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2950 {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2951 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2952 "\"fastcgi_max_temp_file_size\" must be equal to zero to disable "
4593
834049edae24 Fixed grammar in error messages.
Ruslan Ermilov <ru@nginx.com>
parents: 4529
diff changeset
2953 "temporary files usage or must be equal to or greater than "
834049edae24 Fixed grammar in error messages.
Ruslan Ermilov <ru@nginx.com>
parents: 4529
diff changeset
2954 "the maximum of the value of \"fastcgi_buffer_size\" and "
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2955 "one of the \"fastcgi_buffers\"");
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2956
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2957 return NGX_CONF_ERROR;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2958 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2959
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2960
2786
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2729
diff changeset
2961 ngx_conf_merge_bitmask_value(conf->upstream.ignore_headers,
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2729
diff changeset
2962 prev->upstream.ignore_headers,
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2729
diff changeset
2963 NGX_CONF_BITMASK_SET);
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2729
diff changeset
2964
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2729
diff changeset
2965
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2966 ngx_conf_merge_bitmask_value(conf->upstream.next_upstream,
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
2967 prev->upstream.next_upstream,
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
2968 (NGX_CONF_BITMASK_SET
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
2969 |NGX_HTTP_UPSTREAM_FT_ERROR
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
2970 |NGX_HTTP_UPSTREAM_FT_TIMEOUT));
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2971
665
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
2972 if (conf->upstream.next_upstream & NGX_HTTP_UPSTREAM_FT_OFF) {
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
2973 conf->upstream.next_upstream = NGX_CONF_BITMASK_SET
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
2974 |NGX_HTTP_UPSTREAM_FT_OFF;
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
2975 }
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
2976
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2467
diff changeset
2977 if (ngx_conf_merge_path_value(cf, &conf->upstream.temp_path,
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2978 prev->upstream.temp_path,
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2467
diff changeset
2979 &ngx_http_fastcgi_temp_path)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2467
diff changeset
2980 != NGX_OK)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2467
diff changeset
2981 {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2467
diff changeset
2982 return NGX_CONF_ERROR;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2467
diff changeset
2983 }
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2984
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
2985 #if (NGX_HTTP_CACHE)
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
2986
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
2987 if (conf->upstream.cache == NGX_CONF_UNSET) {
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
2988 ngx_conf_merge_value(conf->upstream.cache,
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
2989 prev->upstream.cache, 0);
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
2990
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
2991 conf->upstream.cache_zone = prev->upstream.cache_zone;
5951
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
2992 conf->upstream.cache_value = prev->upstream.cache_value;
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
2993 }
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
2994
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
2995 if (conf->upstream.cache_zone && conf->upstream.cache_zone->data == NULL) {
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
2996 ngx_shm_zone_t *shm_zone;
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
2997
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
2998 shm_zone = conf->upstream.cache_zone;
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
2999
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3000 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3001 "\"fastcgi_cache\" zone \"%V\" is unknown",
2716
d5896f6608e8 move zone name from ngx_shm_zone_t to ngx_shm_t to use Win32 shared memory
Igor Sysoev <igor@sysoev.ru>
parents: 2661
diff changeset
3002 &shm_zone->shm.name);
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3003
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3004 return NGX_CONF_ERROR;
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3005 }
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3006
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3007 ngx_conf_merge_uint_value(conf->upstream.cache_min_uses,
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3008 prev->upstream.cache_min_uses, 1);
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3009
6793
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
3010 ngx_conf_merge_off_value(conf->upstream.cache_max_range_offset,
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
3011 prev->upstream.cache_max_range_offset,
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
3012 NGX_MAX_OFF_T_VALUE);
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
3013
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3014 ngx_conf_merge_bitmask_value(conf->upstream.cache_use_stale,
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3015 prev->upstream.cache_use_stale,
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3016 (NGX_CONF_BITMASK_SET
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3017 |NGX_HTTP_UPSTREAM_FT_OFF));
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3018
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3019 if (conf->upstream.cache_use_stale & NGX_HTTP_UPSTREAM_FT_OFF) {
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3020 conf->upstream.cache_use_stale = NGX_CONF_BITMASK_SET
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3021 |NGX_HTTP_UPSTREAM_FT_OFF;
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3022 }
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3023
4401
d45742815c90 Fixed proxy_cache_use_stale in "no live upstreams" case.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4386
diff changeset
3024 if (conf->upstream.cache_use_stale & NGX_HTTP_UPSTREAM_FT_ERROR) {
d45742815c90 Fixed proxy_cache_use_stale in "no live upstreams" case.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4386
diff changeset
3025 conf->upstream.cache_use_stale |= NGX_HTTP_UPSTREAM_FT_NOLIVE;
d45742815c90 Fixed proxy_cache_use_stale in "no live upstreams" case.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4386
diff changeset
3026 }
d45742815c90 Fixed proxy_cache_use_stale in "no live upstreams" case.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4386
diff changeset
3027
2875
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
3028 if (conf->upstream.cache_methods == 0) {
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
3029 conf->upstream.cache_methods = prev->upstream.cache_methods;
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
3030 }
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
3031
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
3032 conf->upstream.cache_methods |= NGX_HTTP_GET|NGX_HTTP_HEAD;
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
3033
3699
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3692
diff changeset
3034 ngx_conf_merge_ptr_value(conf->upstream.cache_bypass,
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3692
diff changeset
3035 prev->upstream.cache_bypass, NULL);
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3692
diff changeset
3036
3526
62a4fd1e6e2c proxy_no_cache and fastcgi_no_cache
Igor Sysoev <igor@sysoev.ru>
parents: 3523
diff changeset
3037 ngx_conf_merge_ptr_value(conf->upstream.no_cache,
62a4fd1e6e2c proxy_no_cache and fastcgi_no_cache
Igor Sysoev <igor@sysoev.ru>
parents: 3523
diff changeset
3038 prev->upstream.no_cache, NULL);
62a4fd1e6e2c proxy_no_cache and fastcgi_no_cache
Igor Sysoev <igor@sysoev.ru>
parents: 3523
diff changeset
3039
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3040 ngx_conf_merge_ptr_value(conf->upstream.cache_valid,
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3041 prev->upstream.cache_valid, NULL);
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3042
2661
8ace9dee8824 merge fastcgi_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2602
diff changeset
3043 if (conf->cache_key.value.data == NULL) {
8ace9dee8824 merge fastcgi_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2602
diff changeset
3044 conf->cache_key = prev->cache_key;
8ace9dee8824 merge fastcgi_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2602
diff changeset
3045 }
8ace9dee8824 merge fastcgi_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2602
diff changeset
3046
5829
906530c9ffd2 Added warning about unset cache keys.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5738
diff changeset
3047 if (conf->upstream.cache && conf->cache_key.value.data == NULL) {
906530c9ffd2 Added warning about unset cache keys.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5738
diff changeset
3048 ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
906530c9ffd2 Added warning about unset cache keys.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5738
diff changeset
3049 "no \"fastcgi_cache_key\" for \"fastcgi_cache\"");
906530c9ffd2 Added warning about unset cache keys.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5738
diff changeset
3050 }
906530c9ffd2 Added warning about unset cache keys.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5738
diff changeset
3051
4386
92deb73393f7 Cache lock support for fastcgi, scgi, uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4329
diff changeset
3052 ngx_conf_merge_value(conf->upstream.cache_lock,
92deb73393f7 Cache lock support for fastcgi, scgi, uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4329
diff changeset
3053 prev->upstream.cache_lock, 0);
92deb73393f7 Cache lock support for fastcgi, scgi, uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4329
diff changeset
3054
92deb73393f7 Cache lock support for fastcgi, scgi, uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4329
diff changeset
3055 ngx_conf_merge_msec_value(conf->upstream.cache_lock_timeout,
92deb73393f7 Cache lock support for fastcgi, scgi, uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4329
diff changeset
3056 prev->upstream.cache_lock_timeout, 5000);
92deb73393f7 Cache lock support for fastcgi, scgi, uwsgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4329
diff changeset
3057
5905
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5883
diff changeset
3058 ngx_conf_merge_msec_value(conf->upstream.cache_lock_age,
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5883
diff changeset
3059 prev->upstream.cache_lock_age, 5000);
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5883
diff changeset
3060
5441
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5394
diff changeset
3061 ngx_conf_merge_value(conf->upstream.cache_revalidate,
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5394
diff changeset
3062 prev->upstream.cache_revalidate, 0);
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5394
diff changeset
3063
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3064 #endif
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3065
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3066 ngx_conf_merge_value(conf->upstream.pass_request_headers,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3067 prev->upstream.pass_request_headers, 1);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3068 ngx_conf_merge_value(conf->upstream.pass_request_body,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3069 prev->upstream.pass_request_body, 1);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3070
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
3071 ngx_conf_merge_value(conf->upstream.intercept_errors,
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 655
diff changeset
3072 prev->upstream.intercept_errors, 0);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3073
1228
863c3490103e fastcgi_catch_stderr
Igor Sysoev <igor@sysoev.ru>
parents: 1142
diff changeset
3074 ngx_conf_merge_ptr_value(conf->catch_stderr, prev->catch_stderr, NULL);
863c3490103e fastcgi_catch_stderr
Igor Sysoev <igor@sysoev.ru>
parents: 1142
diff changeset
3075
4122
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
3076 ngx_conf_merge_value(conf->keep_conn, prev->keep_conn, 0);
c7fae0daeb57 Keepalive support in fastcgi.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4015
diff changeset
3077
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
3078
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3079 ngx_conf_merge_str_value(conf->index, prev->index, "");
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3080
1701
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1700
diff changeset
3081 hash.max_size = 512;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1700
diff changeset
3082 hash.bucket_size = ngx_align(64, ngx_cacheline_size);
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1700
diff changeset
3083 hash.name = "fastcgi_hide_headers_hash";
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1700
diff changeset
3084
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1700
diff changeset
3085 if (ngx_http_upstream_hide_headers_hash(cf, &conf->upstream,
3670
2728c4e4a9ae do not use a cache headers set to hide
Igor Sysoev <igor@sysoev.ru>
parents: 3667
diff changeset
3086 &prev->upstream, ngx_http_fastcgi_hide_headers, &hash)
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
3087 != NGX_OK)
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
3088 {
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
3089 return NGX_CONF_ERROR;
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
3090 }
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
3091
5938
cd2abf7e7740 Upstream: fixed unexpected inheritance into limit_except blocks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5937
diff changeset
3092 clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
cd2abf7e7740 Upstream: fixed unexpected inheritance into limit_except blocks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5937
diff changeset
3093
cd2abf7e7740 Upstream: fixed unexpected inheritance into limit_except blocks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5937
diff changeset
3094 if (clcf->noname
cd2abf7e7740 Upstream: fixed unexpected inheritance into limit_except blocks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5937
diff changeset
3095 && conf->upstream.upstream == NULL && conf->fastcgi_lengths == NULL)
cd2abf7e7740 Upstream: fixed unexpected inheritance into limit_except blocks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5937
diff changeset
3096 {
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 777
diff changeset
3097 conf->upstream.upstream = prev->upstream.upstream;
2390
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3098 conf->fastcgi_lengths = prev->fastcgi_lengths;
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3099 conf->fastcgi_values = prev->fastcgi_values;
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3100 }
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3101
5938
cd2abf7e7740 Upstream: fixed unexpected inheritance into limit_except blocks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5937
diff changeset
3102 if (clcf->lmt_excpt && clcf->handler == NULL
cd2abf7e7740 Upstream: fixed unexpected inheritance into limit_except blocks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5937
diff changeset
3103 && (conf->upstream.upstream || conf->fastcgi_lengths))
cd2abf7e7740 Upstream: fixed unexpected inheritance into limit_except blocks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5937
diff changeset
3104 {
cd2abf7e7740 Upstream: fixed unexpected inheritance into limit_except blocks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5937
diff changeset
3105 clcf->handler = ngx_http_fastcgi_handler;
3731
72cc5b789021 inherit proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass inside
Igor Sysoev <igor@sysoev.ru>
parents: 3729
diff changeset
3106 }
72cc5b789021 inherit proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass inside
Igor Sysoev <igor@sysoev.ru>
parents: 3729
diff changeset
3107
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3108 #if (NGX_PCRE)
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3109 if (conf->split_regex == NULL) {
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3110 conf->split_regex = prev->split_regex;
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3111 conf->split_name = prev->split_name;
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3112 }
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3113 #endif
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3114
5907
195561ef367f Upstream: moved header initializations to separate functions.
Roman Arutyunyan <arut@nginx.com>
parents: 5905
diff changeset
3115 if (conf->params_source == NULL) {
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3116 conf->params = prev->params;
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3117 #if (NGX_HTTP_CACHE)
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3118 conf->params_cache = prev->params_cache;
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3119 #endif
5907
195561ef367f Upstream: moved header initializations to separate functions.
Roman Arutyunyan <arut@nginx.com>
parents: 5905
diff changeset
3120 conf->params_source = prev->params_source;
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3121 }
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3122
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3123 rc = ngx_http_fastcgi_init_params(cf, conf, &conf->params, NULL);
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3124 if (rc != NGX_OK) {
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3125 return NGX_CONF_ERROR;
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3126 }
5907
195561ef367f Upstream: moved header initializations to separate functions.
Roman Arutyunyan <arut@nginx.com>
parents: 5905
diff changeset
3127
195561ef367f Upstream: moved header initializations to separate functions.
Roman Arutyunyan <arut@nginx.com>
parents: 5905
diff changeset
3128 #if (NGX_HTTP_CACHE)
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3129
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3130 if (conf->upstream.cache) {
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3131 rc = ngx_http_fastcgi_init_params(cf, conf, &conf->params_cache,
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3132 ngx_http_fastcgi_cache_headers);
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3133 if (rc != NGX_OK) {
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3134 return NGX_CONF_ERROR;
5907
195561ef367f Upstream: moved header initializations to separate functions.
Roman Arutyunyan <arut@nginx.com>
parents: 5905
diff changeset
3135 }
195561ef367f Upstream: moved header initializations to separate functions.
Roman Arutyunyan <arut@nginx.com>
parents: 5905
diff changeset
3136 }
195561ef367f Upstream: moved header initializations to separate functions.
Roman Arutyunyan <arut@nginx.com>
parents: 5905
diff changeset
3137
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3138 #endif
4277
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3139
6747
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6530
diff changeset
3140 /*
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6530
diff changeset
3141 * special handling to preserve conf->params in the "http" section
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6530
diff changeset
3142 * to inherit it to all servers
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6530
diff changeset
3143 */
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6530
diff changeset
3144
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6530
diff changeset
3145 if (prev->params.hash.buckets == NULL
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6530
diff changeset
3146 && conf->params_source == prev->params_source)
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6530
diff changeset
3147 {
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6530
diff changeset
3148 prev->params = conf->params;
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6530
diff changeset
3149 #if (NGX_HTTP_CACHE)
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6530
diff changeset
3150 prev->params_cache = conf->params_cache;
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6530
diff changeset
3151 #endif
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6530
diff changeset
3152 }
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6530
diff changeset
3153
4277
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3154 return NGX_CONF_OK;
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3155 }
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3156
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3157
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3158 static ngx_int_t
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3159 ngx_http_fastcgi_init_params(ngx_conf_t *cf, ngx_http_fastcgi_loc_conf_t *conf,
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3160 ngx_http_fastcgi_params_t *params, ngx_keyval_t *default_params)
4277
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3161 {
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3162 u_char *p;
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3163 size_t size;
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3164 uintptr_t *code;
4278
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3165 ngx_uint_t i, nsrc;
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3166 ngx_array_t headers_names, params_merged;
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3167 ngx_keyval_t *h;
4277
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3168 ngx_hash_key_t *hk;
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3169 ngx_hash_init_t hash;
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3170 ngx_http_upstream_param_t *src, *s;
4277
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3171 ngx_http_script_compile_t sc;
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3172 ngx_http_script_copy_code_t *copy;
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3173
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3174 if (params->hash.buckets) {
5907
195561ef367f Upstream: moved header initializations to separate functions.
Roman Arutyunyan <arut@nginx.com>
parents: 5905
diff changeset
3175 return NGX_OK;
4278
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3176 }
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3177
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3178 if (conf->params_source == NULL && default_params == NULL) {
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3179 params->hash.buckets = (void *) 1;
4278
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3180 return NGX_OK;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3181 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3182
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3183 params->lengths = ngx_array_create(cf->pool, 64, 1);
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3184 if (params->lengths == NULL) {
4277
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3185 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3186 }
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
3187
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3188 params->values = ngx_array_create(cf->pool, 512, 1);
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3189 if (params->values == NULL) {
4277
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3190 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3191 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3192
3560
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3193 if (ngx_array_init(&headers_names, cf->temp_pool, 4, sizeof(ngx_hash_key_t))
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3194 != NGX_OK)
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3195 {
4277
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3196 return NGX_ERROR;
3560
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3197 }
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3198
4278
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3199 if (conf->params_source) {
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3200 src = conf->params_source->elts;
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3201 nsrc = conf->params_source->nelts;
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3202
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3203 } else {
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3204 src = NULL;
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3205 nsrc = 0;
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3206 }
3563
90d7227d47bf do not pass if-... headers for cacheable fastcgi responses
Igor Sysoev <igor@sysoev.ru>
parents: 3562
diff changeset
3207
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3208 if (default_params) {
4329
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
3209 if (ngx_array_init(&params_merged, cf->temp_pool, 4,
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
3210 sizeof(ngx_http_upstream_param_t))
4278
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3211 != NGX_OK)
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3212 {
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3213 return NGX_ERROR;
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3214 }
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3215
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3216 for (i = 0; i < nsrc; i++) {
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3217
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3218 s = ngx_array_push(&params_merged);
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3219 if (s == NULL) {
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3220 return NGX_ERROR;
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3221 }
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3222
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3223 *s = src[i];
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3224 }
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3225
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3226 h = default_params;
4278
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3227
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3228 while (h->key.len) {
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3229
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3230 src = params_merged.elts;
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3231 nsrc = params_merged.nelts;
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3232
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3233 for (i = 0; i < nsrc; i++) {
3563
90d7227d47bf do not pass if-... headers for cacheable fastcgi responses
Igor Sysoev <igor@sysoev.ru>
parents: 3562
diff changeset
3234 if (ngx_strcasecmp(h->key.data, src[i].key.data) == 0) {
90d7227d47bf do not pass if-... headers for cacheable fastcgi responses
Igor Sysoev <igor@sysoev.ru>
parents: 3562
diff changeset
3235 goto next;
90d7227d47bf do not pass if-... headers for cacheable fastcgi responses
Igor Sysoev <igor@sysoev.ru>
parents: 3562
diff changeset
3236 }
90d7227d47bf do not pass if-... headers for cacheable fastcgi responses
Igor Sysoev <igor@sysoev.ru>
parents: 3562
diff changeset
3237 }
90d7227d47bf do not pass if-... headers for cacheable fastcgi responses
Igor Sysoev <igor@sysoev.ru>
parents: 3562
diff changeset
3238
4278
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3239 s = ngx_array_push(&params_merged);
3563
90d7227d47bf do not pass if-... headers for cacheable fastcgi responses
Igor Sysoev <igor@sysoev.ru>
parents: 3562
diff changeset
3240 if (s == NULL) {
4277
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3241 return NGX_ERROR;
3563
90d7227d47bf do not pass if-... headers for cacheable fastcgi responses
Igor Sysoev <igor@sysoev.ru>
parents: 3562
diff changeset
3242 }
90d7227d47bf do not pass if-... headers for cacheable fastcgi responses
Igor Sysoev <igor@sysoev.ru>
parents: 3562
diff changeset
3243
4329
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
3244 s->key = h->key;
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
3245 s->value = h->value;
5451
e68af4e3396f Upstream: skip empty cache headers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5441
diff changeset
3246 s->skip_empty = 1;
3563
90d7227d47bf do not pass if-... headers for cacheable fastcgi responses
Igor Sysoev <igor@sysoev.ru>
parents: 3562
diff changeset
3247
90d7227d47bf do not pass if-... headers for cacheable fastcgi responses
Igor Sysoev <igor@sysoev.ru>
parents: 3562
diff changeset
3248 next:
90d7227d47bf do not pass if-... headers for cacheable fastcgi responses
Igor Sysoev <igor@sysoev.ru>
parents: 3562
diff changeset
3249
90d7227d47bf do not pass if-... headers for cacheable fastcgi responses
Igor Sysoev <igor@sysoev.ru>
parents: 3562
diff changeset
3250 h++;
90d7227d47bf do not pass if-... headers for cacheable fastcgi responses
Igor Sysoev <igor@sysoev.ru>
parents: 3562
diff changeset
3251 }
4278
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3252
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3253 src = params_merged.elts;
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3254 nsrc = params_merged.nelts;
3563
90d7227d47bf do not pass if-... headers for cacheable fastcgi responses
Igor Sysoev <igor@sysoev.ru>
parents: 3562
diff changeset
3255 }
90d7227d47bf do not pass if-... headers for cacheable fastcgi responses
Igor Sysoev <igor@sysoev.ru>
parents: 3562
diff changeset
3256
4278
f57229cba7ad Fixed fastcgi/scgi/uwsgi_param inheritance.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4277
diff changeset
3257 for (i = 0; i < nsrc; i++) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3258
3560
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3259 if (src[i].key.len > sizeof("HTTP_") - 1
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3260 && ngx_strncmp(src[i].key.data, "HTTP_", sizeof("HTTP_") - 1) == 0)
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3261 {
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3262 hk = ngx_array_push(&headers_names);
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3263 if (hk == NULL) {
4277
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3264 return NGX_ERROR;
3560
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3265 }
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3266
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3267 hk->key.len = src[i].key.len - 5;
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3268 hk->key.data = src[i].key.data + 5;
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3269 hk->key_hash = ngx_hash_key_lc(hk->key.data, hk->key.len);
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3270 hk->value = (void *) 1;
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3271
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3272 if (src[i].value.len == 0) {
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3273 continue;
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3274 }
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3275 }
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3276
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3277 copy = ngx_array_push_n(params->lengths,
3558
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3278 sizeof(ngx_http_script_copy_code_t));
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3279 if (copy == NULL) {
4277
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3280 return NGX_ERROR;
3558
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3281 }
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3282
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3283 copy->code = (ngx_http_script_code_pt) ngx_http_script_copy_len_code;
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3284 copy->len = src[i].key.len;
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3285
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3286 copy = ngx_array_push_n(params->lengths,
4329
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
3287 sizeof(ngx_http_script_copy_code_t));
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
3288 if (copy == NULL) {
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
3289 return NGX_ERROR;
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
3290 }
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
3291
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
3292 copy->code = (ngx_http_script_code_pt) ngx_http_script_copy_len_code;
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
3293 copy->len = src[i].skip_empty;
31e6bfca10a5 FastCGI: added "if_not_empty" flag support to the "fastcgi_param" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4278
diff changeset
3294
3558
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3295
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3296 size = (sizeof(ngx_http_script_copy_code_t)
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3297 + src[i].key.len + sizeof(uintptr_t) - 1)
4277
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3298 & ~(sizeof(uintptr_t) - 1);
3558
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3299
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3300 copy = ngx_array_push_n(params->values, size);
3558
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3301 if (copy == NULL) {
4277
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3302 return NGX_ERROR;
3558
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3303 }
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3304
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3305 copy->code = ngx_http_script_copy_code;
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3306 copy->len = src[i].key.len;
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3307
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3308 p = (u_char *) copy + sizeof(ngx_http_script_copy_code_t);
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3309 ngx_memcpy(p, src[i].key.data, src[i].key.len);
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3310
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3311
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3312 ngx_memzero(&sc, sizeof(ngx_http_script_compile_t));
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3313
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3314 sc.cf = cf;
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3315 sc.source = &src[i].value;
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3316 sc.flushes = &params->flushes;
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3317 sc.lengths = &params->lengths;
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3318 sc.values = &params->values;
3558
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3319
83c9a10ec029 remove the special static fastcgi_param values processing,
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3320 if (ngx_http_script_compile(&sc) != NGX_OK) {
4277
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3321 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3322 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3323
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3324 code = ngx_array_push_n(params->lengths, sizeof(uintptr_t));
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3325 if (code == NULL) {
4277
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3326 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3327 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3328
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3329 *code = (uintptr_t) NULL;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3330
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3331
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3332 code = ngx_array_push_n(params->values, sizeof(uintptr_t));
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3333 if (code == NULL) {
4277
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3334 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3335 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3336
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3337 *code = (uintptr_t) NULL;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3338 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3339
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3340 code = ngx_array_push_n(params->lengths, sizeof(uintptr_t));
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3341 if (code == NULL) {
4277
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3342 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3343 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3344
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3345 *code = (uintptr_t) NULL;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3346
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3347 params->number = headers_names.nelts;
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3348
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3349 hash.hash = &params->hash;
3560
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3350 hash.key = ngx_hash_key_lc;
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3351 hash.max_size = 512;
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3352 hash.bucket_size = 64;
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3353 hash.name = "fastcgi_params_hash";
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3354 hash.pool = cf->pool;
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3355 hash.temp_pool = NULL;
a36c63c6d26a allow fastcgi_param to override client headers using HTTP_ parameters
Igor Sysoev <igor@sysoev.ru>
parents: 3559
diff changeset
3356
4277
e4b8255e44c3 Separate functions to merge fastcgi/scgi/uwsgi params.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4273
diff changeset
3357 return ngx_hash_init(&hash, headers_names.elts, headers_names.nelts);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3358 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3359
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3360
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
3361 static ngx_int_t
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
3362 ngx_http_fastcgi_script_name_variable(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
3363 ngx_http_variable_value_t *v, uintptr_t data)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3364 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3365 u_char *p;
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3366 ngx_http_fastcgi_ctx_t *f;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3367 ngx_http_fastcgi_loc_conf_t *flcf;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3368
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3369 flcf = ngx_http_get_module_loc_conf(r, ngx_http_fastcgi_module);
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3370
2467
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3371 f = ngx_http_fastcgi_split(r, flcf);
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3372
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3373 if (f == NULL) {
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3374 return NGX_ERROR;
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3375 }
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3376
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3377 if (f->script_name.len == 0
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3378 || f->script_name.data[f->script_name.len - 1] != '/')
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3379 {
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3380 v->len = f->script_name.len;
1097
df8cdf626c87 fix segfault when $fastcgi_script_name is used in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 1037
diff changeset
3381 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1563
diff changeset
3382 v->no_cacheable = 0;
1097
df8cdf626c87 fix segfault when $fastcgi_script_name is used in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 1037
diff changeset
3383 v->not_found = 0;
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3384 v->data = f->script_name.data;
1097
df8cdf626c87 fix segfault when $fastcgi_script_name is used in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 1037
diff changeset
3385
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
3386 return NGX_OK;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3387 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3388
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3389 v->len = f->script_name.len + flcf->index.len;
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3390
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3391 v->data = ngx_pnalloc(r->pool, v->len);
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3392 if (v->data == NULL) {
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3393 return NGX_ERROR;
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3394 }
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3395
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3396 p = ngx_copy(v->data, f->script_name.data, f->script_name.len);
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3397 ngx_memcpy(p, flcf->index.data, flcf->index.len);
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3398
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
3399 return NGX_OK;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3400 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3401
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3402
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3403 static ngx_int_t
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3404 ngx_http_fastcgi_path_info_variable(ngx_http_request_t *r,
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3405 ngx_http_variable_value_t *v, uintptr_t data)
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3406 {
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3407 ngx_http_fastcgi_ctx_t *f;
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3408 ngx_http_fastcgi_loc_conf_t *flcf;
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3409
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3410 flcf = ngx_http_get_module_loc_conf(r, ngx_http_fastcgi_module);
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3411
2467
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3412 f = ngx_http_fastcgi_split(r, flcf);
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3413
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3414 if (f == NULL) {
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3415 return NGX_ERROR;
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3416 }
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3417
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3418 v->len = f->path_info.len;
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3419 v->valid = 1;
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3420 v->no_cacheable = 0;
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3421 v->not_found = 0;
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3422 v->data = f->path_info.data;
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3423
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3424 return NGX_OK;
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3425 }
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3426
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3427
2467
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3428 static ngx_http_fastcgi_ctx_t *
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3429 ngx_http_fastcgi_split(ngx_http_request_t *r, ngx_http_fastcgi_loc_conf_t *flcf)
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3430 {
2467
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3431 ngx_http_fastcgi_ctx_t *f;
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3432 #if (NGX_PCRE)
2467
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3433 ngx_int_t n;
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3434 int captures[(1 + 2) * 3];
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3435
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3436 f = ngx_http_get_module_ctx(r, ngx_http_fastcgi_module);
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3437
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3438 if (f == NULL) {
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3439 f = ngx_pcalloc(r->pool, sizeof(ngx_http_fastcgi_ctx_t));
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3440 if (f == NULL) {
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3441 return NULL;
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3442 }
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3443
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3444 ngx_http_set_ctx(r, f, ngx_http_fastcgi_module);
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3445 }
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3446
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3447 if (f->script_name.len) {
2467
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3448 return f;
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3449 }
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3450
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3451 if (flcf->split_regex == NULL) {
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3452 f->script_name = r->uri;
2467
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3453 return f;
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3454 }
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3455
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3456 n = ngx_regex_exec(flcf->split_regex, &r->uri, captures, (1 + 2) * 3);
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3457
3325
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3458 if (n >= 0) { /* match */
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3459 f->script_name.len = captures[3] - captures[2];
3735
1ba712d077d1 fix fastcgi_split_path_info, if URI was not fully captured
Igor Sysoev <igor@sysoev.ru>
parents: 3731
diff changeset
3460 f->script_name.data = r->uri.data + captures[2];
3325
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3461
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3462 f->path_info.len = captures[5] - captures[4];
3735
1ba712d077d1 fix fastcgi_split_path_info, if URI was not fully captured
Igor Sysoev <igor@sysoev.ru>
parents: 3731
diff changeset
3463 f->path_info.data = r->uri.data + captures[4];
3325
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3464
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3465 return f;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3466 }
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3467
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3468 if (n == NGX_REGEX_NO_MATCHED) {
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3469 f->script_name = r->uri;
2467
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3470 return f;
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3471 }
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3472
3325
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3473 ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3474 ngx_regex_exec_n " failed: %i on \"%V\" using \"%V\"",
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3475 n, &r->uri, &flcf->split_name);
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3476 return NULL;
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3477
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3478 #else
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3479
2467
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3480 f = ngx_http_get_module_ctx(r, ngx_http_fastcgi_module);
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3481
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3482 if (f == NULL) {
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3483 f = ngx_pcalloc(r->pool, sizeof(ngx_http_fastcgi_ctx_t));
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3484 if (f == NULL) {
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3485 return NULL;
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3486 }
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3487
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3488 ngx_http_set_ctx(r, f, ngx_http_fastcgi_module);
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3489 }
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3490
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3491 f->script_name = r->uri;
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3492
2467
84f2bef92007 fix segfault if $fastcgi_script_name or $fastcgi_path_info were used before
Igor Sysoev <igor@sysoev.ru>
parents: 2443
diff changeset
3493 return f;
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3494
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3495 #endif
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3496 }
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3497
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3498
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3499 static char *
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3500 ngx_http_fastcgi_pass(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3501 {
2390
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3502 ngx_http_fastcgi_loc_conf_t *flcf = conf;
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3503
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3504 ngx_url_t u;
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3505 ngx_str_t *value, *url;
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3506 ngx_uint_t n;
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3507 ngx_http_core_loc_conf_t *clcf;
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3508 ngx_http_script_compile_t sc;
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3509
2391
d88e757cc7d8 delete surplus upstream.schema field
Igor Sysoev <igor@sysoev.ru>
parents: 2390
diff changeset
3510 if (flcf->upstream.upstream || flcf->fastcgi_lengths) {
555
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
3511 return "is duplicate";
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
3512 }
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
3513
2390
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3514 clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
2989
dff9764eaca2 do auto redirect for proxy_pass/fastcgi_pass with variables
Igor Sysoev <igor@sysoev.ru>
parents: 2927
diff changeset
3515
2390
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3516 clcf->handler = ngx_http_fastcgi_handler;
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3517
2989
dff9764eaca2 do auto redirect for proxy_pass/fastcgi_pass with variables
Igor Sysoev <igor@sysoev.ru>
parents: 2927
diff changeset
3518 if (clcf->name.data[clcf->name.len - 1] == '/') {
dff9764eaca2 do auto redirect for proxy_pass/fastcgi_pass with variables
Igor Sysoev <igor@sysoev.ru>
parents: 2927
diff changeset
3519 clcf->auto_redirect = 1;
dff9764eaca2 do auto redirect for proxy_pass/fastcgi_pass with variables
Igor Sysoev <igor@sysoev.ru>
parents: 2927
diff changeset
3520 }
dff9764eaca2 do auto redirect for proxy_pass/fastcgi_pass with variables
Igor Sysoev <igor@sysoev.ru>
parents: 2927
diff changeset
3521
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3522 value = cf->args->elts;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3523
2390
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3524 url = &value[1];
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3525
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3526 n = ngx_http_script_variables_count(url);
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3527
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3528 if (n) {
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3529
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3530 ngx_memzero(&sc, sizeof(ngx_http_script_compile_t));
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3531
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3532 sc.cf = cf;
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3533 sc.source = url;
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3534 sc.lengths = &flcf->fastcgi_lengths;
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3535 sc.values = &flcf->fastcgi_values;
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3536 sc.variables = n;
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3537 sc.complete_lengths = 1;
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3538 sc.complete_values = 1;
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3539
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3540 if (ngx_http_script_compile(&sc) != NGX_OK) {
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3541 return NGX_CONF_ERROR;
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3542 }
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3543
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3544 return NGX_CONF_OK;
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3545 }
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3546
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3547 ngx_memzero(&u, sizeof(ngx_url_t));
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3548
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
3549 u.url = value[1];
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 777
diff changeset
3550 u.no_resolve = 1;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 777
diff changeset
3551
2390
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3552 flcf->upstream.upstream = ngx_http_upstream_add(cf, &u, 0);
27ccc4b54fa6 fastcgi_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3553 if (flcf->upstream.upstream == NULL) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3554 return NGX_CONF_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3555 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3556
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3557 return NGX_CONF_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3558 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3559
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3560
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3561 static char *
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3562 ngx_http_fastcgi_split_path_info(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3563 {
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3564 #if (NGX_PCRE)
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3565 ngx_http_fastcgi_loc_conf_t *flcf = conf;
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3566
3325
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3567 ngx_str_t *value;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3568 ngx_regex_compile_t rc;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3569 u_char errstr[NGX_MAX_CONF_ERRSTR];
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3570
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3571 value = cf->args->elts;
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3572
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3573 flcf->split_name = value[1];
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3574
3325
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3575 ngx_memzero(&rc, sizeof(ngx_regex_compile_t));
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3576
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3577 rc.pattern = value[1];
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3578 rc.pool = cf->pool;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3579 rc.err.len = NGX_MAX_CONF_ERRSTR;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3580 rc.err.data = errstr;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3581
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3582 if (ngx_regex_compile(&rc) != NGX_OK) {
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3583 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "%V", &rc.err);
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3584 return NGX_CONF_ERROR;
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3585 }
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3586
3325
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3587 if (rc.captures != 2) {
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3588 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3589 "pattern \"%V\" must have 2 captures", &value[1]);
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3590 return NGX_CONF_ERROR;
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3591 }
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3592
3325
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3593 flcf->split_regex = rc.regex;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
3594
2443
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3595 return NGX_CONF_OK;
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3596
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3597 #else
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3598
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3599 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3600 "\"%V\" requires PCRE library", &cmd->name);
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3601 return NGX_CONF_ERROR;
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3602
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3603 #endif
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3604 }
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3605
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3606
a8697cc12b3a fastcgi_split_path_info
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3607 static char *
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3608 ngx_http_fastcgi_store(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3609 {
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3610 ngx_http_fastcgi_loc_conf_t *flcf = conf;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3611
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3612 ngx_str_t *value;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3613 ngx_http_script_compile_t sc;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3614
5947
d9025ea1f5a5 Upstream: simplified proxy_store and friends configuration code.
Valentin Bartenev <vbart@nginx.com>
parents: 5940
diff changeset
3615 if (flcf->upstream.store != NGX_CONF_UNSET) {
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3616 return "is duplicate";
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3617 }
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3618
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3619 value = cf->args->elts;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3620
2895
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
3621 if (ngx_strcmp(value[1].data, "off") == 0) {
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
3622 flcf->upstream.store = 0;
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3623 return NGX_CONF_OK;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3624 }
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3625
2895
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
3626 #if (NGX_HTTP_CACHE)
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3627 if (flcf->upstream.cache > 0) {
2895
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
3628 return "is incompatible with \"fastcgi_cache\"";
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
3629 }
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
3630 #endif
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
3631
5947
d9025ea1f5a5 Upstream: simplified proxy_store and friends configuration code.
Valentin Bartenev <vbart@nginx.com>
parents: 5940
diff changeset
3632 flcf->upstream.store = 1;
d9025ea1f5a5 Upstream: simplified proxy_store and friends configuration code.
Valentin Bartenev <vbart@nginx.com>
parents: 5940
diff changeset
3633
2895
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
3634 if (ngx_strcmp(value[1].data, "on") == 0) {
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3635 return NGX_CONF_OK;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3636 }
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3637
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3638 /* include the terminating '\0' into script */
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3639 value[1].len++;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3640
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3641 ngx_memzero(&sc, sizeof(ngx_http_script_compile_t));
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3642
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3643 sc.cf = cf;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3644 sc.source = &value[1];
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3645 sc.lengths = &flcf->upstream.store_lengths;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3646 sc.values = &flcf->upstream.store_values;
1563
022ec9420f80 style fix: remove double semicolons
Igor Sysoev <igor@sysoev.ru>
parents: 1488
diff changeset
3647 sc.variables = ngx_http_script_variables_count(&value[1]);
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3648 sc.complete_lengths = 1;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3649 sc.complete_values = 1;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3650
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3651 if (ngx_http_script_compile(&sc) != NGX_OK) {
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3652 return NGX_CONF_ERROR;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3653 }
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3654
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3655 return NGX_CONF_OK;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3656 }
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3657
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3658
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3659 #if (NGX_HTTP_CACHE)
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3660
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3661 static char *
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3662 ngx_http_fastcgi_cache(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3663 {
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3664 ngx_http_fastcgi_loc_conf_t *flcf = conf;
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3665
5951
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3666 ngx_str_t *value;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3667 ngx_http_complex_value_t cv;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3668 ngx_http_compile_complex_value_t ccv;
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3669
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3670 value = cf->args->elts;
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3671
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3672 if (flcf->upstream.cache != NGX_CONF_UNSET) {
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3673 return "is duplicate";
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3674 }
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3675
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3676 if (ngx_strcmp(value[1].data, "off") == 0) {
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3677 flcf->upstream.cache = 0;
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3678 return NGX_CONF_OK;
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3679 }
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3680
5947
d9025ea1f5a5 Upstream: simplified proxy_store and friends configuration code.
Valentin Bartenev <vbart@nginx.com>
parents: 5940
diff changeset
3681 if (flcf->upstream.store > 0) {
2895
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
3682 return "is incompatible with \"fastcgi_store\"";
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
3683 }
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
3684
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3685 flcf->upstream.cache = 1;
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3686
5951
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3687 ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3688
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3689 ccv.cf = cf;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3690 ccv.value = &value[1];
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3691 ccv.complex_value = &cv;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3692
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3693 if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3694 return NGX_CONF_ERROR;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3695 }
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3696
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3697 if (cv.lengths != NULL) {
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3698
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3699 flcf->upstream.cache_value = ngx_palloc(cf->pool,
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3700 sizeof(ngx_http_complex_value_t));
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3701 if (flcf->upstream.cache_value == NULL) {
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3702 return NGX_CONF_ERROR;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3703 }
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3704
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3705 *flcf->upstream.cache_value = cv;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3706
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3707 return NGX_CONF_OK;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3708 }
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3709
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3710 flcf->upstream.cache_zone = ngx_shared_memory_add(cf, &value[1], 0,
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3711 &ngx_http_fastcgi_module);
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3712 if (flcf->upstream.cache_zone == NULL) {
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3713 return NGX_CONF_ERROR;
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3714 }
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3715
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3716 return NGX_CONF_OK;
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3717 }
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3718
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3719
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3720 static char *
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3721 ngx_http_fastcgi_cache_key(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3722 {
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3723 ngx_http_fastcgi_loc_conf_t *flcf = conf;
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3724
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3725 ngx_str_t *value;
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3726 ngx_http_compile_complex_value_t ccv;
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3727
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3728 value = cf->args->elts;
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3729
4947
4251e72b8bb4 Allow the complex value to be defined as an empty string.
Ruslan Ermilov <ru@nginx.com>
parents: 4811
diff changeset
3730 if (flcf->cache_key.value.data) {
2602
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3731 return "is duplicate";
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3732 }
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3733
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3734 ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3735
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3736 ccv.cf = cf;
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3737 ccv.value = &value[1];
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3738 ccv.complex_value = &flcf->cache_key;
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3739
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3740 if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3741 return NGX_CONF_ERROR;
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3742 }
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3743
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3744 return NGX_CONF_OK;
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3745 }
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3746
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3747 #endif
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3748
4ed2fa197a4a fastcgi cache
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
3749
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3750 static char *
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3751 ngx_http_fastcgi_lowat_check(ngx_conf_t *cf, void *post, void *data)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3752 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3753 #if (NGX_FREEBSD)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3754 ssize_t *np = data;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3755
673
b80f94fa2197 nginx-0.3.58-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
3756 if ((u_long) *np >= ngx_freebsd_net_inet_tcp_sendspace) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3757 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3758 "\"fastcgi_send_lowat\" must be less than %d "
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3759 "(sysctl net.inet.tcp.sendspace)",
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3760 ngx_freebsd_net_inet_tcp_sendspace);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3761
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3762 return NGX_CONF_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3763 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3764
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3765 #elif !(NGX_HAVE_SO_SNDLOWAT)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3766 ssize_t *np = data;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3767
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3768 ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3769 "\"fastcgi_send_lowat\" is not supported, ignored");
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3770
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3771 *np = 0;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3772
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3773 #endif
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3774
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3775 return NGX_CONF_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3776 }