annotate src/http/modules/ngx_http_proxy_module.c @ 7726:559d19037984

Limit req: unlocking of nodes on complex value errors. Previously, if there were multiple limits configured, errors in ngx_http_complex_value() during processing of a non-first limit resulted in reference count leak in shared memory nodes of already processed limits. Fix is to explicity unlock relevant nodes, much like we do when rejecting requests.
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 08 Oct 2020 17:44:34 +0300
parents a88384c69d1e
children 485dba3e2a01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2 /*
507
cd3117ad9aab nginx-0.1.28-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.
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5 */
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_config.h>
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_core.h>
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10 #include <ngx_http.h>
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
13 #define NGX_HTTP_PROXY_COOKIE_SECURE 0x0001
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
14 #define NGX_HTTP_PROXY_COOKIE_SECURE_ON 0x0002
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
15 #define NGX_HTTP_PROXY_COOKIE_SECURE_OFF 0x0004
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
16 #define NGX_HTTP_PROXY_COOKIE_HTTPONLY 0x0008
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
17 #define NGX_HTTP_PROXY_COOKIE_HTTPONLY_ON 0x0010
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
18 #define NGX_HTTP_PROXY_COOKIE_HTTPONLY_OFF 0x0020
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
19 #define NGX_HTTP_PROXY_COOKIE_SAMESITE 0x0040
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
20 #define NGX_HTTP_PROXY_COOKIE_SAMESITE_STRICT 0x0080
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
21 #define NGX_HTTP_PROXY_COOKIE_SAMESITE_LAX 0x0100
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
22 #define NGX_HTTP_PROXY_COOKIE_SAMESITE_NONE 0x0200
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
23 #define NGX_HTTP_PROXY_COOKIE_SAMESITE_OFF 0x0400
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
24
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
25
5951
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
26 typedef struct {
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
27 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
28 } ngx_http_proxy_main_conf_t;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
29
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
30
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
31 typedef struct ngx_http_proxy_rewrite_s ngx_http_proxy_rewrite_t;
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
32
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
33 typedef ngx_int_t (*ngx_http_proxy_rewrite_pt)(ngx_http_request_t *r,
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
34 ngx_str_t *value, size_t prefix, size_t len,
4462
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
35 ngx_http_proxy_rewrite_t *pr);
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
36
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
37 struct ngx_http_proxy_rewrite_s {
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
38 ngx_http_proxy_rewrite_pt handler;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
39
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
40 union {
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
41 ngx_http_complex_value_t complex;
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
42 #if (NGX_PCRE)
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
43 ngx_http_regex_t *regex;
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
44 #endif
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
45 } pattern;
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
46
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
47 ngx_http_complex_value_t replacement;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
48 };
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
49
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
50
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
51 typedef struct {
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
52 union {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
53 ngx_http_complex_value_t complex;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
54 #if (NGX_PCRE)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
55 ngx_http_regex_t *regex;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
56 #endif
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
57 } cookie;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
58
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
59 ngx_uint_t flags;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
60 ngx_uint_t regex;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
61 } ngx_http_proxy_cookie_flags_t;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
62
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
63
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
64 typedef struct {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
65 ngx_str_t key_start;
2391
d88e757cc7d8 delete surplus upstream.schema field
Igor Sysoev <igor@sysoev.ru>
parents: 2285
diff changeset
66 ngx_str_t schema;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
67 ngx_str_t host_header;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
68 ngx_str_t port;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
69 ngx_str_t uri;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
70 } ngx_http_proxy_vars_t;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
71
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
72
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
73 typedef struct {
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
74 ngx_array_t *flushes;
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
75 ngx_array_t *lengths;
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
76 ngx_array_t *values;
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
77 ngx_hash_t hash;
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
78 } ngx_http_proxy_headers_t;
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
79
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
80
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
81 typedef struct {
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
82 ngx_http_upstream_conf_t upstream;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
83
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
84 ngx_array_t *body_flushes;
5910
29fa5023bd6f Proxy: renamed and rearranged fields in proxy configuration.
Roman Arutyunyan <arut@nginx.com>
parents: 5909
diff changeset
85 ngx_array_t *body_lengths;
29fa5023bd6f Proxy: renamed and rearranged fields in proxy configuration.
Roman Arutyunyan <arut@nginx.com>
parents: 5909
diff changeset
86 ngx_array_t *body_values;
29fa5023bd6f Proxy: renamed and rearranged fields in proxy configuration.
Roman Arutyunyan <arut@nginx.com>
parents: 5909
diff changeset
87 ngx_str_t body_source;
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
88
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
89 ngx_http_proxy_headers_t headers;
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
90 #if (NGX_HTTP_CACHE)
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
91 ngx_http_proxy_headers_t headers_cache;
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
92 #endif
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
93 ngx_array_t *headers_source;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
94
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
95 ngx_array_t *proxy_lengths;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
96 ngx_array_t *proxy_values;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
97
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
98 ngx_array_t *redirects;
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
99 ngx_array_t *cookie_domains;
4466
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
100 ngx_array_t *cookie_paths;
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
101 ngx_array_t *cookie_flags;
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
102
6781
ca27074f8f0f Proxy: support variables for proxy_method directive.
Dmitry Lazurkin <dilaz03@gmail.com>
parents: 6747
diff changeset
103 ngx_http_complex_value_t *method;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
104 ngx_str_t location;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
105 ngx_str_t url;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
106
2672
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
107 #if (NGX_HTTP_CACHE)
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
108 ngx_http_complex_value_t cache_key;
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
109 #endif
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
110
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
111 ngx_http_proxy_vars_t vars;
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
112
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
113 ngx_flag_t redirect;
1180
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
114
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
115 ngx_uint_t http_version;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
116
1180
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
117 ngx_uint_t headers_hash_max_size;
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
118 ngx_uint_t headers_hash_bucket_size;
5385
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
119
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
120 #if (NGX_HTTP_SSL)
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
121 ngx_uint_t ssl;
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
122 ngx_uint_t ssl_protocols;
5390
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
123 ngx_str_t ssl_ciphers;
5661
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
124 ngx_uint_t ssl_verify_depth;
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
125 ngx_str_t ssl_trusted_certificate;
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
126 ngx_str_t ssl_crl;
5900
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
127 ngx_str_t ssl_certificate;
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
128 ngx_str_t ssl_certificate_key;
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
129 ngx_array_t *ssl_passwords;
5385
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
130 #endif
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
131 } ngx_http_proxy_loc_conf_t;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
132
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
133
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
134 typedef struct {
3627
9061fdb2ed8c use ngx_http_parse_status_line()
Igor Sysoev <igor@sysoev.ru>
parents: 3615
diff changeset
135 ngx_http_status_t status;
4925
32030fa8cb14 Request body: chunked parsing moved to ngx_http_parse.c from proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4602
diff changeset
136 ngx_http_chunked_t chunked;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
137 ngx_http_proxy_vars_t vars;
4927
93294110728f Request body: always use calculated size of a request body in proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4925
diff changeset
138 off_t internal_body_length;
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
139
6051
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
140 ngx_chain_t *free;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
141 ngx_chain_t *busy;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
142
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
143 unsigned head:1;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
144 unsigned internal_chunked:1;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
145 unsigned header_sent:1;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
146 } ngx_http_proxy_ctx_t;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
147
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
148
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
149 static ngx_int_t ngx_http_proxy_eval(ngx_http_request_t *r,
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
150 ngx_http_proxy_ctx_t *ctx, ngx_http_proxy_loc_conf_t *plcf);
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
151 #if (NGX_HTTP_CACHE)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
152 static ngx_int_t ngx_http_proxy_create_key(ngx_http_request_t *r);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
153 #endif
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
154 static ngx_int_t ngx_http_proxy_create_request(ngx_http_request_t *r);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
155 static ngx_int_t ngx_http_proxy_reinit_request(ngx_http_request_t *r);
6051
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
156 static ngx_int_t ngx_http_proxy_body_output_filter(void *data, ngx_chain_t *in);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
157 static ngx_int_t ngx_http_proxy_process_status_line(ngx_http_request_t *r);
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
158 static ngx_int_t ngx_http_proxy_process_header(ngx_http_request_t *r);
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
159 static ngx_int_t ngx_http_proxy_input_filter_init(void *data);
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
160 static ngx_int_t ngx_http_proxy_copy_filter(ngx_event_pipe_t *p,
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
161 ngx_buf_t *buf);
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
162 static ngx_int_t ngx_http_proxy_chunked_filter(ngx_event_pipe_t *p,
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
163 ngx_buf_t *buf);
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
164 static ngx_int_t ngx_http_proxy_non_buffered_copy_filter(void *data,
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
165 ssize_t bytes);
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
166 static ngx_int_t ngx_http_proxy_non_buffered_chunked_filter(void *data,
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
167 ssize_t bytes);
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
168 static void ngx_http_proxy_abort_request(ngx_http_request_t *r);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
169 static void ngx_http_proxy_finalize_request(ngx_http_request_t *r,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
170 ngx_int_t rc);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
171
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
172 static ngx_int_t ngx_http_proxy_host_variable(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
173 ngx_http_variable_value_t *v, uintptr_t data);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
174 static ngx_int_t ngx_http_proxy_port_variable(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
175 ngx_http_variable_value_t *v, uintptr_t data);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
176 static ngx_int_t
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
177 ngx_http_proxy_add_x_forwarded_for_variable(ngx_http_request_t *r,
573
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);
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
179 static ngx_int_t
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
180 ngx_http_proxy_internal_body_length_variable(ngx_http_request_t *r,
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
181 ngx_http_variable_value_t *v, uintptr_t data);
6051
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
182 static ngx_int_t ngx_http_proxy_internal_chunked_variable(ngx_http_request_t *r,
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
183 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
184 static ngx_int_t ngx_http_proxy_rewrite_redirect(ngx_http_request_t *r,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
185 ngx_table_elt_t *h, size_t prefix);
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
186 static ngx_int_t ngx_http_proxy_rewrite_cookie(ngx_http_request_t *r,
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
187 ngx_table_elt_t *h);
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
188 static ngx_int_t ngx_http_proxy_parse_cookie(ngx_str_t *value,
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
189 ngx_array_t *attrs);
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
190 static ngx_int_t ngx_http_proxy_rewrite_cookie_value(ngx_http_request_t *r,
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
191 ngx_str_t *value, ngx_array_t *rewrites);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
192 static ngx_int_t ngx_http_proxy_rewrite_cookie_flags(ngx_http_request_t *r,
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
193 ngx_array_t *attrs, ngx_array_t *flags);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
194 static ngx_int_t ngx_http_proxy_edit_cookie_flags(ngx_http_request_t *r,
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
195 ngx_array_t *attrs, ngx_uint_t flags);
4462
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
196 static ngx_int_t ngx_http_proxy_rewrite(ngx_http_request_t *r,
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
197 ngx_str_t *value, size_t prefix, size_t len, ngx_str_t *replacement);
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
198
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
199 static ngx_int_t ngx_http_proxy_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
200 static void *ngx_http_proxy_create_main_conf(ngx_conf_t *cf);
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
201 static void *ngx_http_proxy_create_loc_conf(ngx_conf_t *cf);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
202 static char *ngx_http_proxy_merge_loc_conf(ngx_conf_t *cf,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
203 void *parent, void *child);
5907
195561ef367f Upstream: moved header initializations to separate functions.
Roman Arutyunyan <arut@nginx.com>
parents: 5905
diff changeset
204 static ngx_int_t ngx_http_proxy_init_headers(ngx_conf_t *cf,
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
205 ngx_http_proxy_loc_conf_t *conf, ngx_http_proxy_headers_t *headers,
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
206 ngx_keyval_t *default_headers);
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
207
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
208 static char *ngx_http_proxy_pass(ngx_conf_t *cf, ngx_command_t *cmd,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
209 void *conf);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
210 static char *ngx_http_proxy_redirect(ngx_conf_t *cf, ngx_command_t *cmd,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
211 void *conf);
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
212 static char *ngx_http_proxy_cookie_domain(ngx_conf_t *cf, ngx_command_t *cmd,
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
213 void *conf);
4466
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
214 static char *ngx_http_proxy_cookie_path(ngx_conf_t *cf, ngx_command_t *cmd,
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
215 void *conf);
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
216 static char *ngx_http_proxy_cookie_flags(ngx_conf_t *cf, ngx_command_t *cmd,
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
217 void *conf);
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
218 static char *ngx_http_proxy_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
219 void *conf);
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
220 #if (NGX_HTTP_CACHE)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
221 static char *ngx_http_proxy_cache(ngx_conf_t *cf, ngx_command_t *cmd,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
222 void *conf);
2672
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
223 static char *ngx_http_proxy_cache_key(ngx_conf_t *cf, ngx_command_t *cmd,
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
224 void *conf);
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
225 #endif
5900
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
226 #if (NGX_HTTP_SSL)
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
227 static char *ngx_http_proxy_ssl_password_file(ngx_conf_t *cf,
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
228 ngx_command_t *cmd, void *conf);
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
229 #endif
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
230
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
231 static char *ngx_http_proxy_lowat_check(ngx_conf_t *cf, void *post, void *data);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
232
4463
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
233 static ngx_int_t ngx_http_proxy_rewrite_regex(ngx_conf_t *cf,
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
234 ngx_http_proxy_rewrite_t *pr, ngx_str_t *regex, ngx_uint_t caseless);
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
235
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
236 #if (NGX_HTTP_SSL)
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
237 static ngx_int_t ngx_http_proxy_set_ssl(ngx_conf_t *cf,
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
238 ngx_http_proxy_loc_conf_t *plcf);
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
239 #endif
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
240 static void ngx_http_proxy_set_vars(ngx_url_t *u, ngx_http_proxy_vars_t *v);
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
241
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
242
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
243 static ngx_conf_post_t ngx_http_proxy_lowat_post =
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
244 { ngx_http_proxy_lowat_check };
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
245
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
246
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
247 static ngx_conf_bitmask_t ngx_http_proxy_next_upstream_masks[] = {
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
248 { ngx_string("error"), NGX_HTTP_UPSTREAM_FT_ERROR },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
249 { ngx_string("timeout"), NGX_HTTP_UPSTREAM_FT_TIMEOUT },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
250 { ngx_string("invalid_header"), NGX_HTTP_UPSTREAM_FT_INVALID_HEADER },
6467
91c8d990fb45 Upstream: proxy_next_upstream non_idempotent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6311
diff changeset
251 { ngx_string("non_idempotent"), NGX_HTTP_UPSTREAM_FT_NON_IDEMPOTENT },
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
252 { ngx_string("http_500"), NGX_HTTP_UPSTREAM_FT_HTTP_500 },
2268
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
253 { ngx_string("http_502"), NGX_HTTP_UPSTREAM_FT_HTTP_502 },
623
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 619
diff changeset
254 { ngx_string("http_503"), NGX_HTTP_UPSTREAM_FT_HTTP_503 },
2268
33556140681a *) ngx_http_upstream_test_next()
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
255 { ngx_string("http_504"), NGX_HTTP_UPSTREAM_FT_HTTP_504 },
5231
05c53652e7b4 Upstream: http_403 support in proxy_next_upstream (and friends).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5211
diff changeset
256 { ngx_string("http_403"), NGX_HTTP_UPSTREAM_FT_HTTP_403 },
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
257 { ngx_string("http_404"), NGX_HTTP_UPSTREAM_FT_HTTP_404 },
6966
fa56ab75cffc Upstream: allow recovery from "429 Too Many Requests" response.
Piotr Sikora <piotrsikora@google.com>
parents: 6906
diff changeset
258 { ngx_string("http_429"), NGX_HTTP_UPSTREAM_FT_HTTP_429 },
2927
55ceaef03d34 proxy_cache_use_stale/fastcgi_cache_use_stale updating
Igor Sysoev <igor@sysoev.ru>
parents: 2912
diff changeset
259 { 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
260 { ngx_string("off"), NGX_HTTP_UPSTREAM_FT_OFF },
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
261 { ngx_null_string, 0 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
262 };
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
263
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
264
5385
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
265 #if (NGX_HTTP_SSL)
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
266
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
267 static ngx_conf_bitmask_t ngx_http_proxy_ssl_protocols[] = {
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
268 { ngx_string("SSLv2"), NGX_SSL_SSLv2 },
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
269 { ngx_string("SSLv3"), NGX_SSL_SSLv3 },
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
270 { ngx_string("TLSv1"), NGX_SSL_TLSv1 },
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
271 { ngx_string("TLSv1.1"), NGX_SSL_TLSv1_1 },
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
272 { ngx_string("TLSv1.2"), NGX_SSL_TLSv1_2 },
6981
08dc60979133 SSL: added support for TLSv1.3 in ssl_protocols directive.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6966
diff changeset
273 { ngx_string("TLSv1.3"), NGX_SSL_TLSv1_3 },
5385
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
274 { ngx_null_string, 0 }
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
275 };
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
276
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
277 #endif
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
278
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
279
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
280 static ngx_conf_enum_t ngx_http_proxy_http_version[] = {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
281 { ngx_string("1.0"), NGX_HTTP_VERSION_10 },
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
282 { ngx_string("1.1"), NGX_HTTP_VERSION_11 },
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
283 { ngx_null_string, 0 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
284 };
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
285
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
286
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
287 ngx_module_t ngx_http_proxy_module;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
288
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
289
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
290 static ngx_command_t ngx_http_proxy_commands[] = {
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
291
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
292 { ngx_string("proxy_pass"),
843
ebab9490204c allow proxy_pass inside limit_except
Igor Sysoev <igor@sysoev.ru>
parents: 812
diff changeset
293 NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_HTTP_LMT_CONF|NGX_CONF_TAKE1,
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
294 ngx_http_proxy_pass,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
295 NGX_HTTP_LOC_CONF_OFFSET,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
296 0,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
297 NULL },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
298
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
299 { ngx_string("proxy_redirect"),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
300 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE12,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
301 ngx_http_proxy_redirect,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
302 NGX_HTTP_LOC_CONF_OFFSET,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
303 0,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
304 NULL },
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
305
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
306 { ngx_string("proxy_cookie_domain"),
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
307 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE12,
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
308 ngx_http_proxy_cookie_domain,
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
309 NGX_HTTP_LOC_CONF_OFFSET,
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
310 0,
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
311 NULL },
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
312
4466
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
313 { ngx_string("proxy_cookie_path"),
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
314 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE12,
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
315 ngx_http_proxy_cookie_path,
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
316 NGX_HTTP_LOC_CONF_OFFSET,
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
317 0,
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
318 NULL },
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
319
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
320 { ngx_string("proxy_cookie_flags"),
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
321 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1234,
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
322 ngx_http_proxy_cookie_flags,
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
323 NGX_HTTP_LOC_CONF_OFFSET,
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
324 0,
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
325 NULL },
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
326
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1244
diff changeset
327 { ngx_string("proxy_store"),
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
328 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
329 ngx_http_proxy_store,
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
330 NGX_HTTP_LOC_CONF_OFFSET,
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
331 0,
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
332 NULL },
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
333
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
334 { ngx_string("proxy_store_access"),
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1244
diff changeset
335 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: 1244
diff changeset
336 ngx_conf_set_access_slot,
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1244
diff changeset
337 NGX_HTTP_LOC_CONF_OFFSET,
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
338 offsetof(ngx_http_proxy_loc_conf_t, upstream.store_access),
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1244
diff changeset
339 NULL },
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1244
diff changeset
340
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
341 { ngx_string("proxy_buffering"),
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
342 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
343 ngx_conf_set_flag_slot,
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
344 NGX_HTTP_LOC_CONF_OFFSET,
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
345 offsetof(ngx_http_proxy_loc_conf_t, upstream.buffering),
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
346 NULL },
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
347
6050
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
348 { ngx_string("proxy_request_buffering"),
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
349 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
350 ngx_conf_set_flag_slot,
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
351 NGX_HTTP_LOC_CONF_OFFSET,
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
352 offsetof(ngx_http_proxy_loc_conf_t, upstream.request_buffering),
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
353 NULL },
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
354
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
355 { ngx_string("proxy_ignore_client_abort"),
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
356 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: 627
diff changeset
357 ngx_conf_set_flag_slot,
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
358 NGX_HTTP_LOC_CONF_OFFSET,
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
359 offsetof(ngx_http_proxy_loc_conf_t, upstream.ignore_client_abort),
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
360 NULL },
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
361
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3006
diff changeset
362 { ngx_string("proxy_bind"),
6530
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6480
diff changeset
363 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: 3397
diff changeset
364 ngx_http_upstream_bind_set_slot,
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3006
diff changeset
365 NGX_HTTP_LOC_CONF_OFFSET,
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3006
diff changeset
366 offsetof(ngx_http_proxy_loc_conf_t, upstream.local),
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3006
diff changeset
367 NULL },
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3006
diff changeset
368
7371
8b68d50090e4 Upstream: proxy_socket_keepalive and friends.
Vladimir Homutov <vl@nginx.com>
parents: 7321
diff changeset
369 { ngx_string("proxy_socket_keepalive"),
8b68d50090e4 Upstream: proxy_socket_keepalive and friends.
Vladimir Homutov <vl@nginx.com>
parents: 7321
diff changeset
370 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
8b68d50090e4 Upstream: proxy_socket_keepalive and friends.
Vladimir Homutov <vl@nginx.com>
parents: 7321
diff changeset
371 ngx_conf_set_flag_slot,
8b68d50090e4 Upstream: proxy_socket_keepalive and friends.
Vladimir Homutov <vl@nginx.com>
parents: 7321
diff changeset
372 NGX_HTTP_LOC_CONF_OFFSET,
8b68d50090e4 Upstream: proxy_socket_keepalive and friends.
Vladimir Homutov <vl@nginx.com>
parents: 7321
diff changeset
373 offsetof(ngx_http_proxy_loc_conf_t, upstream.socket_keepalive),
8b68d50090e4 Upstream: proxy_socket_keepalive and friends.
Vladimir Homutov <vl@nginx.com>
parents: 7321
diff changeset
374 NULL },
8b68d50090e4 Upstream: proxy_socket_keepalive and friends.
Vladimir Homutov <vl@nginx.com>
parents: 7321
diff changeset
375
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
376 { ngx_string("proxy_connect_timeout"),
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
377 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
378 ngx_conf_set_msec_slot,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
379 NGX_HTTP_LOC_CONF_OFFSET,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
380 offsetof(ngx_http_proxy_loc_conf_t, upstream.connect_timeout),
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
381 NULL },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
382
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
383 { ngx_string("proxy_send_timeout"),
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
384 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
385 ngx_conf_set_msec_slot,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
386 NGX_HTTP_LOC_CONF_OFFSET,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
387 offsetof(ngx_http_proxy_loc_conf_t, upstream.send_timeout),
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
388 NULL },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
389
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
390 { ngx_string("proxy_send_lowat"),
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
391 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
392 ngx_conf_set_size_slot,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
393 NGX_HTTP_LOC_CONF_OFFSET,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
394 offsetof(ngx_http_proxy_loc_conf_t, upstream.send_lowat),
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
395 &ngx_http_proxy_lowat_post },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
396
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
397 { ngx_string("proxy_intercept_errors"),
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
398 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: 653
diff changeset
399 ngx_conf_set_flag_slot,
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
400 NGX_HTTP_LOC_CONF_OFFSET,
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
401 offsetof(ngx_http_proxy_loc_conf_t, upstream.intercept_errors),
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
402 NULL },
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
403
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
404 { ngx_string("proxy_set_header"),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
405 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE2,
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
406 ngx_conf_set_keyval_slot,
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
407 NGX_HTTP_LOC_CONF_OFFSET,
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
408 offsetof(ngx_http_proxy_loc_conf_t, headers_source),
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
409 NULL },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
410
1180
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
411 { ngx_string("proxy_headers_hash_max_size"),
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
412 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
413 ngx_conf_set_num_slot,
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
414 NGX_HTTP_LOC_CONF_OFFSET,
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
415 offsetof(ngx_http_proxy_loc_conf_t, headers_hash_max_size),
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
416 NULL },
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
417
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
418 { ngx_string("proxy_headers_hash_bucket_size"),
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
419 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
420 ngx_conf_set_num_slot,
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
421 NGX_HTTP_LOC_CONF_OFFSET,
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
422 offsetof(ngx_http_proxy_loc_conf_t, headers_hash_bucket_size),
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
423 NULL },
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
424
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
425 { ngx_string("proxy_set_body"),
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
426 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
427 ngx_conf_set_str_slot,
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
428 NGX_HTTP_LOC_CONF_OFFSET,
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
429 offsetof(ngx_http_proxy_loc_conf_t, body_source),
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
430 NULL },
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
431
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
432 { ngx_string("proxy_method"),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
433 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
6781
ca27074f8f0f Proxy: support variables for proxy_method directive.
Dmitry Lazurkin <dilaz03@gmail.com>
parents: 6747
diff changeset
434 ngx_http_set_complex_value_slot,
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
435 NGX_HTTP_LOC_CONF_OFFSET,
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 555
diff changeset
436 offsetof(ngx_http_proxy_loc_conf_t, method),
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 555
diff changeset
437 NULL },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
438
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
439 { ngx_string("proxy_pass_request_headers"),
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
440 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
441 ngx_conf_set_flag_slot,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
442 NGX_HTTP_LOC_CONF_OFFSET,
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
443 offsetof(ngx_http_proxy_loc_conf_t, upstream.pass_request_headers),
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
444 NULL },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
445
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
446 { ngx_string("proxy_pass_request_body"),
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
447 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
448 ngx_conf_set_flag_slot,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
449 NGX_HTTP_LOC_CONF_OFFSET,
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
450 offsetof(ngx_http_proxy_loc_conf_t, upstream.pass_request_body),
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
451 NULL },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
452
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
453 { ngx_string("proxy_buffer_size"),
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
454 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: 579
diff changeset
455 ngx_conf_set_size_slot,
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
456 NGX_HTTP_LOC_CONF_OFFSET,
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
457 offsetof(ngx_http_proxy_loc_conf_t, upstream.buffer_size),
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
458 NULL },
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
459
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
460 { ngx_string("proxy_read_timeout"),
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
461 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
462 ngx_conf_set_msec_slot,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
463 NGX_HTTP_LOC_CONF_OFFSET,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
464 offsetof(ngx_http_proxy_loc_conf_t, upstream.read_timeout),
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
465 NULL },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
466
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
467 { ngx_string("proxy_buffers"),
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
468 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE2,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
469 ngx_conf_set_bufs_slot,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
470 NGX_HTTP_LOC_CONF_OFFSET,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
471 offsetof(ngx_http_proxy_loc_conf_t, upstream.bufs),
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
472 NULL },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
473
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
474 { ngx_string("proxy_busy_buffers_size"),
cd3117ad9aab nginx-0.1.28-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_TAKE1,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
476 ngx_conf_set_size_slot,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
477 NGX_HTTP_LOC_CONF_OFFSET,
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
478 offsetof(ngx_http_proxy_loc_conf_t, upstream.busy_buffers_size_conf),
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
479 NULL },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
480
5874
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5832
diff changeset
481 { ngx_string("proxy_force_ranges"),
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5832
diff changeset
482 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: 5832
diff changeset
483 ngx_conf_set_flag_slot,
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5832
diff changeset
484 NGX_HTTP_LOC_CONF_OFFSET,
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5832
diff changeset
485 offsetof(ngx_http_proxy_loc_conf_t, upstream.force_ranges),
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5832
diff changeset
486 NULL },
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5832
diff changeset
487
5883
973ee2276300 Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5874
diff changeset
488 { ngx_string("proxy_limit_rate"),
973ee2276300 Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5874
diff changeset
489 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
490 ngx_conf_set_size_slot,
973ee2276300 Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5874
diff changeset
491 NGX_HTTP_LOC_CONF_OFFSET,
973ee2276300 Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5874
diff changeset
492 offsetof(ngx_http_proxy_loc_conf_t, upstream.limit_rate),
973ee2276300 Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5874
diff changeset
493 NULL },
973ee2276300 Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5874
diff changeset
494
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
495 #if (NGX_HTTP_CACHE)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
496
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
497 { ngx_string("proxy_cache"),
3729
4b773fc06336 fix directive type
Igor Sysoev <igor@sysoev.ru>
parents: 3700
diff changeset
498 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
499 ngx_http_proxy_cache,
2597
86967878cd76 fix the previous commit
Igor Sysoev <igor@sysoev.ru>
parents: 2596
diff changeset
500 NGX_HTTP_LOC_CONF_OFFSET,
2596
9a265cd00ba5 axe old definition fields
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
501 0,
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
502 NULL },
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
503
2672
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
504 { ngx_string("proxy_cache_key"),
3729
4b773fc06336 fix directive type
Igor Sysoev <igor@sysoev.ru>
parents: 3700
diff changeset
505 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
2672
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
506 ngx_http_proxy_cache_key,
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
507 NGX_HTTP_LOC_CONF_OFFSET,
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
508 0,
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
509 NULL },
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
510
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
511 { ngx_string("proxy_cache_path"),
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
512 NGX_HTTP_MAIN_CONF|NGX_CONF_2MORE,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
513 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
514 NGX_HTTP_MAIN_CONF_OFFSET,
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
515 offsetof(ngx_http_proxy_main_conf_t, caches),
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
516 &ngx_http_proxy_module },
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
517
3699
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3692
diff changeset
518 { ngx_string("proxy_cache_bypass"),
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3692
diff changeset
519 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
520 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
521 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
522 offsetof(ngx_http_proxy_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
523 NULL },
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3692
diff changeset
524
3526
62a4fd1e6e2c proxy_no_cache and fastcgi_no_cache
Igor Sysoev <igor@sysoev.ru>
parents: 3523
diff changeset
525 { ngx_string("proxy_no_cache"),
62a4fd1e6e2c proxy_no_cache and fastcgi_no_cache
Igor Sysoev <igor@sysoev.ru>
parents: 3523
diff changeset
526 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
527 ngx_http_set_predicate_slot,
3526
62a4fd1e6e2c proxy_no_cache and fastcgi_no_cache
Igor Sysoev <igor@sysoev.ru>
parents: 3523
diff changeset
528 NGX_HTTP_LOC_CONF_OFFSET,
62a4fd1e6e2c proxy_no_cache and fastcgi_no_cache
Igor Sysoev <igor@sysoev.ru>
parents: 3523
diff changeset
529 offsetof(ngx_http_proxy_loc_conf_t, upstream.no_cache),
62a4fd1e6e2c proxy_no_cache and fastcgi_no_cache
Igor Sysoev <igor@sysoev.ru>
parents: 3523
diff changeset
530 NULL },
62a4fd1e6e2c proxy_no_cache and fastcgi_no_cache
Igor Sysoev <igor@sysoev.ru>
parents: 3523
diff changeset
531
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
532 { ngx_string("proxy_cache_valid"),
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
533 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
534 ngx_http_file_cache_valid_set_slot,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
535 NGX_HTTP_LOC_CONF_OFFSET,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
536 offsetof(ngx_http_proxy_loc_conf_t, upstream.cache_valid),
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
537 NULL },
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
538
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
539 { ngx_string("proxy_cache_min_uses"),
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
540 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
541 ngx_conf_set_num_slot,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
542 NGX_HTTP_LOC_CONF_OFFSET,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
543 offsetof(ngx_http_proxy_loc_conf_t, upstream.cache_min_uses),
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
544 NULL },
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
545
6793
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
546 { ngx_string("proxy_cache_max_range_offset"),
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
547 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
548 ngx_conf_set_off_slot,
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
549 NGX_HTTP_LOC_CONF_OFFSET,
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
550 offsetof(ngx_http_proxy_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
551 NULL },
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
552
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
553 { ngx_string("proxy_cache_use_stale"),
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
554 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
555 ngx_conf_set_bitmask_slot,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
556 NGX_HTTP_LOC_CONF_OFFSET,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
557 offsetof(ngx_http_proxy_loc_conf_t, upstream.cache_use_stale),
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
558 &ngx_http_proxy_next_upstream_masks },
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
559
2875
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
560 { ngx_string("proxy_cache_methods"),
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
561 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
562 ngx_conf_set_bitmask_slot,
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
563 NGX_HTTP_LOC_CONF_OFFSET,
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
564 offsetof(ngx_http_proxy_loc_conf_t, upstream.cache_methods),
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
565 &ngx_http_upstream_cache_method_mask },
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
566
4385
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
567 { ngx_string("proxy_cache_lock"),
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
568 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
569 ngx_conf_set_flag_slot,
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
570 NGX_HTTP_LOC_CONF_OFFSET,
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
571 offsetof(ngx_http_proxy_loc_conf_t, upstream.cache_lock),
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
572 NULL },
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
573
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
574 { ngx_string("proxy_cache_lock_timeout"),
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
575 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
576 ngx_conf_set_msec_slot,
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
577 NGX_HTTP_LOC_CONF_OFFSET,
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
578 offsetof(ngx_http_proxy_loc_conf_t, upstream.cache_lock_timeout),
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
579 NULL },
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
580
5905
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5900
diff changeset
581 { ngx_string("proxy_cache_lock_age"),
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5900
diff changeset
582 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: 5900
diff changeset
583 ngx_conf_set_msec_slot,
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5900
diff changeset
584 NGX_HTTP_LOC_CONF_OFFSET,
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5900
diff changeset
585 offsetof(ngx_http_proxy_loc_conf_t, upstream.cache_lock_age),
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5900
diff changeset
586 NULL },
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5900
diff changeset
587
5441
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
588 { ngx_string("proxy_cache_revalidate"),
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
589 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: 5391
diff changeset
590 ngx_conf_set_flag_slot,
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
591 NGX_HTTP_LOC_CONF_OFFSET,
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
592 offsetof(ngx_http_proxy_loc_conf_t, upstream.cache_revalidate),
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
593 NULL },
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
594
6290
4d5ac1a31d44 Upstream: proxy_cache_convert_head directive.
Roman Arutyunyan <arut@nginx.com>
parents: 6157
diff changeset
595 { ngx_string("proxy_cache_convert_head"),
4d5ac1a31d44 Upstream: proxy_cache_convert_head directive.
Roman Arutyunyan <arut@nginx.com>
parents: 6157
diff changeset
596 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
4d5ac1a31d44 Upstream: proxy_cache_convert_head directive.
Roman Arutyunyan <arut@nginx.com>
parents: 6157
diff changeset
597 ngx_conf_set_flag_slot,
4d5ac1a31d44 Upstream: proxy_cache_convert_head directive.
Roman Arutyunyan <arut@nginx.com>
parents: 6157
diff changeset
598 NGX_HTTP_LOC_CONF_OFFSET,
4d5ac1a31d44 Upstream: proxy_cache_convert_head directive.
Roman Arutyunyan <arut@nginx.com>
parents: 6157
diff changeset
599 offsetof(ngx_http_proxy_loc_conf_t, upstream.cache_convert_head),
4d5ac1a31d44 Upstream: proxy_cache_convert_head directive.
Roman Arutyunyan <arut@nginx.com>
parents: 6157
diff changeset
600 NULL },
4d5ac1a31d44 Upstream: proxy_cache_convert_head directive.
Roman Arutyunyan <arut@nginx.com>
parents: 6157
diff changeset
601
6906
1aeaae6e9446 Upstream: proxy_cache_background_update and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6793
diff changeset
602 { ngx_string("proxy_cache_background_update"),
1aeaae6e9446 Upstream: proxy_cache_background_update and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6793
diff changeset
603 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
1aeaae6e9446 Upstream: proxy_cache_background_update and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6793
diff changeset
604 ngx_conf_set_flag_slot,
1aeaae6e9446 Upstream: proxy_cache_background_update and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6793
diff changeset
605 NGX_HTTP_LOC_CONF_OFFSET,
1aeaae6e9446 Upstream: proxy_cache_background_update and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6793
diff changeset
606 offsetof(ngx_http_proxy_loc_conf_t, upstream.cache_background_update),
1aeaae6e9446 Upstream: proxy_cache_background_update and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6793
diff changeset
607 NULL },
1aeaae6e9446 Upstream: proxy_cache_background_update and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6793
diff changeset
608
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
609 #endif
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
610
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
611 { ngx_string("proxy_temp_path"),
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
612 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1234,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
613 ngx_conf_set_path_slot,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
614 NGX_HTTP_LOC_CONF_OFFSET,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
615 offsetof(ngx_http_proxy_loc_conf_t, upstream.temp_path),
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
616 NULL },
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
617
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
618 { ngx_string("proxy_max_temp_file_size"),
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
619 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
620 ngx_conf_set_size_slot,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
621 NGX_HTTP_LOC_CONF_OFFSET,
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
622 offsetof(ngx_http_proxy_loc_conf_t, upstream.max_temp_file_size_conf),
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
623 NULL },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
624
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
625 { ngx_string("proxy_temp_file_write_size"),
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
626 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
627 ngx_conf_set_size_slot,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
628 NGX_HTTP_LOC_CONF_OFFSET,
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
629 offsetof(ngx_http_proxy_loc_conf_t, upstream.temp_file_write_size_conf),
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
630 NULL },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
631
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
632 { ngx_string("proxy_next_upstream"),
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
633 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
634 ngx_conf_set_bitmask_slot,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
635 NGX_HTTP_LOC_CONF_OFFSET,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
636 offsetof(ngx_http_proxy_loc_conf_t, upstream.next_upstream),
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
637 &ngx_http_proxy_next_upstream_masks },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
638
5832
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5738
diff changeset
639 { ngx_string("proxy_next_upstream_tries"),
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5738
diff changeset
640 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: 5738
diff changeset
641 ngx_conf_set_num_slot,
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5738
diff changeset
642 NGX_HTTP_LOC_CONF_OFFSET,
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5738
diff changeset
643 offsetof(ngx_http_proxy_loc_conf_t, upstream.next_upstream_tries),
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5738
diff changeset
644 NULL },
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5738
diff changeset
645
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5738
diff changeset
646 { ngx_string("proxy_next_upstream_timeout"),
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5738
diff changeset
647 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: 5738
diff changeset
648 ngx_conf_set_msec_slot,
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5738
diff changeset
649 NGX_HTTP_LOC_CONF_OFFSET,
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5738
diff changeset
650 offsetof(ngx_http_proxy_loc_conf_t, upstream.next_upstream_timeout),
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5738
diff changeset
651 NULL },
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5738
diff changeset
652
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
653 { ngx_string("proxy_pass_header"),
3729
4b773fc06336 fix directive type
Igor Sysoev <igor@sysoev.ru>
parents: 3700
diff changeset
654 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: 637
diff changeset
655 ngx_conf_set_str_array_slot,
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
656 NGX_HTTP_LOC_CONF_OFFSET,
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
657 offsetof(ngx_http_proxy_loc_conf_t, upstream.pass_headers),
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
658 NULL },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
659
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
660 { ngx_string("proxy_hide_header"),
3729
4b773fc06336 fix directive type
Igor Sysoev <igor@sysoev.ru>
parents: 3700
diff changeset
661 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: 637
diff changeset
662 ngx_conf_set_str_array_slot,
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
663 NGX_HTTP_LOC_CONF_OFFSET,
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
664 offsetof(ngx_http_proxy_loc_conf_t, upstream.hide_headers),
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
665 NULL },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
666
2786
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2784
diff changeset
667 { ngx_string("proxy_ignore_headers"),
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2784
diff changeset
668 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: 2784
diff changeset
669 ngx_conf_set_bitmask_slot,
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2784
diff changeset
670 NGX_HTTP_LOC_CONF_OFFSET,
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2784
diff changeset
671 offsetof(ngx_http_proxy_loc_conf_t, upstream.ignore_headers),
3667
12bd9e26fadb use shared ngx_http_upstream_ignore_headers_masks[]
Igor Sysoev <igor@sysoev.ru>
parents: 3629
diff changeset
672 &ngx_http_upstream_ignore_headers_masks },
2786
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2784
diff changeset
673
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
674 { ngx_string("proxy_http_version"),
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
675 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
676 ngx_conf_set_enum_slot,
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
677 NGX_HTTP_LOC_CONF_OFFSET,
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
678 offsetof(ngx_http_proxy_loc_conf_t, http_version),
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
679 &ngx_http_proxy_http_version },
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
680
2184
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
681 #if (NGX_HTTP_SSL)
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
682
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
683 { ngx_string("proxy_ssl_session_reuse"),
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
684 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
685 ngx_conf_set_flag_slot,
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
686 NGX_HTTP_LOC_CONF_OFFSET,
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
687 offsetof(ngx_http_proxy_loc_conf_t, upstream.ssl_session_reuse),
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
688 NULL },
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
689
5385
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
690 { ngx_string("proxy_ssl_protocols"),
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
691 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
692 ngx_conf_set_bitmask_slot,
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
693 NGX_HTTP_LOC_CONF_OFFSET,
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
694 offsetof(ngx_http_proxy_loc_conf_t, ssl_protocols),
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
695 &ngx_http_proxy_ssl_protocols },
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
696
5390
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
697 { ngx_string("proxy_ssl_ciphers"),
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
698 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
699 ngx_conf_set_str_slot,
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
700 NGX_HTTP_LOC_CONF_OFFSET,
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
701 offsetof(ngx_http_proxy_loc_conf_t, ssl_ciphers),
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
702 NULL },
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
703
5660
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
704 { ngx_string("proxy_ssl_name"),
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
705 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
706 ngx_http_set_complex_value_slot,
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
707 NGX_HTTP_LOC_CONF_OFFSET,
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
708 offsetof(ngx_http_proxy_loc_conf_t, upstream.ssl_name),
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
709 NULL },
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
710
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
711 { ngx_string("proxy_ssl_server_name"),
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
712 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
713 ngx_conf_set_flag_slot,
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
714 NGX_HTTP_LOC_CONF_OFFSET,
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
715 offsetof(ngx_http_proxy_loc_conf_t, upstream.ssl_server_name),
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
716 NULL },
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
717
5661
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
718 { ngx_string("proxy_ssl_verify"),
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
719 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
720 ngx_conf_set_flag_slot,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
721 NGX_HTTP_LOC_CONF_OFFSET,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
722 offsetof(ngx_http_proxy_loc_conf_t, upstream.ssl_verify),
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
723 NULL },
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
724
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
725 { ngx_string("proxy_ssl_verify_depth"),
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
726 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
727 ngx_conf_set_num_slot,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
728 NGX_HTTP_LOC_CONF_OFFSET,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
729 offsetof(ngx_http_proxy_loc_conf_t, ssl_verify_depth),
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
730 NULL },
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
731
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
732 { ngx_string("proxy_ssl_trusted_certificate"),
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
733 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
734 ngx_conf_set_str_slot,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
735 NGX_HTTP_LOC_CONF_OFFSET,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
736 offsetof(ngx_http_proxy_loc_conf_t, ssl_trusted_certificate),
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
737 NULL },
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
738
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
739 { ngx_string("proxy_ssl_crl"),
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
740 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
741 ngx_conf_set_str_slot,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
742 NGX_HTTP_LOC_CONF_OFFSET,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
743 offsetof(ngx_http_proxy_loc_conf_t, ssl_crl),
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
744 NULL },
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
745
5900
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
746 { ngx_string("proxy_ssl_certificate"),
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
747 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
748 ngx_conf_set_str_slot,
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
749 NGX_HTTP_LOC_CONF_OFFSET,
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
750 offsetof(ngx_http_proxy_loc_conf_t, ssl_certificate),
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
751 NULL },
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
752
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
753 { ngx_string("proxy_ssl_certificate_key"),
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
754 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
755 ngx_conf_set_str_slot,
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
756 NGX_HTTP_LOC_CONF_OFFSET,
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
757 offsetof(ngx_http_proxy_loc_conf_t, ssl_certificate_key),
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
758 NULL },
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
759
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
760 { ngx_string("proxy_ssl_password_file"),
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
761 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
762 ngx_http_proxy_ssl_password_file,
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
763 NGX_HTTP_LOC_CONF_OFFSET,
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
764 0,
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
765 NULL },
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
766
2184
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
767 #endif
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
768
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
769 ngx_null_command
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
770 };
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
771
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
772
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 665
diff changeset
773 static ngx_http_module_t ngx_http_proxy_module_ctx = {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
774 ngx_http_proxy_add_variables, /* preconfiguration */
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
775 NULL, /* postconfiguration */
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
776
5951
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
777 ngx_http_proxy_create_main_conf, /* create main configuration */
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
778 NULL, /* init main configuration */
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
779
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
780 NULL, /* create server configuration */
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
781 NULL, /* merge server configuration */
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
782
4499
778ef9c3fd2d Fixed spelling in single-line comments.
Ruslan Ermilov <ru@nginx.com>
parents: 4466
diff changeset
783 ngx_http_proxy_create_loc_conf, /* create location configuration */
778ef9c3fd2d Fixed spelling in single-line comments.
Ruslan Ermilov <ru@nginx.com>
parents: 4466
diff changeset
784 ngx_http_proxy_merge_loc_conf /* merge location configuration */
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
785 };
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
786
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
787
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
788 ngx_module_t ngx_http_proxy_module = {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
789 NGX_MODULE_V1,
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
790 &ngx_http_proxy_module_ctx, /* module context */
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
791 ngx_http_proxy_commands, /* module directives */
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
792 NGX_HTTP_MODULE, /* module type */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
793 NULL, /* init master */
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
794 NULL, /* init module */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
795 NULL, /* init process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
796 NULL, /* init thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
797 NULL, /* exit thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
798 NULL, /* exit process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
799 NULL, /* exit master */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
800 NGX_MODULE_V1_PADDING
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
801 };
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
802
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
803
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
804 static char ngx_http_proxy_version[] = " HTTP/1.0" CRLF;
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
805 static char ngx_http_proxy_version_11[] = " HTTP/1.1" CRLF;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
806
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
807
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
808 static ngx_keyval_t ngx_http_proxy_headers[] = {
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
809 { ngx_string("Host"), ngx_string("$proxy_host") },
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
810 { ngx_string("Connection"), ngx_string("close") },
4927
93294110728f Request body: always use calculated size of a request body in proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4925
diff changeset
811 { ngx_string("Content-Length"), ngx_string("$proxy_internal_body_length") },
6051
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
812 { ngx_string("Transfer-Encoding"), ngx_string("$proxy_internal_chunked") },
5936
2d3908516101 Proxy: the "TE" header now stripped by default (ticket #537).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5910
diff changeset
813 { ngx_string("TE"), ngx_string("") },
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
814 { ngx_string("Keep-Alive"), ngx_string("") },
2067
5657037448d1 the "Expect" header support
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
815 { ngx_string("Expect"), ngx_string("") },
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
816 { ngx_string("Upgrade"), ngx_string("") },
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
817 { ngx_null_string, ngx_null_string }
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
818 };
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
819
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
820
2706
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
821 static ngx_str_t ngx_http_proxy_hide_headers[] = {
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
822 ngx_string("Date"),
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
823 ngx_string("Server"),
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
824 ngx_string("X-Pad"),
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
825 ngx_string("X-Accel-Expires"),
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
826 ngx_string("X-Accel-Redirect"),
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
827 ngx_string("X-Accel-Limit-Rate"),
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
828 ngx_string("X-Accel-Buffering"),
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
829 ngx_string("X-Accel-Charset"),
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
830 ngx_null_string
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
831 };
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
832
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
833
2705
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
834 #if (NGX_HTTP_CACHE)
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
835
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
836 static ngx_keyval_t ngx_http_proxy_cache_headers[] = {
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
837 { ngx_string("Host"), ngx_string("$proxy_host") },
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
838 { ngx_string("Connection"), ngx_string("close") },
4927
93294110728f Request body: always use calculated size of a request body in proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4925
diff changeset
839 { ngx_string("Content-Length"), ngx_string("$proxy_internal_body_length") },
6051
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
840 { ngx_string("Transfer-Encoding"), ngx_string("$proxy_internal_chunked") },
5936
2d3908516101 Proxy: the "TE" header now stripped by default (ticket #537).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5910
diff changeset
841 { ngx_string("TE"), ngx_string("") },
2705
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
842 { ngx_string("Keep-Alive"), ngx_string("") },
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
843 { ngx_string("Expect"), ngx_string("") },
4276
a0f18c78db3b Fixed Upgrade header clearing with proxy_cache.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4275
diff changeset
844 { ngx_string("Upgrade"), ngx_string("") },
5441
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
845 { ngx_string("If-Modified-Since"),
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
846 ngx_string("$upstream_cache_last_modified") },
2705
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
847 { ngx_string("If-Unmodified-Since"), ngx_string("") },
5738
c95d7882dfc9 Upstream: cache revalidation using If-None-Match.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5685
diff changeset
848 { ngx_string("If-None-Match"), ngx_string("$upstream_cache_etag") },
2705
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
849 { ngx_string("If-Match"), ngx_string("") },
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
850 { ngx_string("Range"), ngx_string("") },
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
851 { ngx_string("If-Range"), ngx_string("") },
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
852 { ngx_null_string, ngx_null_string }
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
853 };
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
854
2706
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
855 #endif
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
856
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
857
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
858 static ngx_http_variable_t ngx_http_proxy_vars[] = {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
859
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
860 { ngx_string("proxy_host"), NULL, ngx_http_proxy_host_variable, 0,
1925
6fd26b0e1009 non cacheable $proxy_host and $proxy_port
Igor Sysoev <igor@sysoev.ru>
parents: 1912
diff changeset
861 NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
862
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
863 { ngx_string("proxy_port"), NULL, ngx_http_proxy_port_variable, 0,
1925
6fd26b0e1009 non cacheable $proxy_host and $proxy_port
Igor Sysoev <igor@sysoev.ru>
parents: 1912
diff changeset
864 NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
865
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
866 { ngx_string("proxy_add_x_forwarded_for"), NULL,
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
867 ngx_http_proxy_add_x_forwarded_for_variable, 0, NGX_HTTP_VAR_NOHASH, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
868
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
869 #if 0
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
870 { ngx_string("proxy_add_via"), NULL, NULL, 0, NGX_HTTP_VAR_NOHASH, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
871 #endif
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
872
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
873 { ngx_string("proxy_internal_body_length"), NULL,
5203
bfb99b75833b Proxy: $proxy_internal_body_length fixed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5188
diff changeset
874 ngx_http_proxy_internal_body_length_variable, 0,
bfb99b75833b Proxy: $proxy_internal_body_length fixed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5188
diff changeset
875 NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
876
6051
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
877 { ngx_string("proxy_internal_chunked"), NULL,
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
878 ngx_http_proxy_internal_chunked_variable, 0,
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
879 NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
880
7077
2a288909abc6 Variables: macros for null variables.
Ruslan Ermilov <ru@nginx.com>
parents: 7047
diff changeset
881 ngx_http_null_variable
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
882 };
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
883
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
884
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
885 static ngx_path_init_t ngx_http_proxy_temp_path = {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
886 ngx_string(NGX_HTTP_PROXY_TEMP_PATH), { 1, 2, 0 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
887 };
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
888
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
889
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
890 static ngx_conf_bitmask_t ngx_http_proxy_cookie_flags_masks[] = {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
891
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
892 { ngx_string("secure"),
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
893 NGX_HTTP_PROXY_COOKIE_SECURE|NGX_HTTP_PROXY_COOKIE_SECURE_ON },
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
894
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
895 { ngx_string("nosecure"),
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
896 NGX_HTTP_PROXY_COOKIE_SECURE|NGX_HTTP_PROXY_COOKIE_SECURE_OFF },
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
897
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
898 { ngx_string("httponly"),
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
899 NGX_HTTP_PROXY_COOKIE_HTTPONLY|NGX_HTTP_PROXY_COOKIE_HTTPONLY_ON },
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
900
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
901 { ngx_string("nohttponly"),
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
902 NGX_HTTP_PROXY_COOKIE_HTTPONLY|NGX_HTTP_PROXY_COOKIE_HTTPONLY_OFF },
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
903
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
904 { ngx_string("samesite=strict"),
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
905 NGX_HTTP_PROXY_COOKIE_SAMESITE|NGX_HTTP_PROXY_COOKIE_SAMESITE_STRICT },
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
906
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
907 { ngx_string("samesite=lax"),
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
908 NGX_HTTP_PROXY_COOKIE_SAMESITE|NGX_HTTP_PROXY_COOKIE_SAMESITE_LAX },
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
909
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
910 { ngx_string("samesite=none"),
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
911 NGX_HTTP_PROXY_COOKIE_SAMESITE|NGX_HTTP_PROXY_COOKIE_SAMESITE_NONE },
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
912
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
913 { ngx_string("nosamesite"),
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
914 NGX_HTTP_PROXY_COOKIE_SAMESITE|NGX_HTTP_PROXY_COOKIE_SAMESITE_OFF },
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
915
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
916 { ngx_null_string, 0 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
917 };
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
918
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
919
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
920 static ngx_int_t
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
921 ngx_http_proxy_handler(ngx_http_request_t *r)
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
922 {
5951
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
923 ngx_int_t rc;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
924 ngx_http_upstream_t *u;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
925 ngx_http_proxy_ctx_t *ctx;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
926 ngx_http_proxy_loc_conf_t *plcf;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
927 #if (NGX_HTTP_CACHE)
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
928 ngx_http_proxy_main_conf_t *pmcf;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
929 #endif
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
930
3006
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 2989
diff changeset
931 if (ngx_http_upstream_create(r) != NGX_OK) {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
932 return NGX_HTTP_INTERNAL_SERVER_ERROR;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
933 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
934
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
935 ctx = ngx_pcalloc(r->pool, sizeof(ngx_http_proxy_ctx_t));
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
936 if (ctx == NULL) {
6003
cf2f8d91cf09 Proxy: use an appropriate error on memory allocation failure.
Ruslan Ermilov <ru@nginx.com>
parents: 5951
diff changeset
937 return NGX_HTTP_INTERNAL_SERVER_ERROR;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
938 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
939
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
940 ngx_http_set_ctx(r, ctx, ngx_http_proxy_module);
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
941
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
942 plcf = ngx_http_get_module_loc_conf(r, ngx_http_proxy_module);
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
943
3006
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 2989
diff changeset
944 u = r->upstream;
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 2989
diff changeset
945
3733
527a0f8cae2a use NULL instead of 0
Igor Sysoev <igor@sysoev.ru>
parents: 3731
diff changeset
946 if (plcf->proxy_lengths == NULL) {
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
947 ctx->vars = plcf->vars;
2391
d88e757cc7d8 delete surplus upstream.schema field
Igor Sysoev <igor@sysoev.ru>
parents: 2285
diff changeset
948 u->schema = plcf->vars.schema;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
949 #if (NGX_HTTP_SSL)
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
950 u->ssl = (plcf->upstream.ssl != NULL);
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
951 #endif
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
952
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
953 } else {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
954 if (ngx_http_proxy_eval(r, ctx, plcf) != NGX_OK) {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
955 return NGX_HTTP_INTERNAL_SERVER_ERROR;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
956 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
957 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
958
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
959 u->output.tag = (ngx_buf_tag_t) &ngx_http_proxy_module;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
960
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
961 u->conf = &plcf->upstream;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
962
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
963 #if (NGX_HTTP_CACHE)
5951
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
964 pmcf = ngx_http_get_module_main_conf(r, ngx_http_proxy_module);
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
965
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
966 u->caches = &pmcf->caches;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
967 u->create_key = ngx_http_proxy_create_key;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
968 #endif
5951
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
969
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
970 u->create_request = ngx_http_proxy_create_request;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
971 u->reinit_request = ngx_http_proxy_reinit_request;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
972 u->process_header = ngx_http_proxy_process_status_line;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
973 u->abort_request = ngx_http_proxy_abort_request;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
974 u->finalize_request = ngx_http_proxy_finalize_request;
3477
fb0b7450c2e8 reset a parsing state to parse correctly an upstream response,
Igor Sysoev <igor@sysoev.ru>
parents: 3471
diff changeset
975 r->state = 0;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
976
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
977 if (plcf->redirects) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
978 u->rewrite_redirect = ngx_http_proxy_rewrite_redirect;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
979 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
980
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
981 if (plcf->cookie_domains || plcf->cookie_paths || plcf->cookie_flags) {
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
982 u->rewrite_cookie = ngx_http_proxy_rewrite_cookie;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
983 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
984
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
985 u->buffering = plcf->upstream.buffering;
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
986
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
987 u->pipe = ngx_pcalloc(r->pool, sizeof(ngx_event_pipe_t));
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
988 if (u->pipe == NULL) {
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
989 return NGX_HTTP_INTERNAL_SERVER_ERROR;
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
990 }
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
991
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
992 u->pipe->input_filter = ngx_http_proxy_copy_filter;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
993 u->pipe->input_ctx = r;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
994
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
995 u->input_filter_init = ngx_http_proxy_input_filter_init;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
996 u->input_filter = ngx_http_proxy_non_buffered_copy_filter;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
997 u->input_filter_ctx = r;
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
998
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
999 u->accel = 1;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1000
6050
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
1001 if (!plcf->upstream.request_buffering
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
1002 && plcf->body_values == NULL && plcf->upstream.pass_request_body
6051
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1003 && (!r->headers_in.chunked
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1004 || plcf->http_version == NGX_HTTP_VERSION_11))
6050
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
1005 {
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
1006 r->request_body_no_buffering = 1;
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
1007 }
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
1008
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1009 rc = ngx_http_read_client_request_body(r, ngx_http_upstream_init);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1010
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1011 if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1012 return rc;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1013 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1014
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1015 return NGX_DONE;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1016 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1017
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1018
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1019 static ngx_int_t
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1020 ngx_http_proxy_eval(ngx_http_request_t *r, ngx_http_proxy_ctx_t *ctx,
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1021 ngx_http_proxy_loc_conf_t *plcf)
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1022 {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1023 u_char *p;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1024 size_t add;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1025 u_short port;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1026 ngx_str_t proxy;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1027 ngx_url_t url;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1028 ngx_http_upstream_t *u;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1029
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1030 if (ngx_http_script_run(r, &proxy, plcf->proxy_lengths->elts, 0,
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1031 plcf->proxy_values->elts)
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1032 == NULL)
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1033 {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1034 return NGX_ERROR;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1035 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1036
3977
2527cdb8d31f test length of proxy_pass with variables
Igor Sysoev <igor@sysoev.ru>
parents: 3976
diff changeset
1037 if (proxy.len > 7
2527cdb8d31f test length of proxy_pass with variables
Igor Sysoev <igor@sysoev.ru>
parents: 3976
diff changeset
1038 && ngx_strncasecmp(proxy.data, (u_char *) "http://", 7) == 0)
2527cdb8d31f test length of proxy_pass with variables
Igor Sysoev <igor@sysoev.ru>
parents: 3976
diff changeset
1039 {
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1040 add = 7;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1041 port = 80;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1042
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1043 #if (NGX_HTTP_SSL)
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1044
3977
2527cdb8d31f test length of proxy_pass with variables
Igor Sysoev <igor@sysoev.ru>
parents: 3976
diff changeset
1045 } else if (proxy.len > 8
2527cdb8d31f test length of proxy_pass with variables
Igor Sysoev <igor@sysoev.ru>
parents: 3976
diff changeset
1046 && ngx_strncasecmp(proxy.data, (u_char *) "https://", 8) == 0)
2527cdb8d31f test length of proxy_pass with variables
Igor Sysoev <igor@sysoev.ru>
parents: 3976
diff changeset
1047 {
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1048 add = 8;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1049 port = 443;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1050 r->upstream->ssl = 1;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1051
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1052 #endif
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1053
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1054 } else {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1055 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1056 "invalid URL prefix in \"%V\"", &proxy);
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1057 return NGX_ERROR;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1058 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1059
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1060 u = r->upstream;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1061
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1062 u->schema.len = add;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1063 u->schema.data = proxy.data;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1064
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1065 ngx_memzero(&url, sizeof(ngx_url_t));
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1066
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1067 url.url.len = proxy.len - add;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1068 url.url.data = proxy.data + add;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1069 url.default_port = port;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1070 url.uri_part = 1;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1071 url.no_resolve = 1;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1072
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1073 if (ngx_parse_url(r->pool, &url) != NGX_OK) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1074 if (url.err) {
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1075 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1076 "%s in upstream \"%V\"", url.err, &url.url);
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1077 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1078
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1079 return NGX_ERROR;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1080 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1081
3323
9421e997c2c4 allow "proxy_pass http://$backend" without URI part
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
1082 if (url.uri.len) {
9421e997c2c4 allow "proxy_pass http://$backend" without URI part
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
1083 if (url.uri.data[0] == '?') {
9421e997c2c4 allow "proxy_pass http://$backend" without URI part
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
1084 p = ngx_pnalloc(r->pool, url.uri.len + 1);
9421e997c2c4 allow "proxy_pass http://$backend" without URI part
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
1085 if (p == NULL) {
9421e997c2c4 allow "proxy_pass http://$backend" without URI part
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
1086 return NGX_ERROR;
9421e997c2c4 allow "proxy_pass http://$backend" without URI part
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
1087 }
9421e997c2c4 allow "proxy_pass http://$backend" without URI part
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
1088
9421e997c2c4 allow "proxy_pass http://$backend" without URI part
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
1089 *p++ = '/';
9421e997c2c4 allow "proxy_pass http://$backend" without URI part
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
1090 ngx_memcpy(p, url.uri.data, url.uri.len);
9421e997c2c4 allow "proxy_pass http://$backend" without URI part
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
1091
9421e997c2c4 allow "proxy_pass http://$backend" without URI part
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
1092 url.uri.len++;
9421e997c2c4 allow "proxy_pass http://$backend" without URI part
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
1093 url.uri.data = p - 1;
2284
c3035feb6638 fix case proxy_pass URL is evaluted to http://host?args
Igor Sysoev <igor@sysoev.ru>
parents: 2268
diff changeset
1094 }
c3035feb6638 fix case proxy_pass URL is evaluted to http://host?args
Igor Sysoev <igor@sysoev.ru>
parents: 2268
diff changeset
1095 }
c3035feb6638 fix case proxy_pass URL is evaluted to http://host?args
Igor Sysoev <igor@sysoev.ru>
parents: 2268
diff changeset
1096
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1097 ctx->vars.key_start = u->schema;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1098
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1099 ngx_http_proxy_set_vars(&url, &ctx->vars);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1100
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1101 u->resolved = ngx_pcalloc(r->pool, sizeof(ngx_http_upstream_resolved_t));
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1102 if (u->resolved == NULL) {
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1103 return NGX_ERROR;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1104 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1105
6784
1af120241cde Upstream: removed unnecessary condition in proxy_eval() and friends.
Ruslan Ermilov <ru@nginx.com>
parents: 6781
diff changeset
1106 if (url.addrs) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1107 u->resolved->sockaddr = url.addrs[0].sockaddr;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1108 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
1109 u->resolved->name = url.addrs[0].name;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1110 u->resolved->naddrs = 1;
2422
7af1e5fe102c variable support for unix sockets in fastcgi_pass and proxy_pass
Igor Sysoev <igor@sysoev.ru>
parents: 2391
diff changeset
1111 }
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1112
6785
d1d0dd69a419 Upstream: added the ngx_http_upstream_resolved_t.name field.
Ruslan Ermilov <ru@nginx.com>
parents: 6784
diff changeset
1113 u->resolved->host = url.host;
6303
a93345ee8f52 Upstream: fixed "no port" detection in evaluated upstreams.
Ruslan Ermilov <ru@nginx.com>
parents: 6290
diff changeset
1114 u->resolved->port = (in_port_t) (url.no_port ? port : url.port);
a93345ee8f52 Upstream: fixed "no port" detection in evaluated upstreams.
Ruslan Ermilov <ru@nginx.com>
parents: 6290
diff changeset
1115 u->resolved->no_port = url.no_port;
a93345ee8f52 Upstream: fixed "no port" detection in evaluated upstreams.
Ruslan Ermilov <ru@nginx.com>
parents: 6290
diff changeset
1116
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1117 return NGX_OK;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1118 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1119
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1120
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1121 #if (NGX_HTTP_CACHE)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1122
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1123 static ngx_int_t
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1124 ngx_http_proxy_create_key(ngx_http_request_t *r)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1125 {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1126 size_t len, loc_len;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1127 u_char *p;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1128 uintptr_t escape;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1129 ngx_str_t *key;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1130 ngx_http_upstream_t *u;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1131 ngx_http_proxy_ctx_t *ctx;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1132 ngx_http_proxy_loc_conf_t *plcf;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1133
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1134 u = r->upstream;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1135
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1136 plcf = ngx_http_get_module_loc_conf(r, ngx_http_proxy_module);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1137
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1138 ctx = ngx_http_get_module_ctx(r, ngx_http_proxy_module);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1139
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1140 key = ngx_array_push(&r->cache->keys);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1141 if (key == NULL) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1142 return NGX_ERROR;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1143 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1144
4947
4251e72b8bb4 Allow the complex value to be defined as an empty string.
Ruslan Ermilov <ru@nginx.com>
parents: 4927
diff changeset
1145 if (plcf->cache_key.value.data) {
2672
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
1146
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
1147 if (ngx_http_complex_value(r, &plcf->cache_key, key) != NGX_OK) {
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
1148 return NGX_ERROR;
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
1149 }
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
1150
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
1151 return NGX_OK;
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
1152 }
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
1153
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1154 *key = ctx->vars.key_start;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1155
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1156 key = ngx_array_push(&r->cache->keys);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1157 if (key == NULL) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1158 return NGX_ERROR;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1159 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1160
4377
726a1ca9b52b Proxy: made proxy_pass with variables more consistent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4336
diff changeset
1161 if (plcf->proxy_lengths && ctx->vars.uri.len) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1162
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1163 *key = ctx->vars.uri;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1164 u->uri = ctx->vars.uri;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1165
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1166 return NGX_OK;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1167
7167
8530aea9aa50 Proxy: simplified conditions of using unparsed uri.
Roman Arutyunyan <arut@nginx.com>
parents: 7077
diff changeset
1168 } else if (ctx->vars.uri.len == 0 && r->valid_unparsed_uri) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1169 *key = r->unparsed_uri;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1170 u->uri = r->unparsed_uri;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1171
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1172 return NGX_OK;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1173 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1174
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1175 loc_len = (r->valid_location && ctx->vars.uri.len) ? plcf->location.len : 0;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1176
7169
e8e19f5e0b8b Proxy: escape explicit space in URI in default cache key.
Roman Arutyunyan <arut@nginx.com>
parents: 7167
diff changeset
1177 if (r->quoted_uri || r->space_in_uri || r->internal) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1178 escape = 2 * ngx_escape_uri(NULL, r->uri.data + loc_len,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1179 r->uri.len - loc_len, NGX_ESCAPE_URI);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1180 } else {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1181 escape = 0;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1182 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1183
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1184 len = ctx->vars.uri.len + r->uri.len - loc_len + escape
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1185 + sizeof("?") - 1 + r->args.len;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1186
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1187 p = ngx_pnalloc(r->pool, len);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1188 if (p == NULL) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1189 return NGX_ERROR;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1190 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1191
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1192 key->data = p;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1193
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1194 if (r->valid_location) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1195 p = ngx_copy(p, ctx->vars.uri.data, ctx->vars.uri.len);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1196 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1197
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1198 if (escape) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1199 ngx_escape_uri(p, r->uri.data + loc_len,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1200 r->uri.len - loc_len, NGX_ESCAPE_URI);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1201 p += r->uri.len - loc_len + escape;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1202
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1203 } else {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1204 p = ngx_copy(p, r->uri.data + loc_len, r->uri.len - loc_len);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1205 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1206
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1207 if (r->args.len > 0) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1208 *p++ = '?';
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1209 p = ngx_copy(p, r->args.data, r->args.len);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1210 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1211
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1212 key->len = p - key->data;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1213 u->uri = *key;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1214
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1215 return NGX_OK;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1216 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1217
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1218 #endif
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1219
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1220
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1221 static ngx_int_t
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1222 ngx_http_proxy_create_request(ngx_http_request_t *r)
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1223 {
7047
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1224 size_t len, uri_len, loc_len, body_len,
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1225 key_len, val_len;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1226 uintptr_t escape;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1227 ngx_buf_t *b;
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1228 ngx_str_t method;
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1229 ngx_uint_t i, unparsed_uri;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1230 ngx_chain_t *cl, *body;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1231 ngx_list_part_t *part;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1232 ngx_table_elt_t *header;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1233 ngx_http_upstream_t *u;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1234 ngx_http_proxy_ctx_t *ctx;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1235 ngx_http_script_code_pt code;
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
1236 ngx_http_proxy_headers_t *headers;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1237 ngx_http_script_engine_t e, le;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1238 ngx_http_proxy_loc_conf_t *plcf;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1239 ngx_http_script_len_code_pt lcode;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1240
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1241 u = r->upstream;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1242
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1243 plcf = ngx_http_get_module_loc_conf(r, ngx_http_proxy_module);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1244
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
1245 #if (NGX_HTTP_CACHE)
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
1246 headers = u->cacheable ? &plcf->headers_cache : &plcf->headers;
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
1247 #else
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
1248 headers = &plcf->headers;
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
1249 #endif
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
1250
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 555
diff changeset
1251 if (u->method.len) {
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 555
diff changeset
1252 /* HEAD was changed to GET to cache response */
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 555
diff changeset
1253 method = u->method;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 555
diff changeset
1254
6781
ca27074f8f0f Proxy: support variables for proxy_method directive.
Dmitry Lazurkin <dilaz03@gmail.com>
parents: 6747
diff changeset
1255 } else if (plcf->method) {
ca27074f8f0f Proxy: support variables for proxy_method directive.
Dmitry Lazurkin <dilaz03@gmail.com>
parents: 6747
diff changeset
1256 if (ngx_http_complex_value(r, plcf->method, &method) != NGX_OK) {
ca27074f8f0f Proxy: support variables for proxy_method directive.
Dmitry Lazurkin <dilaz03@gmail.com>
parents: 6747
diff changeset
1257 return NGX_ERROR;
ca27074f8f0f Proxy: support variables for proxy_method directive.
Dmitry Lazurkin <dilaz03@gmail.com>
parents: 6747
diff changeset
1258 }
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 555
diff changeset
1259
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1260 } else {
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 555
diff changeset
1261 method = r->method_name;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1262 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1263
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1264 ctx = ngx_http_get_module_ctx(r, ngx_http_proxy_module);
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1265
6311
44122bddd9a1 Proxy: improved code readability.
Ruslan Ermilov <ru@nginx.com>
parents: 6303
diff changeset
1266 if (method.len == 4
44122bddd9a1 Proxy: improved code readability.
Ruslan Ermilov <ru@nginx.com>
parents: 6303
diff changeset
1267 && ngx_strncasecmp(method.data, (u_char *) "HEAD", 4) == 0)
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1268 {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1269 ctx->head = 1;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1270 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1271
6311
44122bddd9a1 Proxy: improved code readability.
Ruslan Ermilov <ru@nginx.com>
parents: 6303
diff changeset
1272 len = method.len + 1 + sizeof(ngx_http_proxy_version) - 1
44122bddd9a1 Proxy: improved code readability.
Ruslan Ermilov <ru@nginx.com>
parents: 6303
diff changeset
1273 + sizeof(CRLF) - 1;
1667
e9bd042134cb fix segfault
Igor Sysoev <igor@sysoev.ru>
parents: 1658
diff changeset
1274
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1275 escape = 0;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1276 loc_len = 0;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1277 unparsed_uri = 0;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1278
4377
726a1ca9b52b Proxy: made proxy_pass with variables more consistent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4336
diff changeset
1279 if (plcf->proxy_lengths && ctx->vars.uri.len) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1280 uri_len = ctx->vars.uri.len;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1281
7167
8530aea9aa50 Proxy: simplified conditions of using unparsed uri.
Roman Arutyunyan <arut@nginx.com>
parents: 7077
diff changeset
1282 } else if (ctx->vars.uri.len == 0 && r->valid_unparsed_uri) {
609
608cf78b24ef nginx-0.3.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 605
diff changeset
1283 unparsed_uri = 1;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1284 uri_len = r->unparsed_uri.len;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1285
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1286 } else {
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1287 loc_len = (r->valid_location && ctx->vars.uri.len) ?
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1288 plcf->location.len : 0;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1289
3615
31e9677b15a1 allow spaces in URI
Igor Sysoev <igor@sysoev.ru>
parents: 3606
diff changeset
1290 if (r->quoted_uri || r->space_in_uri || r->internal) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1291 escape = 2 * ngx_escape_uri(NULL, r->uri.data + loc_len,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1292 r->uri.len - loc_len, NGX_ESCAPE_URI);
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1293 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1294
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1295 uri_len = ctx->vars.uri.len + r->uri.len - loc_len + escape
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1296 + sizeof("?") - 1 + r->args.len;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1297 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1298
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1299 if (uri_len == 0) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1300 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1301 "zero length URI to proxy");
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1302 return NGX_ERROR;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1303 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1304
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1305 len += uri_len;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1306
5211
ecd762770729 Proxy: clear script engine used to calculate lengths.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5203
diff changeset
1307 ngx_memzero(&le, sizeof(ngx_http_script_engine_t));
ecd762770729 Proxy: clear script engine used to calculate lengths.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5203
diff changeset
1308
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
1309 ngx_http_script_flush_no_cacheable_variables(r, plcf->body_flushes);
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
1310 ngx_http_script_flush_no_cacheable_variables(r, headers->flushes);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1311
5910
29fa5023bd6f Proxy: renamed and rearranged fields in proxy configuration.
Roman Arutyunyan <arut@nginx.com>
parents: 5909
diff changeset
1312 if (plcf->body_lengths) {
29fa5023bd6f Proxy: renamed and rearranged fields in proxy configuration.
Roman Arutyunyan <arut@nginx.com>
parents: 5909
diff changeset
1313 le.ip = plcf->body_lengths->elts;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1314 le.request = r;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1315 le.flushed = 1;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1316 body_len = 0;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1317
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1318 while (*(uintptr_t *) le.ip) {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1319 lcode = *(ngx_http_script_len_code_pt *) le.ip;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1320 body_len += lcode(&le);
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1321 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1322
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1323 ctx->internal_body_length = body_len;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1324 len += body_len;
4927
93294110728f Request body: always use calculated size of a request body in proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4925
diff changeset
1325
6051
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1326 } else if (r->headers_in.chunked && r->reading_body) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1327 ctx->internal_body_length = -1;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1328 ctx->internal_chunked = 1;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1329
4927
93294110728f Request body: always use calculated size of a request body in proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4925
diff changeset
1330 } else {
93294110728f Request body: always use calculated size of a request body in proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4925
diff changeset
1331 ctx->internal_body_length = r->headers_in.content_length_n;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1332 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1333
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
1334 le.ip = headers->lengths->elts;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1335 le.request = r;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1336 le.flushed = 1;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1337
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1338 while (*(uintptr_t *) le.ip) {
7047
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1339
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1340 lcode = *(ngx_http_script_len_code_pt *) le.ip;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1341 key_len = lcode(&le);
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1342
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1343 for (val_len = 0; *(uintptr_t *) le.ip; val_len += lcode(&le)) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1344 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
1345 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1346 le.ip += sizeof(uintptr_t);
7047
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1347
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1348 if (val_len == 0) {
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1349 continue;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1350 }
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1351
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1352 len += key_len + sizeof(": ") - 1 + val_len + sizeof(CRLF) - 1;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1353 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1354
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1355
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1356 if (plcf->upstream.pass_request_headers) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1357 part = &r->headers_in.headers.part;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1358 header = part->elts;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1359
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1360 for (i = 0; /* void */; i++) {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1361
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1362 if (i >= part->nelts) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1363 if (part->next == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1364 break;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1365 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1366
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1367 part = part->next;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1368 header = part->elts;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1369 i = 0;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1370 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1371
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
1372 if (ngx_hash_find(&headers->hash, header[i].hash,
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1373 header[i].lowcase_key, header[i].key.len))
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1374 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1375 continue;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1376 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1377
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1378 len += header[i].key.len + sizeof(": ") - 1
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1379 + header[i].value.len + sizeof(CRLF) - 1;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1380 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1381 }
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1382
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1383
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1384 b = ngx_create_temp_buf(r->pool, len);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1385 if (b == NULL) {
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1386 return NGX_ERROR;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1387 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1388
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1389 cl = ngx_alloc_chain_link(r->pool);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1390 if (cl == NULL) {
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1391 return NGX_ERROR;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1392 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1393
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1394 cl->buf = b;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1395
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1396
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1397 /* the request line */
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1398
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1399 b->last = ngx_copy(b->last, method.data, method.len);
6311
44122bddd9a1 Proxy: improved code readability.
Ruslan Ermilov <ru@nginx.com>
parents: 6303
diff changeset
1400 *b->last++ = ' ';
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1401
555
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1402 u->uri.data = b->last;
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1403
4377
726a1ca9b52b Proxy: made proxy_pass with variables more consistent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4336
diff changeset
1404 if (plcf->proxy_lengths && ctx->vars.uri.len) {
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1405 b->last = ngx_copy(b->last, ctx->vars.uri.data, ctx->vars.uri.len);
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1406
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1407 } else if (unparsed_uri) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1408 b->last = ngx_copy(b->last, r->unparsed_uri.data, r->unparsed_uri.len);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1409
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1410 } else {
555
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1411 if (r->valid_location) {
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1412 b->last = ngx_copy(b->last, ctx->vars.uri.data, ctx->vars.uri.len);
555
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1413 }
551
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
1414
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1415 if (escape) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1416 ngx_escape_uri(b->last, r->uri.data + loc_len,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1417 r->uri.len - loc_len, NGX_ESCAPE_URI);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1418 b->last += r->uri.len - loc_len + escape;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1419
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1420 } else {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1421 b->last = ngx_copy(b->last, r->uri.data + loc_len,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1422 r->uri.len - loc_len);
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1423 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1424
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1425 if (r->args.len > 0) {
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1426 *b->last++ = '?';
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1427 b->last = ngx_copy(b->last, r->args.data, r->args.len);
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1428 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1429 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1430
555
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1431 u->uri.len = b->last - u->uri.data;
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1432
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1433 if (plcf->http_version == NGX_HTTP_VERSION_11) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1434 b->last = ngx_cpymem(b->last, ngx_http_proxy_version_11,
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1435 sizeof(ngx_http_proxy_version_11) - 1);
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1436
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1437 } else {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1438 b->last = ngx_cpymem(b->last, ngx_http_proxy_version,
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1439 sizeof(ngx_http_proxy_version) - 1);
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1440 }
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1441
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1442 ngx_memzero(&e, sizeof(ngx_http_script_engine_t));
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1443
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
1444 e.ip = headers->values->elts;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1445 e.pos = b->last;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1446 e.request = r;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1447 e.flushed = 1;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1448
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
1449 le.ip = headers->lengths->elts;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1450
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1451 while (*(uintptr_t *) le.ip) {
7047
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1452
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1453 lcode = *(ngx_http_script_len_code_pt *) le.ip;
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1454 (void) lcode(&le);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1455
7047
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1456 for (val_len = 0; *(uintptr_t *) le.ip; val_len += lcode(&le)) {
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1457 lcode = *(ngx_http_script_len_code_pt *) le.ip;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1458 }
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1459 le.ip += sizeof(uintptr_t);
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1460
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1461 if (val_len == 0) {
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1462 e.skip = 1;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1463
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1464 while (*(uintptr_t *) e.ip) {
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1465 code = *(ngx_http_script_code_pt *) e.ip;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1466 code((ngx_http_script_engine_t *) &e);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1467 }
7047
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1468 e.ip += sizeof(uintptr_t);
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1469
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1470 e.skip = 0;
7047
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1471
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1472 continue;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1473 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1474
7047
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1475 code = *(ngx_http_script_code_pt *) e.ip;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1476 code((ngx_http_script_engine_t *) &e);
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1477
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1478 *e.pos++ = ':'; *e.pos++ = ' ';
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1479
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1480 while (*(uintptr_t *) e.ip) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1481 code = *(ngx_http_script_code_pt *) e.ip;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1482 code((ngx_http_script_engine_t *) &e);
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1483 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1484 e.ip += sizeof(uintptr_t);
7047
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1485
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1486 *e.pos++ = CR; *e.pos++ = LF;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1487 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1488
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1489 b->last = e.pos;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1490
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1491
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1492 if (plcf->upstream.pass_request_headers) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1493 part = &r->headers_in.headers.part;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1494 header = part->elts;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1495
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1496 for (i = 0; /* void */; i++) {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1497
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1498 if (i >= part->nelts) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1499 if (part->next == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1500 break;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1501 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1502
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1503 part = part->next;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1504 header = part->elts;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1505 i = 0;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1506 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1507
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
1508 if (ngx_hash_find(&headers->hash, header[i].hash,
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1509 header[i].lowcase_key, header[i].key.len))
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1510 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1511 continue;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1512 }
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1513
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1514 b->last = ngx_copy(b->last, header[i].key.data, header[i].key.len);
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1515
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1516 *b->last++ = ':'; *b->last++ = ' ';
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1517
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1518 b->last = ngx_copy(b->last, header[i].value.data,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1519 header[i].value.len);
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1520
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1521 *b->last++ = CR; *b->last++ = LF;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1522
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1523 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1524 "http proxy header: \"%V: %V\"",
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1525 &header[i].key, &header[i].value);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1526 }
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1527 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1528
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1529
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1530 /* add "\r\n" at the header end */
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1531 *b->last++ = CR; *b->last++ = LF;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1532
5910
29fa5023bd6f Proxy: renamed and rearranged fields in proxy configuration.
Roman Arutyunyan <arut@nginx.com>
parents: 5909
diff changeset
1533 if (plcf->body_values) {
29fa5023bd6f Proxy: renamed and rearranged fields in proxy configuration.
Roman Arutyunyan <arut@nginx.com>
parents: 5909
diff changeset
1534 e.ip = plcf->body_values->elts;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1535 e.pos = b->last;
6043
613b14b305c7 Proxy: fixed proxy_set_body with proxy_cache.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6003
diff changeset
1536 e.skip = 0;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1537
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1538 while (*(uintptr_t *) e.ip) {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1539 code = *(ngx_http_script_code_pt *) e.ip;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1540 code((ngx_http_script_engine_t *) &e);
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1541 }
579
4c5c2c55975c nginx-0.3.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1542
4c5c2c55975c nginx-0.3.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1543 b->last = e.pos;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1544 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1545
1774
68d21fd1dc64 use %*s format
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
1546 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
5685
0cbefdcf82a6 Style: use %N instead of '\n' where appropriate.
Ruslan Ermilov <ru@nginx.com>
parents: 5676
diff changeset
1547 "http proxy header:%N\"%*s\"",
1774
68d21fd1dc64 use %*s format
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
1548 (size_t) (b->last - b->pos), b->pos);
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1549
6050
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
1550 if (r->request_body_no_buffering) {
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
1551
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
1552 u->request_bufs = cl;
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
1553
6051
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1554 if (ctx->internal_chunked) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1555 u->output.output_filter = ngx_http_proxy_body_output_filter;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1556 u->output.filter_ctx = r;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1557 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1558
6050
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
1559 } else if (plcf->body_values == NULL && plcf->upstream.pass_request_body) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1560
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1561 body = u->request_bufs;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1562 u->request_bufs = cl;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1563
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1564 while (body) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1565 b = ngx_alloc_buf(r->pool);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1566 if (b == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1567 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1568 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1569
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1570 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
1571
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1572 cl->next = ngx_alloc_chain_link(r->pool);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1573 if (cl->next == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1574 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1575 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1576
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1577 cl = cl->next;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1578 cl->buf = b;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1579
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1580 body = body->next;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1581 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1582
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1583 } else {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1584 u->request_bufs = cl;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1585 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1586
4009
3183165283cc Fixing proxy_set_body and proxy_pass_request_body with SSL.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3977
diff changeset
1587 b->flush = 1;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1588 cl->next = NULL;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1589
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1590 return NGX_OK;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1591 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1592
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1593
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1594 static ngx_int_t
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1595 ngx_http_proxy_reinit_request(ngx_http_request_t *r)
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1596 {
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1597 ngx_http_proxy_ctx_t *ctx;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1598
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1599 ctx = ngx_http_get_module_ctx(r, ngx_http_proxy_module);
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1600
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1601 if (ctx == NULL) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1602 return NGX_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1603 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1604
3627
9061fdb2ed8c use ngx_http_parse_status_line()
Igor Sysoev <igor@sysoev.ru>
parents: 3615
diff changeset
1605 ctx->status.code = 0;
9061fdb2ed8c use ngx_http_parse_status_line()
Igor Sysoev <igor@sysoev.ru>
parents: 3615
diff changeset
1606 ctx->status.count = 0;
9061fdb2ed8c use ngx_http_parse_status_line()
Igor Sysoev <igor@sysoev.ru>
parents: 3615
diff changeset
1607 ctx->status.start = NULL;
9061fdb2ed8c use ngx_http_parse_status_line()
Igor Sysoev <igor@sysoev.ru>
parents: 3615
diff changeset
1608 ctx->status.end = NULL;
4925
32030fa8cb14 Request body: chunked parsing moved to ngx_http_parse.c from proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4602
diff changeset
1609 ctx->chunked.state = 0;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1610
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1611 r->upstream->process_header = ngx_http_proxy_process_status_line;
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1612 r->upstream->pipe->input_filter = ngx_http_proxy_copy_filter;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1613 r->upstream->input_filter = ngx_http_proxy_non_buffered_copy_filter;
3477
fb0b7450c2e8 reset a parsing state to parse correctly an upstream response,
Igor Sysoev <igor@sysoev.ru>
parents: 3471
diff changeset
1614 r->state = 0;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1615
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1616 return NGX_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1617 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1618
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1619
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1620 static ngx_int_t
6051
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1621 ngx_http_proxy_body_output_filter(void *data, ngx_chain_t *in)
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1622 {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1623 ngx_http_request_t *r = data;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1624
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1625 off_t size;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1626 u_char *chunk;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1627 ngx_int_t rc;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1628 ngx_buf_t *b;
6056
24ccec3c4a87 Proxy: fixed proxy_request_buffering and chunked with preread body.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6051
diff changeset
1629 ngx_chain_t *out, *cl, *tl, **ll, **fl;
6051
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1630 ngx_http_proxy_ctx_t *ctx;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1631
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1632 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1633 "proxy output filter");
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1634
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1635 ctx = ngx_http_get_module_ctx(r, ngx_http_proxy_module);
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1636
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1637 if (in == NULL) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1638 out = in;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1639 goto out;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1640 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1641
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1642 out = NULL;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1643 ll = &out;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1644
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1645 if (!ctx->header_sent) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1646 /* first buffer contains headers, pass it unmodified */
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1647
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1648 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1649 "proxy output header");
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1650
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1651 ctx->header_sent = 1;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1652
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1653 tl = ngx_alloc_chain_link(r->pool);
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1654 if (tl == NULL) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1655 return NGX_ERROR;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1656 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1657
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1658 tl->buf = in->buf;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1659 *ll = tl;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1660 ll = &tl->next;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1661
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1662 in = in->next;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1663
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1664 if (in == NULL) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1665 tl->next = NULL;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1666 goto out;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1667 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1668 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1669
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1670 size = 0;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1671 cl = in;
6056
24ccec3c4a87 Proxy: fixed proxy_request_buffering and chunked with preread body.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6051
diff changeset
1672 fl = ll;
6051
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1673
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1674 for ( ;; ) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1675 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
6480
f01ab2dbcfdc Fixed logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6467
diff changeset
1676 "proxy output chunk: %O", ngx_buf_size(cl->buf));
6051
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1677
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1678 size += ngx_buf_size(cl->buf);
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1679
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1680 if (cl->buf->flush
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1681 || cl->buf->sync
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1682 || ngx_buf_in_memory(cl->buf)
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1683 || cl->buf->in_file)
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1684 {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1685 tl = ngx_alloc_chain_link(r->pool);
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1686 if (tl == NULL) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1687 return NGX_ERROR;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1688 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1689
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1690 tl->buf = cl->buf;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1691 *ll = tl;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1692 ll = &tl->next;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1693 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1694
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1695 if (cl->next == NULL) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1696 break;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1697 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1698
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1699 cl = cl->next;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1700 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1701
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1702 if (size) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1703 tl = ngx_chain_get_free_buf(r->pool, &ctx->free);
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1704 if (tl == NULL) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1705 return NGX_ERROR;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1706 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1707
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1708 b = tl->buf;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1709 chunk = b->start;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1710
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1711 if (chunk == NULL) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1712 /* the "0000000000000000" is 64-bit hexadecimal string */
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1713
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1714 chunk = ngx_palloc(r->pool, sizeof("0000000000000000" CRLF) - 1);
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1715 if (chunk == NULL) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1716 return NGX_ERROR;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1717 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1718
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1719 b->start = chunk;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1720 b->end = chunk + sizeof("0000000000000000" CRLF) - 1;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1721 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1722
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1723 b->tag = (ngx_buf_tag_t) &ngx_http_proxy_body_output_filter;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1724 b->memory = 0;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1725 b->temporary = 1;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1726 b->pos = chunk;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1727 b->last = ngx_sprintf(chunk, "%xO" CRLF, size);
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1728
6056
24ccec3c4a87 Proxy: fixed proxy_request_buffering and chunked with preread body.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6051
diff changeset
1729 tl->next = *fl;
24ccec3c4a87 Proxy: fixed proxy_request_buffering and chunked with preread body.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6051
diff changeset
1730 *fl = tl;
6051
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1731 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1732
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1733 if (cl->buf->last_buf) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1734 tl = ngx_chain_get_free_buf(r->pool, &ctx->free);
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1735 if (tl == NULL) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1736 return NGX_ERROR;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1737 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1738
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1739 b = tl->buf;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1740
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1741 b->tag = (ngx_buf_tag_t) &ngx_http_proxy_body_output_filter;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1742 b->temporary = 0;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1743 b->memory = 1;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1744 b->last_buf = 1;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1745 b->pos = (u_char *) CRLF "0" CRLF CRLF;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1746 b->last = b->pos + 7;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1747
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1748 cl->buf->last_buf = 0;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1749
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1750 *ll = tl;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1751
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1752 if (size == 0) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1753 b->pos += 2;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1754 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1755
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1756 } else if (size > 0) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1757 tl = ngx_chain_get_free_buf(r->pool, &ctx->free);
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1758 if (tl == NULL) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1759 return NGX_ERROR;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1760 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1761
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1762 b = tl->buf;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1763
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1764 b->tag = (ngx_buf_tag_t) &ngx_http_proxy_body_output_filter;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1765 b->temporary = 0;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1766 b->memory = 1;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1767 b->pos = (u_char *) CRLF;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1768 b->last = b->pos + 2;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1769
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1770 *ll = tl;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1771
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1772 } else {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1773 *ll = NULL;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1774 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1775
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1776 out:
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1777
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1778 rc = ngx_chain_writer(&r->upstream->writer, out);
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1779
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1780 ngx_chain_update_chains(r->pool, &ctx->free, &ctx->busy, &out,
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1781 (ngx_buf_tag_t) &ngx_http_proxy_body_output_filter);
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1782
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1783 return rc;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1784 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1785
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1786
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1787 static ngx_int_t
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1788 ngx_http_proxy_process_status_line(ngx_http_request_t *r)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1789 {
3628
cf47471a9eda make code more obviuos
Igor Sysoev <igor@sysoev.ru>
parents: 3627
diff changeset
1790 size_t len;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1791 ngx_int_t rc;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1792 ngx_http_upstream_t *u;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1793 ngx_http_proxy_ctx_t *ctx;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1794
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1795 ctx = ngx_http_get_module_ctx(r, ngx_http_proxy_module);
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1796
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1797 if (ctx == NULL) {
1699
976db8c6fb64 return NGX_ERROR instead of NGX_HTTP_INTERNAL_SERVER_ERROR in u->parse_header()
Igor Sysoev <igor@sysoev.ru>
parents: 1688
diff changeset
1798 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1799 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1800
3627
9061fdb2ed8c use ngx_http_parse_status_line()
Igor Sysoev <igor@sysoev.ru>
parents: 3615
diff changeset
1801 u = r->upstream;
9061fdb2ed8c use ngx_http_parse_status_line()
Igor Sysoev <igor@sysoev.ru>
parents: 3615
diff changeset
1802
9061fdb2ed8c use ngx_http_parse_status_line()
Igor Sysoev <igor@sysoev.ru>
parents: 3615
diff changeset
1803 rc = ngx_http_parse_status_line(r, &u->buffer, &ctx->status);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1804
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1805 if (rc == NGX_AGAIN) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1806 return rc;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1807 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1808
3627
9061fdb2ed8c use ngx_http_parse_status_line()
Igor Sysoev <igor@sysoev.ru>
parents: 3615
diff changeset
1809 if (rc == NGX_ERROR) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1810
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1811 #if (NGX_HTTP_CACHE)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1812
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1813 if (r->cache) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1814 r->http_version = NGX_HTTP_VERSION_9;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1815 return NGX_OK;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1816 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1817
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1818 #endif
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1819
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1820 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1821 "upstream sent no valid HTTP/1.0 header");
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1822
619
7a16e281c01f nginx-0.3.31-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1823 #if 0
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1824 if (u->accel) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1825 return NGX_HTTP_UPSTREAM_INVALID_HEADER;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1826 }
619
7a16e281c01f nginx-0.3.31-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1827 #endif
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1828
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1829 r->http_version = NGX_HTTP_VERSION_9;
1616
0a293900d21b set status in correct place
Igor Sysoev <igor@sysoev.ru>
parents: 1565
diff changeset
1830 u->state->status = NGX_HTTP_OK;
4125
e5df04b05e75 Protocol version parsing in ngx_http_parse_status_line().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4009
diff changeset
1831 u->headers_in.connection_close = 1;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1832
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1833 return NGX_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1834 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1835
5575
d15822784cf9 Upstream: fix $upstream_status variable.
Piotr Sikora <piotr@cloudflare.com>
parents: 5466
diff changeset
1836 if (u->state && u->state->status == 0) {
3627
9061fdb2ed8c use ngx_http_parse_status_line()
Igor Sysoev <igor@sysoev.ru>
parents: 3615
diff changeset
1837 u->state->status = ctx->status.code;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1838 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1839
3627
9061fdb2ed8c use ngx_http_parse_status_line()
Igor Sysoev <igor@sysoev.ru>
parents: 3615
diff changeset
1840 u->headers_in.status_n = ctx->status.code;
9061fdb2ed8c use ngx_http_parse_status_line()
Igor Sysoev <igor@sysoev.ru>
parents: 3615
diff changeset
1841
3628
cf47471a9eda make code more obviuos
Igor Sysoev <igor@sysoev.ru>
parents: 3627
diff changeset
1842 len = ctx->status.end - ctx->status.start;
cf47471a9eda make code more obviuos
Igor Sysoev <igor@sysoev.ru>
parents: 3627
diff changeset
1843 u->headers_in.status_line.len = len;
cf47471a9eda make code more obviuos
Igor Sysoev <igor@sysoev.ru>
parents: 3627
diff changeset
1844
cf47471a9eda make code more obviuos
Igor Sysoev <igor@sysoev.ru>
parents: 3627
diff changeset
1845 u->headers_in.status_line.data = ngx_pnalloc(r->pool, len);
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
1846 if (u->headers_in.status_line.data == NULL) {
1699
976db8c6fb64 return NGX_ERROR instead of NGX_HTTP_INTERNAL_SERVER_ERROR in u->parse_header()
Igor Sysoev <igor@sysoev.ru>
parents: 1688
diff changeset
1847 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1848 }
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1849
3628
cf47471a9eda make code more obviuos
Igor Sysoev <igor@sysoev.ru>
parents: 3627
diff changeset
1850 ngx_memcpy(u->headers_in.status_line.data, ctx->status.start, len);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1851
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1852 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1853 "http proxy status %ui \"%V\"",
936
2864303e0ce5 fix debug log
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
1854 u->headers_in.status_n, &u->headers_in.status_line);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1855
4125
e5df04b05e75 Protocol version parsing in ngx_http_parse_status_line().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4009
diff changeset
1856 if (ctx->status.http_version < NGX_HTTP_VERSION_11) {
e5df04b05e75 Protocol version parsing in ngx_http_parse_status_line().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4009
diff changeset
1857 u->headers_in.connection_close = 1;
e5df04b05e75 Protocol version parsing in ngx_http_parse_status_line().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4009
diff changeset
1858 }
e5df04b05e75 Protocol version parsing in ngx_http_parse_status_line().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4009
diff changeset
1859
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1860 u->process_header = ngx_http_proxy_process_header;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1861
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1862 return ngx_http_proxy_process_header(r);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1863 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1864
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1865
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1866 static ngx_int_t
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1867 ngx_http_proxy_process_header(ngx_http_request_t *r)
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1868 {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1869 ngx_int_t rc;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1870 ngx_table_elt_t *h;
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1871 ngx_http_upstream_t *u;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1872 ngx_http_proxy_ctx_t *ctx;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1873 ngx_http_upstream_header_t *hh;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1874 ngx_http_upstream_main_conf_t *umcf;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1875
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1876 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
1877
2024
7018254cc006 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1925
diff changeset
1878 for ( ;; ) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1879
2256
8c17cfe63d2c underscores_in_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
1880 rc = ngx_http_parse_header_line(r, &r->upstream->buffer, 1);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1881
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1882 if (rc == NGX_OK) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1883
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1884 /* a header line has been parsed successfully */
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1885
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1886 h = ngx_list_push(&r->upstream->headers_in.headers);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1887 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: 1688
diff changeset
1888 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1889 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1890
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1891 h->hash = r->header_hash;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1892
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1893 h->key.len = r->header_name_end - r->header_name_start;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1894 h->value.len = r->header_end - r->header_start;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1895
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2030
diff changeset
1896 h->key.data = ngx_pnalloc(r->pool,
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1897 h->key.len + 1 + h->value.len + 1 + h->key.len);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1898 if (h->key.data == NULL) {
7001
08537eab4f23 Upstream: fixed u->headers_in.headers allocation error handling.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6981
diff changeset
1899 h->hash = 0;
1699
976db8c6fb64 return NGX_ERROR instead of NGX_HTTP_INTERNAL_SERVER_ERROR in u->parse_header()
Igor Sysoev <igor@sysoev.ru>
parents: 1688
diff changeset
1900 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1901 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1902
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1903 h->value.data = h->key.data + h->key.len + 1;
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1904 h->lowcase_key = h->key.data + h->key.len + 1 + h->value.len + 1;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1905
4529
1ebec1d15a25 Fixed incorrect ngx_cpystrn() usage in ngx_http_*_process_header().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4499
diff changeset
1906 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: 4499
diff changeset
1907 h->key.data[h->key.len] = '\0';
1ebec1d15a25 Fixed incorrect ngx_cpystrn() usage in ngx_http_*_process_header().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4499
diff changeset
1908 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: 4499
diff changeset
1909 h->value.data[h->value.len] = '\0';
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1910
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1911 if (h->key.len == r->lowcase_index) {
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1912 ngx_memcpy(h->lowcase_key, r->lowcase_header, h->key.len);
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1913
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1914 } else {
2135
8c6521eedf84 ngx_strlow()
Igor Sysoev <igor@sysoev.ru>
parents: 2067
diff changeset
1915 ngx_strlow(h->lowcase_key, h->key.data, h->key.len);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1916 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1917
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1918 hh = ngx_hash_find(&umcf->headers_in_hash, h->hash,
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1919 h->lowcase_key, h->key.len);
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1920
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1921 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: 1688
diff changeset
1922 return NGX_ERROR;
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1923 }
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1924
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1925 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1926 "http proxy header: \"%V: %V\"",
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1927 &h->key, &h->value);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1928
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1929 continue;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1930 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1931
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1932 if (rc == NGX_HTTP_PARSE_HEADER_DONE) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1933
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1934 /* a whole header has been parsed successfully */
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1935
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1936 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1937 "http proxy header done");
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1938
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1939 /*
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1940 * if no "Server" and "Date" in header line,
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1941 * then add the special empty headers
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1942 */
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1943
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1944 if (r->upstream->headers_in.server == NULL) {
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1945 h = ngx_list_push(&r->upstream->headers_in.headers);
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1946 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: 1688
diff changeset
1947 return NGX_ERROR;
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1948 }
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1949
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1950 h->hash = ngx_hash(ngx_hash(ngx_hash(ngx_hash(
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1951 ngx_hash('s', 'e'), 'r'), 'v'), 'e'), 'r');
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1952
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3477
diff changeset
1953 ngx_str_set(&h->key, "Server");
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3477
diff changeset
1954 ngx_str_null(&h->value);
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1955 h->lowcase_key = (u_char *) "server";
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1956 }
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1957
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1958 if (r->upstream->headers_in.date == NULL) {
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1959 h = ngx_list_push(&r->upstream->headers_in.headers);
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1960 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: 1688
diff changeset
1961 return NGX_ERROR;
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1962 }
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1963
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1964 h->hash = ngx_hash(ngx_hash(ngx_hash('d', 'a'), 't'), 'e');
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1965
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3477
diff changeset
1966 ngx_str_set(&h->key, "Date");
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3477
diff changeset
1967 ngx_str_null(&h->value);
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1968 h->lowcase_key = (u_char *) "date";
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1969 }
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1970
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1971 /* clear content length if response is chunked */
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1972
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1973 u = r->upstream;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1974
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1975 if (u->headers_in.chunked) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1976 u->headers_in.content_length_n = -1;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1977 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1978
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1979 /*
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1980 * set u->keepalive if response has no body; this allows to keep
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1981 * connections alive in case of r->header_only or X-Accel-Redirect
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1982 */
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1983
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1984 ctx = ngx_http_get_module_ctx(r, ngx_http_proxy_module);
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1985
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1986 if (u->headers_in.status_n == NGX_HTTP_NO_CONTENT
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1987 || u->headers_in.status_n == NGX_HTTP_NOT_MODIFIED
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1988 || ctx->head
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1989 || (!u->headers_in.chunked
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1990 && u->headers_in.content_length_n == 0))
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1991 {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1992 u->keepalive = !u->headers_in.connection_close;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1993 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1994
5072
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5012
diff changeset
1995 if (u->headers_in.status_n == NGX_HTTP_SWITCHING_PROTOCOLS) {
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5012
diff changeset
1996 u->keepalive = 0;
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5012
diff changeset
1997
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5012
diff changeset
1998 if (r->headers_in.upgrade) {
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5012
diff changeset
1999 u->upgrade = 1;
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5012
diff changeset
2000 }
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5012
diff changeset
2001 }
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5012
diff changeset
2002
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2003 return NGX_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2004 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2005
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 519
diff changeset
2006 if (rc == NGX_AGAIN) {
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 519
diff changeset
2007 return NGX_AGAIN;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 519
diff changeset
2008 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 519
diff changeset
2009
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2010 /* there was error while a header line parsing */
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2011
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2012 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
619
7a16e281c01f nginx-0.3.31-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2013 "upstream sent invalid header");
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2014
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2015 return NGX_HTTP_UPSTREAM_INVALID_HEADER;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2016 }
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2017 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2018
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2019
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2020 static ngx_int_t
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2021 ngx_http_proxy_input_filter_init(void *data)
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2022 {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2023 ngx_http_request_t *r = data;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2024 ngx_http_upstream_t *u;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2025 ngx_http_proxy_ctx_t *ctx;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2026
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2027 u = r->upstream;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2028 ctx = ngx_http_get_module_ctx(r, ngx_http_proxy_module);
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2029
4602
8036fc6af2df Proxy: added ctx checking to input filters.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
2030 if (ctx == NULL) {
8036fc6af2df Proxy: added ctx checking to input filters.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
2031 return NGX_ERROR;
8036fc6af2df Proxy: added ctx checking to input filters.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
2032 }
8036fc6af2df Proxy: added ctx checking to input filters.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
2033
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2034 ngx_log_debug4(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
6480
f01ab2dbcfdc Fixed logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6467
diff changeset
2035 "http proxy filter init s:%ui h:%d c:%d l:%O",
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2036 u->headers_in.status_n, ctx->head, u->headers_in.chunked,
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2037 u->headers_in.content_length_n);
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2038
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2039 /* as per RFC2616, 4.4 Message Length */
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2040
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2041 if (u->headers_in.status_n == NGX_HTTP_NO_CONTENT
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2042 || u->headers_in.status_n == NGX_HTTP_NOT_MODIFIED
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2043 || ctx->head)
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2044 {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2045 /* 1xx, 204, and 304 and replies to HEAD requests */
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2046 /* no 1xx since we don't send Expect and Upgrade */
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2047
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2048 u->pipe->length = 0;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2049 u->length = 0;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2050 u->keepalive = !u->headers_in.connection_close;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2051
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2052 } else if (u->headers_in.chunked) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2053 /* chunked */
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2054
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2055 u->pipe->input_filter = ngx_http_proxy_chunked_filter;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2056 u->pipe->length = 3; /* "0" LF LF */
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2057
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2058 u->input_filter = ngx_http_proxy_non_buffered_chunked_filter;
5301
a50e26148d21 Upstream: added check if a response is complete.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5231
diff changeset
2059 u->length = 1;
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2060
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2061 } else if (u->headers_in.content_length_n == 0) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2062 /* empty body: special case as filter won't be called */
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2063
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2064 u->pipe->length = 0;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2065 u->length = 0;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2066 u->keepalive = !u->headers_in.connection_close;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2067
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2068 } else {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2069 /* content length or connection close */
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2070
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2071 u->pipe->length = u->headers_in.content_length_n;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2072 u->length = u->headers_in.content_length_n;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2073 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2074
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2075 return NGX_OK;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2076 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2077
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2078
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2079 static ngx_int_t
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2080 ngx_http_proxy_copy_filter(ngx_event_pipe_t *p, ngx_buf_t *buf)
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2081 {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2082 ngx_buf_t *b;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2083 ngx_chain_t *cl;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2084 ngx_http_request_t *r;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2085
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2086 if (buf->pos == buf->last) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2087 return NGX_OK;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2088 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2089
7675
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2090 if (p->upstream_done) {
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2091 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, p->log, 0,
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2092 "http proxy data after close");
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2093 return NGX_OK;
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2094 }
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2095
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2096 if (p->length == 0) {
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2097
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2098 ngx_log_error(NGX_LOG_WARN, p->log, 0,
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2099 "upstream sent more data than specified in "
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2100 "\"Content-Length\" header");
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2101
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2102 r = p->input_ctx;
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2103 r->upstream->keepalive = 0;
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2104 p->upstream_done = 1;
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2105
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2106 return NGX_OK;
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2107 }
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2108
5466
e7b3b9855be8 Use ngx_chain_get_free_buf() in pipe input filters.
Valentin Bartenev <vbart@nginx.com>
parents: 5441
diff changeset
2109 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: 5441
diff changeset
2110 if (cl == NULL) {
e7b3b9855be8 Use ngx_chain_get_free_buf() in pipe input filters.
Valentin Bartenev <vbart@nginx.com>
parents: 5441
diff changeset
2111 return NGX_ERROR;
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2112 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2113
5466
e7b3b9855be8 Use ngx_chain_get_free_buf() in pipe input filters.
Valentin Bartenev <vbart@nginx.com>
parents: 5441
diff changeset
2114 b = cl->buf;
e7b3b9855be8 Use ngx_chain_get_free_buf() in pipe input filters.
Valentin Bartenev <vbart@nginx.com>
parents: 5441
diff changeset
2115
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2116 ngx_memcpy(b, buf, sizeof(ngx_buf_t));
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2117 b->shadow = buf;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2118 b->tag = p->tag;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2119 b->last_shadow = 1;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2120 b->recycled = 1;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2121 buf->shadow = b;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2122
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2123 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, p->log, 0, "input buf #%d", b->num);
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2124
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2125 if (p->in) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2126 *p->last_in = cl;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2127 } else {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2128 p->in = cl;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2129 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2130 p->last_in = &cl->next;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2131
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2132 if (p->length == -1) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2133 return NGX_OK;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2134 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2135
7675
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2136 if (b->last - b->pos > p->length) {
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2137
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2138 ngx_log_error(NGX_LOG_WARN, p->log, 0,
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2139 "upstream sent more data than specified in "
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2140 "\"Content-Length\" header");
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2141
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2142 b->last = b->pos + p->length;
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2143 p->upstream_done = 1;
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2144
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2145 return NGX_OK;
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2146 }
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2147
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2148 p->length -= b->last - b->pos;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2149
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2150 if (p->length == 0) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2151 r = p->input_ctx;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2152 r->upstream->keepalive = !r->upstream->headers_in.connection_close;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2153 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2154
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2155 return NGX_OK;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2156 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2157
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2158
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2159 static ngx_int_t
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2160 ngx_http_proxy_chunked_filter(ngx_event_pipe_t *p, ngx_buf_t *buf)
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2161 {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2162 ngx_int_t rc;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2163 ngx_buf_t *b, **prev;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2164 ngx_chain_t *cl;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2165 ngx_http_request_t *r;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2166 ngx_http_proxy_ctx_t *ctx;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2167
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2168 if (buf->pos == buf->last) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2169 return NGX_OK;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2170 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2171
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2172 r = p->input_ctx;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2173 ctx = ngx_http_get_module_ctx(r, ngx_http_proxy_module);
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2174
4602
8036fc6af2df Proxy: added ctx checking to input filters.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
2175 if (ctx == NULL) {
8036fc6af2df Proxy: added ctx checking to input filters.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
2176 return NGX_ERROR;
8036fc6af2df Proxy: added ctx checking to input filters.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
2177 }
8036fc6af2df Proxy: added ctx checking to input filters.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
2178
7676
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2179 if (p->upstream_done) {
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2180 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, p->log, 0,
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2181 "http proxy data after close");
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2182 return NGX_OK;
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2183 }
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2184
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2185 if (p->length == 0) {
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2186
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2187 ngx_log_error(NGX_LOG_WARN, p->log, 0,
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2188 "upstream sent data after final chunk");
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2189
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2190 r->upstream->keepalive = 0;
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2191 p->upstream_done = 1;
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2192
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2193 return NGX_OK;
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2194 }
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2195
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2196 b = NULL;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2197 prev = &buf->shadow;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2198
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2199 for ( ;; ) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2200
4925
32030fa8cb14 Request body: chunked parsing moved to ngx_http_parse.c from proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4602
diff changeset
2201 rc = ngx_http_parse_chunked(r, buf, &ctx->chunked);
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2202
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2203 if (rc == NGX_OK) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2204
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2205 /* a chunk has been parsed successfully */
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2206
5466
e7b3b9855be8 Use ngx_chain_get_free_buf() in pipe input filters.
Valentin Bartenev <vbart@nginx.com>
parents: 5441
diff changeset
2207 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: 5441
diff changeset
2208 if (cl == NULL) {
e7b3b9855be8 Use ngx_chain_get_free_buf() in pipe input filters.
Valentin Bartenev <vbart@nginx.com>
parents: 5441
diff changeset
2209 return NGX_ERROR;
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2210 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2211
5466
e7b3b9855be8 Use ngx_chain_get_free_buf() in pipe input filters.
Valentin Bartenev <vbart@nginx.com>
parents: 5441
diff changeset
2212 b = cl->buf;
e7b3b9855be8 Use ngx_chain_get_free_buf() in pipe input filters.
Valentin Bartenev <vbart@nginx.com>
parents: 5441
diff changeset
2213
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2214 ngx_memzero(b, sizeof(ngx_buf_t));
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2215
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2216 b->pos = buf->pos;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2217 b->start = buf->start;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2218 b->end = buf->end;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2219 b->tag = p->tag;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2220 b->temporary = 1;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2221 b->recycled = 1;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2222
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2223 *prev = b;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2224 prev = &b->shadow;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2225
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2226 if (p->in) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2227 *p->last_in = cl;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2228 } else {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2229 p->in = cl;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2230 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2231 p->last_in = &cl->next;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2232
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2233 /* STUB */ b->num = buf->num;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2234
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2235 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, p->log, 0,
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2236 "input buf #%d %p", b->num, b->pos);
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2237
4925
32030fa8cb14 Request body: chunked parsing moved to ngx_http_parse.c from proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4602
diff changeset
2238 if (buf->last - buf->pos >= ctx->chunked.size) {
32030fa8cb14 Request body: chunked parsing moved to ngx_http_parse.c from proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4602
diff changeset
2239
5359
2fda9065d0f4 Win32: Borland C compatibility fixes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5301
diff changeset
2240 buf->pos += (size_t) ctx->chunked.size;
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2241 b->last = buf->pos;
4925
32030fa8cb14 Request body: chunked parsing moved to ngx_http_parse.c from proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4602
diff changeset
2242 ctx->chunked.size = 0;
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2243
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2244 continue;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2245 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2246
4925
32030fa8cb14 Request body: chunked parsing moved to ngx_http_parse.c from proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4602
diff changeset
2247 ctx->chunked.size -= buf->last - buf->pos;
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2248 buf->pos = buf->last;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2249 b->last = buf->last;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2250
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2251 continue;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2252 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2253
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2254 if (rc == NGX_DONE) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2255
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2256 /* a whole response has been parsed successfully */
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2257
7676
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2258 p->length = 0;
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2259 r->upstream->keepalive = !r->upstream->headers_in.connection_close;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2260
7676
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2261 if (buf->pos != buf->last) {
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2262 ngx_log_error(NGX_LOG_WARN, p->log, 0,
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2263 "upstream sent data after final chunk");
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2264 r->upstream->keepalive = 0;
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2265 }
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2266
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2267 break;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2268 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2269
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2270 if (rc == NGX_AGAIN) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2271
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2272 /* set p->length, minimal amount of data we want to see */
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2273
4925
32030fa8cb14 Request body: chunked parsing moved to ngx_http_parse.c from proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4602
diff changeset
2274 p->length = ctx->chunked.length;
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2275
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2276 break;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2277 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2278
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2279 /* invalid response */
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2280
7677
a786e491d08d Proxy: style.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7676
diff changeset
2281 ngx_log_error(NGX_LOG_ERR, p->log, 0,
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2282 "upstream sent invalid chunked response");
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2283
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2284 return NGX_ERROR;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2285 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2286
7677
a786e491d08d Proxy: style.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7676
diff changeset
2287 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, p->log, 0,
6480
f01ab2dbcfdc Fixed logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6467
diff changeset
2288 "http proxy chunked state %ui, length %O",
4925
32030fa8cb14 Request body: chunked parsing moved to ngx_http_parse.c from proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4602
diff changeset
2289 ctx->chunked.state, p->length);
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2290
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2291 if (b) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2292 b->shadow = buf;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2293 b->last_shadow = 1;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2294
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2295 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, p->log, 0,
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2296 "input buf %p %z", b->pos, b->last - b->pos);
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2297
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2298 return NGX_OK;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2299 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2300
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2301 /* there is no data record in the buf, add it to free chain */
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2302
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2303 if (ngx_event_pipe_add_free_buf(p, buf) != NGX_OK) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2304 return NGX_ERROR;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2305 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2306
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2307 return NGX_OK;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2308 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2309
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2310
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2311 static ngx_int_t
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2312 ngx_http_proxy_non_buffered_copy_filter(void *data, ssize_t bytes)
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2313 {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2314 ngx_http_request_t *r = data;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2315
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2316 ngx_buf_t *b;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2317 ngx_chain_t *cl, **ll;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2318 ngx_http_upstream_t *u;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2319
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2320 u = r->upstream;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2321
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2322 for (cl = u->out_bufs, ll = &u->out_bufs; cl; cl = cl->next) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2323 ll = &cl->next;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2324 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2325
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2326 cl = ngx_chain_get_free_buf(r->pool, &u->free_bufs);
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2327 if (cl == NULL) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2328 return NGX_ERROR;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2329 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2330
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2331 *ll = cl;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2332
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2333 cl->buf->flush = 1;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2334 cl->buf->memory = 1;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2335
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2336 b = &u->buffer;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2337
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2338 cl->buf->pos = b->last;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2339 b->last += bytes;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2340 cl->buf->last = b->last;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2341 cl->buf->tag = u->output.tag;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2342
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2343 if (u->length == -1) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2344 return NGX_OK;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2345 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2346
7675
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2347 if (bytes > u->length) {
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2348
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2349 ngx_log_error(NGX_LOG_WARN, r->connection->log, 0,
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2350 "upstream sent more data than specified in "
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2351 "\"Content-Length\" header");
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2352
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2353 cl->buf->last = cl->buf->pos + u->length;
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2354 u->length = 0;
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2355
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2356 return NGX_OK;
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2357 }
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2358
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2359 u->length -= bytes;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2360
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2361 if (u->length == 0) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2362 u->keepalive = !u->headers_in.connection_close;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2363 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2364
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2365 return NGX_OK;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2366 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2367
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2368
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2369 static ngx_int_t
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2370 ngx_http_proxy_non_buffered_chunked_filter(void *data, ssize_t bytes)
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2371 {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2372 ngx_http_request_t *r = data;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2373
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2374 ngx_int_t rc;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2375 ngx_buf_t *b, *buf;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2376 ngx_chain_t *cl, **ll;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2377 ngx_http_upstream_t *u;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2378 ngx_http_proxy_ctx_t *ctx;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2379
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2380 ctx = ngx_http_get_module_ctx(r, ngx_http_proxy_module);
4602
8036fc6af2df Proxy: added ctx checking to input filters.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
2381
8036fc6af2df Proxy: added ctx checking to input filters.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
2382 if (ctx == NULL) {
8036fc6af2df Proxy: added ctx checking to input filters.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
2383 return NGX_ERROR;
8036fc6af2df Proxy: added ctx checking to input filters.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
2384 }
8036fc6af2df Proxy: added ctx checking to input filters.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
2385
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2386 u = r->upstream;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2387 buf = &u->buffer;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2388
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2389 buf->pos = buf->last;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2390 buf->last += bytes;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2391
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2392 for (cl = u->out_bufs, ll = &u->out_bufs; cl; cl = cl->next) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2393 ll = &cl->next;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2394 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2395
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2396 for ( ;; ) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2397
4925
32030fa8cb14 Request body: chunked parsing moved to ngx_http_parse.c from proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4602
diff changeset
2398 rc = ngx_http_parse_chunked(r, buf, &ctx->chunked);
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2399
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2400 if (rc == NGX_OK) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2401
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2402 /* a chunk has been parsed successfully */
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2403
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2404 cl = ngx_chain_get_free_buf(r->pool, &u->free_bufs);
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2405 if (cl == NULL) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2406 return NGX_ERROR;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2407 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2408
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2409 *ll = cl;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2410 ll = &cl->next;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2411
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2412 b = cl->buf;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2413
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2414 b->flush = 1;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2415 b->memory = 1;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2416
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2417 b->pos = buf->pos;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2418 b->tag = u->output.tag;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2419
4925
32030fa8cb14 Request body: chunked parsing moved to ngx_http_parse.c from proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4602
diff changeset
2420 if (buf->last - buf->pos >= ctx->chunked.size) {
5359
2fda9065d0f4 Win32: Borland C compatibility fixes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5301
diff changeset
2421 buf->pos += (size_t) ctx->chunked.size;
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2422 b->last = buf->pos;
4925
32030fa8cb14 Request body: chunked parsing moved to ngx_http_parse.c from proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4602
diff changeset
2423 ctx->chunked.size = 0;
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2424
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2425 } else {
4925
32030fa8cb14 Request body: chunked parsing moved to ngx_http_parse.c from proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4602
diff changeset
2426 ctx->chunked.size -= buf->last - buf->pos;
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2427 buf->pos = buf->last;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2428 b->last = buf->last;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2429 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2430
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2431 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2432 "http proxy out buf %p %z",
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2433 b->pos, b->last - b->pos);
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2434
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2435 continue;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2436 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2437
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2438 if (rc == NGX_DONE) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2439
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2440 /* a whole response has been parsed successfully */
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2441
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2442 u->keepalive = !u->headers_in.connection_close;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2443 u->length = 0;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2444
7676
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2445 if (buf->pos != buf->last) {
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2446 ngx_log_error(NGX_LOG_WARN, r->connection->log, 0,
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2447 "upstream sent data after final chunk");
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2448 u->keepalive = 0;
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2449 }
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2450
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2451 break;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2452 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2453
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2454 if (rc == NGX_AGAIN) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2455 break;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2456 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2457
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2458 /* invalid response */
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2459
4145
f321e9750c8c Proxy: logging levels tuned, double logging fixed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4144
diff changeset
2460 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2461 "upstream sent invalid chunked response");
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2462
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2463 return NGX_ERROR;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2464 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2465
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2466 return NGX_OK;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2467 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2468
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2469
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2470 static void
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2471 ngx_http_proxy_abort_request(ngx_http_request_t *r)
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2472 {
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2473 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2474 "abort http proxy request");
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2475
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2476 return;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2477 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2478
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2479
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2480 static void
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2481 ngx_http_proxy_finalize_request(ngx_http_request_t *r, ngx_int_t rc)
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2482 {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2483 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2484 "finalize http proxy request");
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2485
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2486 return;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2487 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2488
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2489
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2490 static ngx_int_t
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2491 ngx_http_proxy_host_variable(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2492 ngx_http_variable_value_t *v, uintptr_t data)
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2493 {
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2494 ngx_http_proxy_ctx_t *ctx;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2495
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2496 ctx = ngx_http_get_module_ctx(r, ngx_http_proxy_module);
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2497
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2498 if (ctx == NULL) {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2499 v->not_found = 1;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2500 return NGX_OK;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2501 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2502
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2503 v->len = ctx->vars.host_header.len;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2504 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1563
diff changeset
2505 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2506 v->not_found = 0;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2507 v->data = ctx->vars.host_header.data;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2508
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2509 return NGX_OK;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2510 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2511
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2512
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2513 static ngx_int_t
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2514 ngx_http_proxy_port_variable(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2515 ngx_http_variable_value_t *v, uintptr_t data)
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2516 {
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2517 ngx_http_proxy_ctx_t *ctx;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2518
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2519 ctx = ngx_http_get_module_ctx(r, ngx_http_proxy_module);
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2520
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2521 if (ctx == NULL) {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2522 v->not_found = 1;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2523 return NGX_OK;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2524 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2525
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2526 v->len = ctx->vars.port.len;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2527 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1563
diff changeset
2528 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2529 v->not_found = 0;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2530 v->data = ctx->vars.port.data;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2531
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2532 return NGX_OK;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2533 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2534
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2535
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2536 static ngx_int_t
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2537 ngx_http_proxy_add_x_forwarded_for_variable(ngx_http_request_t *r,
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2538 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
2539 {
5084
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2540 size_t len;
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2541 u_char *p;
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2542 ngx_uint_t i, n;
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2543 ngx_table_elt_t **h;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2544
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2545 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1563
diff changeset
2546 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2547 v->not_found = 0;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2548
5084
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2549 n = r->headers_in.x_forwarded_for.nelts;
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2550 h = r->headers_in.x_forwarded_for.elts;
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2551
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2552 len = 0;
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2553
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2554 for (i = 0; i < n; i++) {
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2555 len += h[i]->value.len + sizeof(", ") - 1;
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2556 }
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2557
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2558 if (len == 0) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2559 v->len = r->connection->addr_text.len;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2560 v->data = r->connection->addr_text.data;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2561 return NGX_OK;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2562 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2563
5084
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2564 len += r->connection->addr_text.len;
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2565
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2566 p = ngx_pnalloc(r->pool, len);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2567 if (p == NULL) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2568 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2569 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2570
5084
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2571 v->len = len;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2572 v->data = p;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2573
5084
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2574 for (i = 0; i < n; i++) {
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2575 p = ngx_copy(p, h[i]->value.data, h[i]->value.len);
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2576 *p++ = ','; *p++ = ' ';
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2577 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2578
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2579 ngx_memcpy(p, r->connection->addr_text.data, r->connection->addr_text.len);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2580
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2581 return NGX_OK;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2582 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2583
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2584
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2585 static ngx_int_t
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2586 ngx_http_proxy_internal_body_length_variable(ngx_http_request_t *r,
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2587 ngx_http_variable_value_t *v, uintptr_t data)
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2588 {
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2589 ngx_http_proxy_ctx_t *ctx;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2590
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2591 ctx = ngx_http_get_module_ctx(r, ngx_http_proxy_module);
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2592
4927
93294110728f Request body: always use calculated size of a request body in proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4925
diff changeset
2593 if (ctx == NULL || ctx->internal_body_length < 0) {
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2594 v->not_found = 1;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2595 return NGX_OK;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2596 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2597
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2598 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1563
diff changeset
2599 v->no_cacheable = 0;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2600 v->not_found = 0;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2601
5188
886800caf360 Proxy: allocate $proxy_internal_body_length from request pool.
Ruslan Ermilov <ru@nginx.com>
parents: 5084
diff changeset
2602 v->data = ngx_pnalloc(r->pool, NGX_OFF_T_LEN);
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2603
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2604 if (v->data == NULL) {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2605 return NGX_ERROR;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2606 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2607
4927
93294110728f Request body: always use calculated size of a request body in proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4925
diff changeset
2608 v->len = ngx_sprintf(v->data, "%O", ctx->internal_body_length) - v->data;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2609
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2610 return NGX_OK;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2611 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2612
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2613
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2614 static ngx_int_t
6051
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2615 ngx_http_proxy_internal_chunked_variable(ngx_http_request_t *r,
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2616 ngx_http_variable_value_t *v, uintptr_t data)
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2617 {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2618 ngx_http_proxy_ctx_t *ctx;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2619
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2620 ctx = ngx_http_get_module_ctx(r, ngx_http_proxy_module);
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2621
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2622 if (ctx == NULL || !ctx->internal_chunked) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2623 v->not_found = 1;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2624 return NGX_OK;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2625 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2626
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2627 v->valid = 1;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2628 v->no_cacheable = 0;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2629 v->not_found = 0;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2630
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2631 v->data = (u_char *) "chunked";
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2632 v->len = sizeof("chunked") - 1;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2633
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2634 return NGX_OK;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2635 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2636
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2637
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2638 static ngx_int_t
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2639 ngx_http_proxy_rewrite_redirect(ngx_http_request_t *r, ngx_table_elt_t *h,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2640 size_t prefix)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2641 {
4462
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
2642 size_t len;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2643 ngx_int_t rc;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2644 ngx_uint_t i;
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
2645 ngx_http_proxy_rewrite_t *pr;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2646 ngx_http_proxy_loc_conf_t *plcf;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2647
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2648 plcf = ngx_http_get_module_loc_conf(r, ngx_http_proxy_module);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2649
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2650 pr = plcf->redirects->elts;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2651
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2652 if (pr == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2653 return NGX_DECLINED;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2654 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2655
4462
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
2656 len = h->value.len - prefix;
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
2657
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2658 for (i = 0; i < plcf->redirects->nelts; i++) {
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
2659 rc = pr[i].handler(r, &h->value, prefix, len, &pr[i]);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2660
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2661 if (rc != NGX_DECLINED) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2662 return rc;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2663 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2664 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2665
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2666 return NGX_DECLINED;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2667 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2668
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2669
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2670 static ngx_int_t
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2671 ngx_http_proxy_rewrite_cookie(ngx_http_request_t *r, ngx_table_elt_t *h)
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2672 {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2673 u_char *p;
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2674 size_t len;
4466
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2675 ngx_int_t rc, rv;
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2676 ngx_str_t *key, *value;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2677 ngx_uint_t i;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2678 ngx_array_t attrs;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2679 ngx_keyval_t *attr;
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2680 ngx_http_proxy_loc_conf_t *plcf;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2681
7720
a88384c69d1e Proxy: error checking for array init, missed in 7716:d6a5e14aa3e4.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7716
diff changeset
2682 if (ngx_array_init(&attrs, r->pool, 2, sizeof(ngx_keyval_t)) != NGX_OK) {
a88384c69d1e Proxy: error checking for array init, missed in 7716:d6a5e14aa3e4.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7716
diff changeset
2683 return NGX_ERROR;
a88384c69d1e Proxy: error checking for array init, missed in 7716:d6a5e14aa3e4.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7716
diff changeset
2684 }
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2685
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2686 if (ngx_http_proxy_parse_cookie(&h->value, &attrs) != NGX_OK) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2687 return NGX_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2688 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2689
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2690 attr = attrs.elts;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2691
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2692 if (attr[0].value.data == NULL) {
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2693 return NGX_DECLINED;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2694 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2695
4466
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2696 rv = NGX_DECLINED;
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2697
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2698 plcf = ngx_http_get_module_loc_conf(r, ngx_http_proxy_module);
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2699
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2700 for (i = 1; i < attrs.nelts; i++) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2701
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2702 key = &attr[i].key;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2703 value = &attr[i].value;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2704
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2705 if (plcf->cookie_domains && key->len == 6
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2706 && ngx_strncasecmp(key->data, (u_char *) "domain", 6) == 0
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2707 && value->data)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2708 {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2709 rc = ngx_http_proxy_rewrite_cookie_value(r, value,
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2710 plcf->cookie_domains);
4466
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2711 if (rc == NGX_ERROR) {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2712 return NGX_ERROR;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2713 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2714
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2715 if (rc != NGX_DECLINED) {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2716 rv = rc;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2717 }
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2718 }
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2719
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2720 if (plcf->cookie_paths && key->len == 4
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2721 && ngx_strncasecmp(key->data, (u_char *) "path", 4) == 0
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2722 && value->data)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2723 {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2724 rc = ngx_http_proxy_rewrite_cookie_value(r, value,
4466
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2725 plcf->cookie_paths);
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2726 if (rc == NGX_ERROR) {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2727 return NGX_ERROR;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2728 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2729
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2730 if (rc != NGX_DECLINED) {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2731 rv = rc;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2732 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2733 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2734 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2735
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2736 if (plcf->cookie_flags) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2737 rc = ngx_http_proxy_rewrite_cookie_flags(r, &attrs,
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2738 plcf->cookie_flags);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2739 if (rc == NGX_ERROR) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2740 return NGX_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2741 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2742
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2743 if (rc != NGX_DECLINED) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2744 rv = rc;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2745 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2746
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2747 attr = attrs.elts;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2748 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2749
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2750 if (rv != NGX_OK) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2751 return rv;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2752 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2753
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2754 len = 0;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2755
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2756 for (i = 0; i < attrs.nelts; i++) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2757
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2758 if (attr[i].key.data == NULL) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2759 continue;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2760 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2761
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2762 if (i > 0) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2763 len += 2;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2764 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2765
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2766 len += attr[i].key.len;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2767
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2768 if (attr[i].value.data) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2769 len += 1 + attr[i].value.len;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2770 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2771 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2772
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2773 p = ngx_pnalloc(r->pool, len + 1);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2774 if (p == NULL) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2775 return NGX_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2776 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2777
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2778 h->value.data = p;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2779 h->value.len = len;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2780
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2781 for (i = 0; i < attrs.nelts; i++) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2782
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2783 if (attr[i].key.data == NULL) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2784 continue;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2785 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2786
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2787 if (i > 0) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2788 *p++ = ';';
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2789 *p++ = ' ';
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2790 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2791
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2792 p = ngx_cpymem(p, attr[i].key.data, attr[i].key.len);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2793
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2794 if (attr[i].value.data) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2795 *p++ = '=';
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2796 p = ngx_cpymem(p, attr[i].value.data, attr[i].value.len);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2797 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2798 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2799
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2800 *p = '\0';
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2801
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2802 return NGX_OK;
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2803 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2804
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2805
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2806 static ngx_int_t
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2807 ngx_http_proxy_parse_cookie(ngx_str_t *value, ngx_array_t *attrs)
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2808 {
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2809 u_char *start, *end, *p, *last;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2810 ngx_str_t name, val;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2811 ngx_keyval_t *attr;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2812
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2813 start = value->data;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2814 end = value->data + value->len;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2815
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2816 for ( ;; ) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2817
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2818 last = (u_char *) ngx_strchr(start, ';');
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2819
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2820 if (last == NULL) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2821 last = end;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2822 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2823
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2824 while (start < last && *start == ' ') { start++; }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2825
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2826 for (p = start; p < last && *p != '='; p++) { /* void */ }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2827
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2828 name.data = start;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2829 name.len = p - start;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2830
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2831 while (name.len && name.data[name.len - 1] == ' ') {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2832 name.len--;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2833 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2834
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2835 if (p < last) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2836
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2837 p++;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2838
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2839 while (p < last && *p == ' ') { p++; }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2840
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2841 val.data = p;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2842 val.len = last - val.data;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2843
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2844 while (val.len && val.data[val.len - 1] == ' ') {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2845 val.len--;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2846 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2847
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2848 } else {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2849 ngx_str_null(&val);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2850 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2851
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2852 attr = ngx_array_push(attrs);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2853 if (attr == NULL) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2854 return NGX_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2855 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2856
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2857 attr->key = name;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2858 attr->value = val;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2859
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2860 if (last == end) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2861 break;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2862 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2863
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2864 start = last + 1;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2865 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2866
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2867 return NGX_OK;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2868 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2869
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2870
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2871 static ngx_int_t
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2872 ngx_http_proxy_rewrite_cookie_value(ngx_http_request_t *r, ngx_str_t *value,
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2873 ngx_array_t *rewrites)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2874 {
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2875 ngx_int_t rc;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2876 ngx_uint_t i;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2877 ngx_http_proxy_rewrite_t *pr;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2878
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2879 pr = rewrites->elts;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2880
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2881 for (i = 0; i < rewrites->nelts; i++) {
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2882 rc = pr[i].handler(r, value, 0, value->len, &pr[i]);
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2883
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2884 if (rc != NGX_DECLINED) {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2885 return rc;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2886 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2887 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2888
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2889 return NGX_DECLINED;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2890 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2891
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2892
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2893 static ngx_int_t
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2894 ngx_http_proxy_rewrite_cookie_flags(ngx_http_request_t *r, ngx_array_t *attrs,
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2895 ngx_array_t *flags)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2896 {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2897 ngx_str_t pattern;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2898 #if (NGX_PCRE)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2899 ngx_int_t rc;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2900 #endif
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2901 ngx_uint_t i;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2902 ngx_keyval_t *attr;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2903 ngx_http_proxy_cookie_flags_t *pcf;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2904
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2905 attr = attrs->elts;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2906 pcf = flags->elts;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2907
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2908 for (i = 0; i < flags->nelts; i++) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2909
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2910 #if (NGX_PCRE)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2911 if (pcf[i].regex) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2912 rc = ngx_http_regex_exec(r, pcf[i].cookie.regex, &attr[0].key);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2913
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2914 if (rc == NGX_ERROR) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2915 return NGX_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2916 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2917
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2918 if (rc == NGX_OK) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2919 break;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2920 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2921
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2922 /* NGX_DECLINED */
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2923
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2924 continue;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2925 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2926 #endif
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2927
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2928 if (ngx_http_complex_value(r, &pcf[i].cookie.complex, &pattern)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2929 != NGX_OK)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2930 {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2931 return NGX_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2932 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2933
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2934 if (pattern.len == attr[0].key.len
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2935 && ngx_strncasecmp(attr[0].key.data, pattern.data, pattern.len)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2936 == 0)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2937 {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2938 break;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2939 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2940 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2941
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2942 if (i == flags->nelts) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2943 return NGX_DECLINED;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2944 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2945
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2946 return ngx_http_proxy_edit_cookie_flags(r, attrs, pcf[i].flags);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2947 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2948
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2949
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2950 static ngx_int_t
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2951 ngx_http_proxy_edit_cookie_flags(ngx_http_request_t *r, ngx_array_t *attrs,
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2952 ngx_uint_t flags)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2953 {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2954 ngx_str_t *key, *value;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2955 ngx_uint_t i;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2956 ngx_keyval_t *attr;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2957
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2958 attr = attrs->elts;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2959
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2960 for (i = 1; i < attrs->nelts; i++) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2961 key = &attr[i].key;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2962
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2963 if (key->len == 6
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2964 && ngx_strncasecmp(key->data, (u_char *) "secure", 6) == 0)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2965 {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2966 if (flags & NGX_HTTP_PROXY_COOKIE_SECURE_ON) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2967 flags &= ~NGX_HTTP_PROXY_COOKIE_SECURE_ON;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2968
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2969 } else if (flags & NGX_HTTP_PROXY_COOKIE_SECURE_OFF) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2970 key->data = NULL;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2971 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2972
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2973 continue;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2974 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2975
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2976 if (key->len == 8
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2977 && ngx_strncasecmp(key->data, (u_char *) "httponly", 8) == 0)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2978 {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2979 if (flags & NGX_HTTP_PROXY_COOKIE_HTTPONLY_ON) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2980 flags &= ~NGX_HTTP_PROXY_COOKIE_HTTPONLY_ON;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2981
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2982 } else if (flags & NGX_HTTP_PROXY_COOKIE_HTTPONLY_OFF) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2983 key->data = NULL;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2984 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2985
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2986 continue;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2987 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2988
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2989 if (key->len == 8
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2990 && ngx_strncasecmp(key->data, (u_char *) "samesite", 8) == 0)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2991 {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2992 value = &attr[i].value;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2993
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2994 if (flags & NGX_HTTP_PROXY_COOKIE_SAMESITE_STRICT) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2995 flags &= ~NGX_HTTP_PROXY_COOKIE_SAMESITE_STRICT;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2996
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2997 if (value->len != 6
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2998 || ngx_strncasecmp(value->data, (u_char *) "strict", 6)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2999 != 0)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3000 {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3001 ngx_str_set(key, "SameSite");
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3002 ngx_str_set(value, "Strict");
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3003 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3004
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3005 } else if (flags & NGX_HTTP_PROXY_COOKIE_SAMESITE_LAX) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3006 flags &= ~NGX_HTTP_PROXY_COOKIE_SAMESITE_LAX;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3007
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3008 if (value->len != 3
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3009 || ngx_strncasecmp(value->data, (u_char *) "lax", 3) != 0)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3010 {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3011 ngx_str_set(key, "SameSite");
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3012 ngx_str_set(value, "Lax");
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3013 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3014
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3015 } else if (flags & NGX_HTTP_PROXY_COOKIE_SAMESITE_NONE) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3016 flags &= ~NGX_HTTP_PROXY_COOKIE_SAMESITE_NONE;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3017
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3018 if (value->len != 4
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3019 || ngx_strncasecmp(value->data, (u_char *) "none", 4) != 0)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3020 {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3021 ngx_str_set(key, "SameSite");
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3022 ngx_str_set(value, "None");
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3023 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3024
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3025 } else if (flags & NGX_HTTP_PROXY_COOKIE_SAMESITE_OFF) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3026 key->data = NULL;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3027 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3028
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3029 continue;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3030 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3031 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3032
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3033 if (flags & NGX_HTTP_PROXY_COOKIE_SECURE_ON) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3034 attr = ngx_array_push(attrs);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3035 if (attr == NULL) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3036 return NGX_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3037 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3038
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3039 ngx_str_set(&attr->key, "Secure");
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3040 ngx_str_null(&attr->value);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3041 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3042
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3043 if (flags & NGX_HTTP_PROXY_COOKIE_HTTPONLY_ON) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3044 attr = ngx_array_push(attrs);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3045 if (attr == NULL) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3046 return NGX_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3047 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3048
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3049 ngx_str_set(&attr->key, "HttpOnly");
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3050 ngx_str_null(&attr->value);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3051 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3052
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3053 if (flags & (NGX_HTTP_PROXY_COOKIE_SAMESITE_STRICT
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3054 |NGX_HTTP_PROXY_COOKIE_SAMESITE_LAX
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3055 |NGX_HTTP_PROXY_COOKIE_SAMESITE_NONE))
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3056 {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3057 attr = ngx_array_push(attrs);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3058 if (attr == NULL) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3059 return NGX_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3060 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3061
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3062 ngx_str_set(&attr->key, "SameSite");
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3063
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3064 if (flags & NGX_HTTP_PROXY_COOKIE_SAMESITE_STRICT) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3065 ngx_str_set(&attr->value, "Strict");
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3066
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3067 } else if (flags & NGX_HTTP_PROXY_COOKIE_SAMESITE_LAX) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3068 ngx_str_set(&attr->value, "Lax");
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3069
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3070 } else {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3071 ngx_str_set(&attr->value, "None");
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3072 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3073 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3074
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3075 return NGX_OK;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3076 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3077
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3078
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3079 static ngx_int_t
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3080 ngx_http_proxy_rewrite_complex_handler(ngx_http_request_t *r, ngx_str_t *value,
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3081 size_t prefix, size_t len, ngx_http_proxy_rewrite_t *pr)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3082 {
4462
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3083 ngx_str_t pattern, replacement;
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
3084
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
3085 if (ngx_http_complex_value(r, &pr->pattern.complex, &pattern) != NGX_OK) {
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
3086 return NGX_ERROR;
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
3087 }
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
3088
4462
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3089 if (pattern.len > len
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3090 || ngx_rstrncmp(value->data + prefix, pattern.data, pattern.len) != 0)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3091 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3092 return NGX_DECLINED;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3093 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3094
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
3095 if (ngx_http_complex_value(r, &pr->replacement, &replacement) != NGX_OK) {
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
3096 return NGX_ERROR;
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
3097 }
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
3098
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3099 return ngx_http_proxy_rewrite(r, value, prefix, pattern.len, &replacement);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3100 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3101
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3102
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
3103 #if (NGX_PCRE)
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
3104
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3105 static ngx_int_t
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3106 ngx_http_proxy_rewrite_regex_handler(ngx_http_request_t *r, ngx_str_t *value,
4462
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3107 size_t prefix, size_t len, ngx_http_proxy_rewrite_t *pr)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3108 {
4462
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3109 ngx_str_t pattern, replacement;
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3110
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3111 pattern.len = len;
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3112 pattern.data = value->data + prefix;
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
3113
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
3114 if (ngx_http_regex_exec(r, pr->pattern.regex, &pattern) != NGX_OK) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3115 return NGX_DECLINED;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3116 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3117
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
3118 if (ngx_http_complex_value(r, &pr->replacement, &replacement) != NGX_OK) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3119 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3120 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3121
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3122 return ngx_http_proxy_rewrite(r, value, prefix, len, &replacement);
4462
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3123 }
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3124
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3125 #endif
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3126
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3127
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3128 static ngx_int_t
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3129 ngx_http_proxy_rewrite_domain_handler(ngx_http_request_t *r, ngx_str_t *value,
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3130 size_t prefix, size_t len, ngx_http_proxy_rewrite_t *pr)
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3131 {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3132 u_char *p;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3133 ngx_str_t pattern, replacement;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3134
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3135 if (ngx_http_complex_value(r, &pr->pattern.complex, &pattern) != NGX_OK) {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3136 return NGX_ERROR;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3137 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3138
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3139 p = value->data + prefix;
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3140
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3141 if (len && p[0] == '.') {
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3142 p++;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3143 prefix++;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3144 len--;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3145 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3146
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3147 if (pattern.len != len || ngx_rstrncasecmp(pattern.data, p, len) != 0) {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3148 return NGX_DECLINED;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3149 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3150
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3151 if (ngx_http_complex_value(r, &pr->replacement, &replacement) != NGX_OK) {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3152 return NGX_ERROR;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3153 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3154
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3155 return ngx_http_proxy_rewrite(r, value, prefix, len, &replacement);
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3156 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3157
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3158
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3159 static ngx_int_t
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3160 ngx_http_proxy_rewrite(ngx_http_request_t *r, ngx_str_t *value, size_t prefix,
4462
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3161 size_t len, ngx_str_t *replacement)
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3162 {
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3163 u_char *p, *data;
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3164 size_t new_len;
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3165
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3166 if (len == value->len) {
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3167 *value = *replacement;
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3168 return NGX_OK;
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3169 }
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3170
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3171 new_len = replacement->len + value->len - len;
4462
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3172
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3173 if (replacement->len > len) {
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3174
5676
fbfdf8017748 Proxy: fixed possible uninitialized memory access.
Valentin Bartenev <vbart@nginx.com>
parents: 5661
diff changeset
3175 data = ngx_pnalloc(r->pool, new_len + 1);
4462
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3176 if (data == NULL) {
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3177 return NGX_ERROR;
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3178 }
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3179
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3180 p = ngx_copy(data, value->data, prefix);
4462
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3181 p = ngx_copy(p, replacement->data, replacement->len);
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3182
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3183 ngx_memcpy(p, value->data + prefix + len,
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3184 value->len - len - prefix + 1);
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3185
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3186 value->data = data;
4462
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3187
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3188 } else {
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3189 p = ngx_copy(value->data + prefix, replacement->data, replacement->len);
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3190
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3191 ngx_memmove(p, value->data + prefix + len,
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3192 value->len - len - prefix + 1);
4398
3d51ba7f347b Fixed: proxy_redirect with regex might broke Refresh header.
Valentin Bartenev <vbart@nginx.com>
parents: 4385
diff changeset
3193 }
3d51ba7f347b Fixed: proxy_redirect with regex might broke Refresh header.
Valentin Bartenev <vbart@nginx.com>
parents: 4385
diff changeset
3194
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3195 value->len = new_len;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3196
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3197 return NGX_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3198 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3199
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3200
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3201 static ngx_int_t
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3202 ngx_http_proxy_add_variables(ngx_conf_t *cf)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3203 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3204 ngx_http_variable_t *var, *v;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3205
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3206 for (v = ngx_http_proxy_vars; v->name.len; v++) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3207 var = ngx_http_add_variable(cf, &v->name, v->flags);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3208 if (var == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3209 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3210 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3211
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
3212 var->get_handler = v->get_handler;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3213 var->data = v->data;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3214 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3215
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3216 return NGX_OK;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3217 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3218
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3219
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3220 static void *
5951
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3221 ngx_http_proxy_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
3222 {
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3223 ngx_http_proxy_main_conf_t *conf;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3224
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3225 conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_proxy_main_conf_t));
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3226 if (conf == NULL) {
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3227 return NULL;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3228 }
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3229
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3230 #if (NGX_HTTP_CACHE)
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3231 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
3232 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
3233 != NGX_OK)
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3234 {
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3235 return NULL;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3236 }
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3237 #endif
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3238
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3239 return conf;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3240 }
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3241
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3242
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3243 static void *
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3244 ngx_http_proxy_create_loc_conf(ngx_conf_t *cf)
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3245 {
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3246 ngx_http_proxy_loc_conf_t *conf;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3247
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3248 conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_proxy_loc_conf_t));
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3249 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
3250 return NULL;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3251 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3252
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3253 /*
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3254 * set by ngx_pcalloc():
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3255 *
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3256 * conf->upstream.bufs.num = 0;
2786
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2784
diff changeset
3257 * conf->upstream.ignore_headers = 0;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3258 * conf->upstream.next_upstream = 0;
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3259 * conf->upstream.cache_zone = NULL;
2875
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
3260 * conf->upstream.cache_use_stale = 0;
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
3261 * conf->upstream.cache_methods = 0;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3262 * conf->upstream.temp_path = NULL;
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
3263 * conf->upstream.hide_headers_hash = { NULL, 0 };
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3264 * conf->upstream.store_lengths = NULL;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3265 * conf->upstream.store_values = NULL;
5660
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
3266 * conf->upstream.ssl_name = NULL;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3267 *
6781
ca27074f8f0f Proxy: support variables for proxy_method directive.
Dmitry Lazurkin <dilaz03@gmail.com>
parents: 6747
diff changeset
3268 * conf->method = NULL;
7238
06cf0c4b8618 Upstream: fixed comments after 13f8dec720b5.
Ruslan Ermilov <ru@nginx.com>
parents: 7220
diff changeset
3269 * conf->location = NULL;
06cf0c4b8618 Upstream: fixed comments after 13f8dec720b5.
Ruslan Ermilov <ru@nginx.com>
parents: 7220
diff changeset
3270 * conf->url = { 0, NULL };
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3271 * conf->headers_source = NULL;
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3272 * conf->headers.lengths = NULL;
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3273 * conf->headers.values = NULL;
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3274 * conf->headers.hash = { NULL, 0 };
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3275 * conf->headers_cache.lengths = NULL;
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3276 * conf->headers_cache.values = NULL;
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3277 * conf->headers_cache.hash = { NULL, 0 };
5910
29fa5023bd6f Proxy: renamed and rearranged fields in proxy configuration.
Roman Arutyunyan <arut@nginx.com>
parents: 5909
diff changeset
3278 * conf->body_lengths = NULL;
29fa5023bd6f Proxy: renamed and rearranged fields in proxy configuration.
Roman Arutyunyan <arut@nginx.com>
parents: 5909
diff changeset
3279 * conf->body_values = NULL;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3280 * conf->body_source = { 0, NULL };
3470
b982f2dee8cf fix proxy_redirect name in error message
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
3281 * conf->redirects = NULL;
5385
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
3282 * conf->ssl = 0;
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
3283 * conf->ssl_protocols = 0;
5390
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
3284 * conf->ssl_ciphers = { 0, NULL };
5661
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
3285 * conf->ssl_trusted_certificate = { 0, NULL };
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
3286 * conf->ssl_crl = { 0, NULL };
5900
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
3287 * conf->ssl_certificate = { 0, NULL };
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
3288 * conf->ssl_certificate_key = { 0, NULL };
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3289 */
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3290
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3291 conf->upstream.store = NGX_CONF_UNSET;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3292 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: 5738
diff changeset
3293 conf->upstream.next_upstream_tries = NGX_CONF_UNSET_UINT;
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
3294 conf->upstream.buffering = NGX_CONF_UNSET;
6050
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
3295 conf->upstream.request_buffering = NGX_CONF_UNSET;
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
3296 conf->upstream.ignore_client_abort = NGX_CONF_UNSET;
5874
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5832
diff changeset
3297 conf->upstream.force_ranges = NGX_CONF_UNSET;
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
3298
5008
fd84344f1df7 Fixed and improved the "*_bind" directives of proxying modules.
Ruslan Ermilov <ru@nginx.com>
parents: 4962
diff changeset
3299 conf->upstream.local = NGX_CONF_UNSET_PTR;
7371
8b68d50090e4 Upstream: proxy_socket_keepalive and friends.
Vladimir Homutov <vl@nginx.com>
parents: 7321
diff changeset
3300 conf->upstream.socket_keepalive = NGX_CONF_UNSET;
5008
fd84344f1df7 Fixed and improved the "*_bind" directives of proxying modules.
Ruslan Ermilov <ru@nginx.com>
parents: 4962
diff changeset
3301
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3302 conf->upstream.connect_timeout = NGX_CONF_UNSET_MSEC;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3303 conf->upstream.send_timeout = NGX_CONF_UNSET_MSEC;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3304 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: 5738
diff changeset
3305 conf->upstream.next_upstream_timeout = NGX_CONF_UNSET_MSEC;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3306
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3307 conf->upstream.send_lowat = NGX_CONF_UNSET_SIZE;
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
3308 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
3309 conf->upstream.limit_rate = NGX_CONF_UNSET_SIZE;
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3310
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3311 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
3312 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: 527
diff changeset
3313 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
3314
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3315 conf->upstream.pass_request_headers = NGX_CONF_UNSET;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3316 conf->upstream.pass_request_body = NGX_CONF_UNSET;
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 555
diff changeset
3317
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3318 #if (NGX_HTTP_CACHE)
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3319 conf->upstream.cache = NGX_CONF_UNSET;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3320 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
3321 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
3322 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
3323 conf->upstream.no_cache = NGX_CONF_UNSET_PTR;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3324 conf->upstream.cache_valid = NGX_CONF_UNSET_PTR;
4385
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
3325 conf->upstream.cache_lock = NGX_CONF_UNSET;
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
3326 conf->upstream.cache_lock_timeout = NGX_CONF_UNSET_MSEC;
5905
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5900
diff changeset
3327 conf->upstream.cache_lock_age = NGX_CONF_UNSET_MSEC;
5441
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
3328 conf->upstream.cache_revalidate = NGX_CONF_UNSET;
6290
4d5ac1a31d44 Upstream: proxy_cache_convert_head directive.
Roman Arutyunyan <arut@nginx.com>
parents: 6157
diff changeset
3329 conf->upstream.cache_convert_head = NGX_CONF_UNSET;
6906
1aeaae6e9446 Upstream: proxy_cache_background_update and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6793
diff changeset
3330 conf->upstream.cache_background_update = NGX_CONF_UNSET;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3331 #endif
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3332
1701
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
3333 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: 1699
diff changeset
3334 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: 1699
diff changeset
3335
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3336 conf->upstream.intercept_errors = NGX_CONF_UNSET;
5660
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
3337
2184
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
3338 #if (NGX_HTTP_SSL)
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
3339 conf->upstream.ssl_session_reuse = NGX_CONF_UNSET;
5660
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
3340 conf->upstream.ssl_server_name = NGX_CONF_UNSET;
5661
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
3341 conf->upstream.ssl_verify = NGX_CONF_UNSET;
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
3342 conf->ssl_verify_depth = NGX_CONF_UNSET_UINT;
5900
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
3343 conf->ssl_passwords = NGX_CONF_UNSET_PTR;
2184
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
3344 #endif
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3345
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3346 /* "proxy_cyclic_temp_file" is disabled */
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3347 conf->upstream.cyclic_temp_file = 0;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3348
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3349 conf->redirect = NGX_CONF_UNSET;
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
3350 conf->upstream.change_buffering = 1;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3351
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3352 conf->cookie_domains = NGX_CONF_UNSET_PTR;
4466
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
3353 conf->cookie_paths = NGX_CONF_UNSET_PTR;
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3354 conf->cookie_flags = NGX_CONF_UNSET_PTR;
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3355
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
3356 conf->http_version = NGX_CONF_UNSET_UINT;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
3357
1180
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
3358 conf->headers_hash_max_size = NGX_CONF_UNSET_UINT;
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
3359 conf->headers_hash_bucket_size = NGX_CONF_UNSET_UINT;
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
3360
3976
215fe9223419 update r3945 with more descriptive error message
Igor Sysoev <igor@sysoev.ru>
parents: 3862
diff changeset
3361 ngx_str_set(&conf->upstream.module, "proxy");
215fe9223419 update r3945 with more descriptive error message
Igor Sysoev <igor@sysoev.ru>
parents: 3862
diff changeset
3362
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3363 return conf;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3364 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3365
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3366
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3367 static char *
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3368 ngx_http_proxy_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3369 {
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3370 ngx_http_proxy_loc_conf_t *prev = parent;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3371 ngx_http_proxy_loc_conf_t *conf = child;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3372
3862
f4c49c9e4bb5 always test proxy_redirect with slash, this fixes a case when nginx uses
Igor Sysoev <igor@sysoev.ru>
parents: 3734
diff changeset
3373 u_char *p;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3374 size_t size;
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3375 ngx_int_t rc;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3376 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
3377 ngx_http_core_loc_conf_t *clcf;
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
3378 ngx_http_proxy_rewrite_t *pr;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3379 ngx_http_script_compile_t sc;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3380
5948
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
3381 #if (NGX_HTTP_CACHE)
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
3382
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
3383 if (conf->upstream.store > 0) {
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3384 conf->upstream.cache = 0;
5948
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
3385 }
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
3386
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3387 if (conf->upstream.cache > 0) {
5948
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
3388 conf->upstream.store = 0;
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
3389 }
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
3390
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
3391 #endif
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
3392
5940
e3b3b89d74e8 Upstream: fixed inheritance of proxy_store and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5939
diff changeset
3393 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
3394 ngx_conf_merge_value(conf->upstream.store,
2894
d26f4e80c71f style fix
Igor Sysoev <igor@sysoev.ru>
parents: 2875
diff changeset
3395 prev->upstream.store, 0);
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3396
5947
d9025ea1f5a5 Upstream: simplified proxy_store and friends configuration code.
Valentin Bartenev <vbart@nginx.com>
parents: 5940
diff changeset
3397 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
3398 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
3399 }
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3400
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3401 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
3402 prev->upstream.store_access, 0600);
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1244
diff changeset
3403
5832
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5738
diff changeset
3404 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: 5738
diff changeset
3405 prev->upstream.next_upstream_tries, 0);
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5738
diff changeset
3406
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
3407 ngx_conf_merge_value(conf->upstream.buffering,
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
3408 prev->upstream.buffering, 1);
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
3409
6050
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
3410 ngx_conf_merge_value(conf->upstream.request_buffering,
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
3411 prev->upstream.request_buffering, 1);
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
3412
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
3413 ngx_conf_merge_value(conf->upstream.ignore_client_abort,
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
3414 prev->upstream.ignore_client_abort, 0);
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
3415
5874
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5832
diff changeset
3416 ngx_conf_merge_value(conf->upstream.force_ranges,
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5832
diff changeset
3417 prev->upstream.force_ranges, 0);
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5832
diff changeset
3418
5008
fd84344f1df7 Fixed and improved the "*_bind" directives of proxying modules.
Ruslan Ermilov <ru@nginx.com>
parents: 4962
diff changeset
3419 ngx_conf_merge_ptr_value(conf->upstream.local,
fd84344f1df7 Fixed and improved the "*_bind" directives of proxying modules.
Ruslan Ermilov <ru@nginx.com>
parents: 4962
diff changeset
3420 prev->upstream.local, NULL);
fd84344f1df7 Fixed and improved the "*_bind" directives of proxying modules.
Ruslan Ermilov <ru@nginx.com>
parents: 4962
diff changeset
3421
7371
8b68d50090e4 Upstream: proxy_socket_keepalive and friends.
Vladimir Homutov <vl@nginx.com>
parents: 7321
diff changeset
3422 ngx_conf_merge_value(conf->upstream.socket_keepalive,
8b68d50090e4 Upstream: proxy_socket_keepalive and friends.
Vladimir Homutov <vl@nginx.com>
parents: 7321
diff changeset
3423 prev->upstream.socket_keepalive, 0);
8b68d50090e4 Upstream: proxy_socket_keepalive and friends.
Vladimir Homutov <vl@nginx.com>
parents: 7321
diff changeset
3424
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3425 ngx_conf_merge_msec_value(conf->upstream.connect_timeout,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3426 prev->upstream.connect_timeout, 60000);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3427
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3428 ngx_conf_merge_msec_value(conf->upstream.send_timeout,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3429 prev->upstream.send_timeout, 60000);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3430
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3431 ngx_conf_merge_msec_value(conf->upstream.read_timeout,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3432 prev->upstream.read_timeout, 60000);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3433
5832
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5738
diff changeset
3434 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: 5738
diff changeset
3435 prev->upstream.next_upstream_timeout, 0);
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5738
diff changeset
3436
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3437 ngx_conf_merge_size_value(conf->upstream.send_lowat,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3438 prev->upstream.send_lowat, 0);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3439
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
3440 ngx_conf_merge_size_value(conf->upstream.buffer_size,
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
3441 prev->upstream.buffer_size,
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3442 (size_t) ngx_pagesize);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3443
5883
973ee2276300 Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5874
diff changeset
3444 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
3445 prev->upstream.limit_rate, 0);
973ee2276300 Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5874
diff changeset
3446
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3447 ngx_conf_merge_bufs_value(conf->upstream.bufs, prev->upstream.bufs,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3448 8, ngx_pagesize);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3449
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3450 if (conf->upstream.bufs.num < 2) {
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3451 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3452 "there must be at least 2 \"proxy_buffers\"");
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3453 return NGX_CONF_ERROR;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3454 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3455
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3456
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
3457 size = conf->upstream.buffer_size;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3458 if (size < conf->upstream.bufs.size) {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3459 size = conf->upstream.bufs.size;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3460 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3461
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3462
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3463 ngx_conf_merge_size_value(conf->upstream.busy_buffers_size_conf,
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3464 prev->upstream.busy_buffers_size_conf,
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3465 NGX_CONF_UNSET_SIZE);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3466
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3467 if (conf->upstream.busy_buffers_size_conf == NGX_CONF_UNSET_SIZE) {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3468 conf->upstream.busy_buffers_size = 2 * size;
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3469 } else {
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3470 conf->upstream.busy_buffers_size =
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3471 conf->upstream.busy_buffers_size_conf;
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3472 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3473
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3474 if (conf->upstream.busy_buffers_size < size) {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3475 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
3476 "\"proxy_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
3477 "the maximum of the value of \"proxy_buffer_size\" and "
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3478 "one of the \"proxy_buffers\"");
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3479
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3480 return NGX_CONF_ERROR;
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3481 }
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3482
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3483 if (conf->upstream.busy_buffers_size
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3484 > (conf->upstream.bufs.num - 1) * conf->upstream.bufs.size)
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3485 {
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3486 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3487 "\"proxy_busy_buffers_size\" must be less than "
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3488 "the size of all \"proxy_buffers\" minus one buffer");
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3489
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3490 return NGX_CONF_ERROR;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3491 }
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3492
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3493
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3494 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: 527
diff changeset
3495 prev->upstream.temp_file_write_size_conf,
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3496 NGX_CONF_UNSET_SIZE);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3497
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3498 if (conf->upstream.temp_file_write_size_conf == NGX_CONF_UNSET_SIZE) {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3499 conf->upstream.temp_file_write_size = 2 * size;
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3500 } else {
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3501 conf->upstream.temp_file_write_size =
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3502 conf->upstream.temp_file_write_size_conf;
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3503 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3504
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3505 if (conf->upstream.temp_file_write_size < size) {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3506 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
3507 "\"proxy_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
3508 "than the maximum of the value of \"proxy_buffer_size\" and "
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3509 "one of the \"proxy_buffers\"");
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3510
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3511 return NGX_CONF_ERROR;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3512 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3513
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3514 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: 527
diff changeset
3515 prev->upstream.max_temp_file_size_conf,
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3516 NGX_CONF_UNSET_SIZE);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3517
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3518 if (conf->upstream.max_temp_file_size_conf == NGX_CONF_UNSET_SIZE) {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3519 conf->upstream.max_temp_file_size = 1024 * 1024 * 1024;
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3520 } else {
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3521 conf->upstream.max_temp_file_size =
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3522 conf->upstream.max_temp_file_size_conf;
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3523 }
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3524
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3525 if (conf->upstream.max_temp_file_size != 0
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3526 && conf->upstream.max_temp_file_size < size)
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3527 {
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3528 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 555
diff changeset
3529 "\"proxy_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
3530 "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
3531 "the maximum of the value of \"proxy_buffer_size\" and "
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 555
diff changeset
3532 "one of the \"proxy_buffers\"");
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3533
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3534 return NGX_CONF_ERROR;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3535 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3536
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3537
2786
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2784
diff changeset
3538 ngx_conf_merge_bitmask_value(conf->upstream.ignore_headers,
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2784
diff changeset
3539 prev->upstream.ignore_headers,
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2784
diff changeset
3540 NGX_CONF_BITMASK_SET);
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2784
diff changeset
3541
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2784
diff changeset
3542
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3543 ngx_conf_merge_bitmask_value(conf->upstream.next_upstream,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3544 prev->upstream.next_upstream,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3545 (NGX_CONF_BITMASK_SET
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3546 |NGX_HTTP_UPSTREAM_FT_ERROR
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3547 |NGX_HTTP_UPSTREAM_FT_TIMEOUT));
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3548
665
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
3549 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
3550 conf->upstream.next_upstream = NGX_CONF_BITMASK_SET
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
3551 |NGX_HTTP_UPSTREAM_FT_OFF;
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
3552 }
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
3553
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3554 if (ngx_conf_merge_path_value(cf, &conf->upstream.temp_path,
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3555 prev->upstream.temp_path,
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3556 &ngx_http_proxy_temp_path)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3557 != NGX_OK)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3558 {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3559 return NGX_CONF_ERROR;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3560 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3561
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3562
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3563 #if (NGX_HTTP_CACHE)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3564
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3565 if (conf->upstream.cache == NGX_CONF_UNSET) {
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3566 ngx_conf_merge_value(conf->upstream.cache,
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3567 prev->upstream.cache, 0);
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3568
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3569 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
3570 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
3571 }
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3572
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3573 if (conf->upstream.cache_zone && conf->upstream.cache_zone->data == NULL) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3574 ngx_shm_zone_t *shm_zone;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3575
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3576 shm_zone = conf->upstream.cache_zone;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3577
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3578 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3579 "\"proxy_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: 2706
diff changeset
3580 &shm_zone->shm.name);
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3581
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3582 return NGX_CONF_ERROR;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3583 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3584
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3585 ngx_conf_merge_uint_value(conf->upstream.cache_min_uses,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3586 prev->upstream.cache_min_uses, 1);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3587
6793
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
3588 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
3589 prev->upstream.cache_max_range_offset,
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
3590 NGX_MAX_OFF_T_VALUE);
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
3591
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3592 ngx_conf_merge_bitmask_value(conf->upstream.cache_use_stale,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3593 prev->upstream.cache_use_stale,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3594 (NGX_CONF_BITMASK_SET
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3595 |NGX_HTTP_UPSTREAM_FT_OFF));
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3596
4401
d45742815c90 Fixed proxy_cache_use_stale in "no live upstreams" case.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4400
diff changeset
3597 if (conf->upstream.cache_use_stale & NGX_HTTP_UPSTREAM_FT_OFF) {
d45742815c90 Fixed proxy_cache_use_stale in "no live upstreams" case.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4400
diff changeset
3598 conf->upstream.cache_use_stale = NGX_CONF_BITMASK_SET
d45742815c90 Fixed proxy_cache_use_stale in "no live upstreams" case.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4400
diff changeset
3599 |NGX_HTTP_UPSTREAM_FT_OFF;
d45742815c90 Fixed proxy_cache_use_stale in "no live upstreams" case.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4400
diff changeset
3600 }
d45742815c90 Fixed proxy_cache_use_stale in "no live upstreams" case.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4400
diff changeset
3601
d45742815c90 Fixed proxy_cache_use_stale in "no live upstreams" case.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4400
diff changeset
3602 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: 4400
diff changeset
3603 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: 4400
diff changeset
3604 }
d45742815c90 Fixed proxy_cache_use_stale in "no live upstreams" case.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4400
diff changeset
3605
2875
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
3606 if (conf->upstream.cache_methods == 0) {
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
3607 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
3608 }
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
3609
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
3610 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
3611
3699
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3692
diff changeset
3612 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
3613 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
3614
3526
62a4fd1e6e2c proxy_no_cache and fastcgi_no_cache
Igor Sysoev <igor@sysoev.ru>
parents: 3523
diff changeset
3615 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
3616 prev->upstream.no_cache, NULL);
62a4fd1e6e2c proxy_no_cache and fastcgi_no_cache
Igor Sysoev <igor@sysoev.ru>
parents: 3523
diff changeset
3617
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3618 ngx_conf_merge_ptr_value(conf->upstream.cache_valid,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3619 prev->upstream.cache_valid, NULL);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3620
2672
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
3621 if (conf->cache_key.value.data == NULL) {
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
3622 conf->cache_key = prev->cache_key;
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
3623 }
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
3624
4385
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
3625 ngx_conf_merge_value(conf->upstream.cache_lock,
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
3626 prev->upstream.cache_lock, 0);
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
3627
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
3628 ngx_conf_merge_msec_value(conf->upstream.cache_lock_timeout,
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
3629 prev->upstream.cache_lock_timeout, 5000);
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
3630
5905
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5900
diff changeset
3631 ngx_conf_merge_msec_value(conf->upstream.cache_lock_age,
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5900
diff changeset
3632 prev->upstream.cache_lock_age, 5000);
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5900
diff changeset
3633
5441
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
3634 ngx_conf_merge_value(conf->upstream.cache_revalidate,
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
3635 prev->upstream.cache_revalidate, 0);
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
3636
6290
4d5ac1a31d44 Upstream: proxy_cache_convert_head directive.
Roman Arutyunyan <arut@nginx.com>
parents: 6157
diff changeset
3637 ngx_conf_merge_value(conf->upstream.cache_convert_head,
4d5ac1a31d44 Upstream: proxy_cache_convert_head directive.
Roman Arutyunyan <arut@nginx.com>
parents: 6157
diff changeset
3638 prev->upstream.cache_convert_head, 1);
4d5ac1a31d44 Upstream: proxy_cache_convert_head directive.
Roman Arutyunyan <arut@nginx.com>
parents: 6157
diff changeset
3639
6906
1aeaae6e9446 Upstream: proxy_cache_background_update and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6793
diff changeset
3640 ngx_conf_merge_value(conf->upstream.cache_background_update,
1aeaae6e9446 Upstream: proxy_cache_background_update and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6793
diff changeset
3641 prev->upstream.cache_background_update, 0);
1aeaae6e9446 Upstream: proxy_cache_background_update and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6793
diff changeset
3642
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3643 #endif
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3644
6781
ca27074f8f0f Proxy: support variables for proxy_method directive.
Dmitry Lazurkin <dilaz03@gmail.com>
parents: 6747
diff changeset
3645 if (conf->method == NULL) {
ca27074f8f0f Proxy: support variables for proxy_method directive.
Dmitry Lazurkin <dilaz03@gmail.com>
parents: 6747
diff changeset
3646 conf->method = prev->method;
ca27074f8f0f Proxy: support variables for proxy_method directive.
Dmitry Lazurkin <dilaz03@gmail.com>
parents: 6747
diff changeset
3647 }
5012
bbdb172f0927 Proxy: fixed proxy_method to always add space.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5008
diff changeset
3648
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3649 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
3650 prev->upstream.pass_request_headers, 1);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3651 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
3652 prev->upstream.pass_request_body, 1);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3653
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3654 ngx_conf_merge_value(conf->upstream.intercept_errors,
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3655 prev->upstream.intercept_errors, 0);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3656
2184
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
3657 #if (NGX_HTTP_SSL)
5660
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
3658
2184
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
3659 ngx_conf_merge_value(conf->upstream.ssl_session_reuse,
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
3660 prev->upstream.ssl_session_reuse, 1);
5385
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
3661
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
3662 ngx_conf_merge_bitmask_value(conf->ssl_protocols, prev->ssl_protocols,
6157
b2899e7d0ef8 Disabled SSLv3 by default (ticket #653).
Maxim Dounin <mdounin@mdounin.ru>
parents: 6056
diff changeset
3663 (NGX_CONF_BITMASK_SET|NGX_SSL_TLSv1
b2899e7d0ef8 Disabled SSLv3 by default (ticket #653).
Maxim Dounin <mdounin@mdounin.ru>
parents: 6056
diff changeset
3664 |NGX_SSL_TLSv1_1|NGX_SSL_TLSv1_2));
5385
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
3665
5390
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
3666 ngx_conf_merge_str_value(conf->ssl_ciphers, prev->ssl_ciphers,
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
3667 "DEFAULT");
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
3668
5660
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
3669 if (conf->upstream.ssl_name == NULL) {
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
3670 conf->upstream.ssl_name = prev->upstream.ssl_name;
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
3671 }
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
3672
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
3673 ngx_conf_merge_value(conf->upstream.ssl_server_name,
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
3674 prev->upstream.ssl_server_name, 0);
5661
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
3675 ngx_conf_merge_value(conf->upstream.ssl_verify,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
3676 prev->upstream.ssl_verify, 0);
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
3677 ngx_conf_merge_uint_value(conf->ssl_verify_depth,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
3678 prev->ssl_verify_depth, 1);
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
3679 ngx_conf_merge_str_value(conf->ssl_trusted_certificate,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
3680 prev->ssl_trusted_certificate, "");
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
3681 ngx_conf_merge_str_value(conf->ssl_crl, prev->ssl_crl, "");
5660
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
3682
5900
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
3683 ngx_conf_merge_str_value(conf->ssl_certificate,
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
3684 prev->ssl_certificate, "");
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
3685 ngx_conf_merge_str_value(conf->ssl_certificate_key,
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
3686 prev->ssl_certificate_key, "");
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
3687 ngx_conf_merge_ptr_value(conf->ssl_passwords, prev->ssl_passwords, NULL);
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
3688
5385
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
3689 if (conf->ssl && ngx_http_proxy_set_ssl(cf, conf) != NGX_OK) {
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
3690 return NGX_CONF_ERROR;
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
3691 }
5660
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
3692
2184
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
3693 #endif
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
3694
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3695 ngx_conf_merge_value(conf->redirect, prev->redirect, 1);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3696
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3697 if (conf->redirect) {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3698
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3699 if (conf->redirects == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3700 conf->redirects = prev->redirects;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3701 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3702
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
3703 if (conf->redirects == NULL && conf->url.data) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3704
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3705 conf->redirects = ngx_array_create(cf->pool, 1,
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
3706 sizeof(ngx_http_proxy_rewrite_t));
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3707 if (conf->redirects == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3708 return NGX_CONF_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3709 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3710
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3711 pr = ngx_array_push(conf->redirects);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3712 if (pr == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3713 return NGX_CONF_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3714 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3715
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
3716 ngx_memzero(&pr->pattern.complex,
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
3717 sizeof(ngx_http_complex_value_t));
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
3718
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
3719 ngx_memzero(&pr->replacement, sizeof(ngx_http_complex_value_t));
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
3720
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
3721 pr->handler = ngx_http_proxy_rewrite_complex_handler;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
3722
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
3723 if (conf->vars.uri.len) {
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
3724 pr->pattern.complex.value = conf->url;
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
3725 pr->replacement.value = conf->location;
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
3726
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
3727 } else {
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
3728 pr->pattern.complex.value.len = conf->url.len
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
3729 + sizeof("/") - 1;
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
3730
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
3731 p = ngx_pnalloc(cf->pool, pr->pattern.complex.value.len);
3862
f4c49c9e4bb5 always test proxy_redirect with slash, this fixes a case when nginx uses
Igor Sysoev <igor@sysoev.ru>
parents: 3734
diff changeset
3732 if (p == NULL) {
f4c49c9e4bb5 always test proxy_redirect with slash, this fixes a case when nginx uses
Igor Sysoev <igor@sysoev.ru>
parents: 3734
diff changeset
3733 return NGX_CONF_ERROR;
f4c49c9e4bb5 always test proxy_redirect with slash, this fixes a case when nginx uses
Igor Sysoev <igor@sysoev.ru>
parents: 3734
diff changeset
3734 }
f4c49c9e4bb5 always test proxy_redirect with slash, this fixes a case when nginx uses
Igor Sysoev <igor@sysoev.ru>
parents: 3734
diff changeset
3735
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
3736 pr->pattern.complex.value.data = p;
3862
f4c49c9e4bb5 always test proxy_redirect with slash, this fixes a case when nginx uses
Igor Sysoev <igor@sysoev.ru>
parents: 3734
diff changeset
3737
f4c49c9e4bb5 always test proxy_redirect with slash, this fixes a case when nginx uses
Igor Sysoev <igor@sysoev.ru>
parents: 3734
diff changeset
3738 p = ngx_cpymem(p, conf->url.data, conf->url.len);
f4c49c9e4bb5 always test proxy_redirect with slash, this fixes a case when nginx uses
Igor Sysoev <igor@sysoev.ru>
parents: 3734
diff changeset
3739 *p = '/';
f4c49c9e4bb5 always test proxy_redirect with slash, this fixes a case when nginx uses
Igor Sysoev <igor@sysoev.ru>
parents: 3734
diff changeset
3740
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
3741 ngx_str_set(&pr->replacement.value, "/");
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
3742 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3743 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3744 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3745
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3746 ngx_conf_merge_ptr_value(conf->cookie_domains, prev->cookie_domains, NULL);
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3747
4466
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
3748 ngx_conf_merge_ptr_value(conf->cookie_paths, prev->cookie_paths, NULL);
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
3749
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3750 ngx_conf_merge_ptr_value(conf->cookie_flags, prev->cookie_flags, NULL);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3751
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
3752 ngx_conf_merge_uint_value(conf->http_version, prev->http_version,
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
3753 NGX_HTTP_VERSION_10);
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
3754
1180
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
3755 ngx_conf_merge_uint_value(conf->headers_hash_max_size,
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
3756 prev->headers_hash_max_size, 512);
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
3757
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
3758 ngx_conf_merge_uint_value(conf->headers_hash_bucket_size,
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
3759 prev->headers_hash_bucket_size, 64);
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
3760
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
3761 conf->headers_hash_bucket_size = ngx_align(conf->headers_hash_bucket_size,
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
3762 ngx_cacheline_size);
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
3763
1701
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
3764 hash.max_size = conf->headers_hash_max_size;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
3765 hash.bucket_size = conf->headers_hash_bucket_size;
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
3766 hash.name = "proxy_headers_hash";
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
3767
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
3768 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
3769 &prev->upstream, ngx_http_proxy_hide_headers, &hash)
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
3770 != NGX_OK)
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
3771 {
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
3772 return NGX_CONF_ERROR;
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
3773 }
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
3774
5938
cd2abf7e7740 Upstream: fixed unexpected inheritance into limit_except blocks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5937
diff changeset
3775 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
3776
cd2abf7e7740 Upstream: fixed unexpected inheritance into limit_except blocks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5937
diff changeset
3777 if (clcf->noname
cd2abf7e7740 Upstream: fixed unexpected inheritance into limit_except blocks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5937
diff changeset
3778 && conf->upstream.upstream == NULL && conf->proxy_lengths == NULL)
cd2abf7e7740 Upstream: fixed unexpected inheritance into limit_except blocks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5937
diff changeset
3779 {
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 843
diff changeset
3780 conf->upstream.upstream = prev->upstream.upstream;
5939
aeea0522332f Proxy: fixed incorrect URI change due to if (ticket #86).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5938
diff changeset
3781 conf->location = prev->location;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
3782 conf->vars = prev->vars;
5937
5b9f711dc819 Upstream: inheritance of proxy_pass and friends (ticket #645).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5936
diff changeset
3783
3734
e3a6785b5be4 *) make code consistent to fastcgi, etc
Igor Sysoev <igor@sysoev.ru>
parents: 3733
diff changeset
3784 conf->proxy_lengths = prev->proxy_lengths;
e3a6785b5be4 *) make code consistent to fastcgi, etc
Igor Sysoev <igor@sysoev.ru>
parents: 3733
diff changeset
3785 conf->proxy_values = prev->proxy_values;
5937
5b9f711dc819 Upstream: inheritance of proxy_pass and friends (ticket #645).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5936
diff changeset
3786
5b9f711dc819 Upstream: inheritance of proxy_pass and friends (ticket #645).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5936
diff changeset
3787 #if (NGX_HTTP_SSL)
5b9f711dc819 Upstream: inheritance of proxy_pass and friends (ticket #645).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5936
diff changeset
3788 conf->upstream.ssl = prev->upstream.ssl;
5b9f711dc819 Upstream: inheritance of proxy_pass and friends (ticket #645).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5936
diff changeset
3789 #endif
3734
e3a6785b5be4 *) make code consistent to fastcgi, etc
Igor Sysoev <igor@sysoev.ru>
parents: 3733
diff changeset
3790 }
e3a6785b5be4 *) make code consistent to fastcgi, etc
Igor Sysoev <igor@sysoev.ru>
parents: 3733
diff changeset
3791
5938
cd2abf7e7740 Upstream: fixed unexpected inheritance into limit_except blocks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5937
diff changeset
3792 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
3793 && (conf->upstream.upstream || conf->proxy_lengths))
cd2abf7e7740 Upstream: fixed unexpected inheritance into limit_except blocks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5937
diff changeset
3794 {
cd2abf7e7740 Upstream: fixed unexpected inheritance into limit_except blocks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5937
diff changeset
3795 clcf->handler = ngx_http_proxy_handler;
3731
72cc5b789021 inherit proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass inside
Igor Sysoev <igor@sysoev.ru>
parents: 3729
diff changeset
3796 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3797
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3798 if (conf->body_source.data == NULL) {
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3799 conf->body_flushes = prev->body_flushes;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3800 conf->body_source = prev->body_source;
5910
29fa5023bd6f Proxy: renamed and rearranged fields in proxy configuration.
Roman Arutyunyan <arut@nginx.com>
parents: 5909
diff changeset
3801 conf->body_lengths = prev->body_lengths;
29fa5023bd6f Proxy: renamed and rearranged fields in proxy configuration.
Roman Arutyunyan <arut@nginx.com>
parents: 5909
diff changeset
3802 conf->body_values = prev->body_values;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3803 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3804
5910
29fa5023bd6f Proxy: renamed and rearranged fields in proxy configuration.
Roman Arutyunyan <arut@nginx.com>
parents: 5909
diff changeset
3805 if (conf->body_source.data && conf->body_lengths == NULL) {
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3806
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3807 ngx_memzero(&sc, sizeof(ngx_http_script_compile_t));
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3808
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3809 sc.cf = cf;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3810 sc.source = &conf->body_source;
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3811 sc.flushes = &conf->body_flushes;
5910
29fa5023bd6f Proxy: renamed and rearranged fields in proxy configuration.
Roman Arutyunyan <arut@nginx.com>
parents: 5909
diff changeset
3812 sc.lengths = &conf->body_lengths;
29fa5023bd6f Proxy: renamed and rearranged fields in proxy configuration.
Roman Arutyunyan <arut@nginx.com>
parents: 5909
diff changeset
3813 sc.values = &conf->body_values;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3814 sc.complete_lengths = 1;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3815 sc.complete_values = 1;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3816
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3817 if (ngx_http_script_compile(&sc) != NGX_OK) {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3818 return NGX_CONF_ERROR;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3819 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3820 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3821
5907
195561ef367f Upstream: moved header initializations to separate functions.
Roman Arutyunyan <arut@nginx.com>
parents: 5905
diff changeset
3822 if (conf->headers_source == NULL) {
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3823 conf->headers = prev->headers;
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3824 #if (NGX_HTTP_CACHE)
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3825 conf->headers_cache = prev->headers_cache;
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3826 #endif
5907
195561ef367f Upstream: moved header initializations to separate functions.
Roman Arutyunyan <arut@nginx.com>
parents: 5905
diff changeset
3827 conf->headers_source = prev->headers_source;
195561ef367f Upstream: moved header initializations to separate functions.
Roman Arutyunyan <arut@nginx.com>
parents: 5905
diff changeset
3828 }
195561ef367f Upstream: moved header initializations to separate functions.
Roman Arutyunyan <arut@nginx.com>
parents: 5905
diff changeset
3829
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3830 rc = ngx_http_proxy_init_headers(cf, conf, &conf->headers,
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3831 ngx_http_proxy_headers);
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3832 if (rc != NGX_OK) {
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3833 return NGX_CONF_ERROR;
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3834 }
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3835
5907
195561ef367f Upstream: moved header initializations to separate functions.
Roman Arutyunyan <arut@nginx.com>
parents: 5905
diff changeset
3836 #if (NGX_HTTP_CACHE)
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3837
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3838 if (conf->upstream.cache) {
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3839 rc = ngx_http_proxy_init_headers(cf, conf, &conf->headers_cache,
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3840 ngx_http_proxy_cache_headers);
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3841 if (rc != NGX_OK) {
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3842 return NGX_CONF_ERROR;
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3843 }
5907
195561ef367f Upstream: moved header initializations to separate functions.
Roman Arutyunyan <arut@nginx.com>
parents: 5905
diff changeset
3844 }
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3845
5907
195561ef367f Upstream: moved header initializations to separate functions.
Roman Arutyunyan <arut@nginx.com>
parents: 5905
diff changeset
3846 #endif
195561ef367f Upstream: moved header initializations to separate functions.
Roman Arutyunyan <arut@nginx.com>
parents: 5905
diff changeset
3847
6747
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6746
diff changeset
3848 /*
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6746
diff changeset
3849 * special handling to preserve conf->headers in the "http" section
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6746
diff changeset
3850 * to inherit it to all servers
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6746
diff changeset
3851 */
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6746
diff changeset
3852
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6746
diff changeset
3853 if (prev->headers.hash.buckets == NULL
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6746
diff changeset
3854 && conf->headers_source == prev->headers_source)
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6746
diff changeset
3855 {
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6746
diff changeset
3856 prev->headers = conf->headers;
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6746
diff changeset
3857 #if (NGX_HTTP_CACHE)
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6746
diff changeset
3858 prev->headers_cache = conf->headers_cache;
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6746
diff changeset
3859 #endif
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6746
diff changeset
3860 }
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6746
diff changeset
3861
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3862 return NGX_CONF_OK;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3863 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3864
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3865
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3866 static ngx_int_t
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3867 ngx_http_proxy_init_headers(ngx_conf_t *cf, ngx_http_proxy_loc_conf_t *conf,
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3868 ngx_http_proxy_headers_t *headers, ngx_keyval_t *default_headers)
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3869 {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3870 u_char *p;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3871 size_t size;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3872 uintptr_t *code;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3873 ngx_uint_t i;
4274
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
3874 ngx_array_t headers_names, headers_merged;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3875 ngx_keyval_t *src, *s, *h;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3876 ngx_hash_key_t *hk;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3877 ngx_hash_init_t hash;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3878 ngx_http_script_compile_t sc;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3879 ngx_http_script_copy_code_t *copy;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3880
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3881 if (headers->hash.buckets) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3882 return NGX_OK;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3883 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3884
3561
20708cffd6dc use local headers_names array instead of stored in configuration
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3885 if (ngx_array_init(&headers_names, cf->temp_pool, 4, sizeof(ngx_hash_key_t))
20708cffd6dc use local headers_names array instead of stored in configuration
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3886 != NGX_OK)
20708cffd6dc use local headers_names array instead of stored in configuration
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3887 {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3888 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3889 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3890
4274
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
3891 if (ngx_array_init(&headers_merged, cf->temp_pool, 4, sizeof(ngx_keyval_t))
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
3892 != NGX_OK)
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
3893 {
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
3894 return NGX_ERROR;
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
3895 }
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
3896
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3897 headers->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
3898 if (headers->lengths == NULL) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3899 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3900 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3901
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3902 headers->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
3903 if (headers->values == NULL) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3904 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3905 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3906
6746
63991ab67b3a Proxy: do not create conf->headers_source when not needed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6591
diff changeset
3907 if (conf->headers_source) {
63991ab67b3a Proxy: do not create conf->headers_source when not needed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6591
diff changeset
3908
63991ab67b3a Proxy: do not create conf->headers_source when not needed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6591
diff changeset
3909 src = conf->headers_source->elts;
63991ab67b3a Proxy: do not create conf->headers_source when not needed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6591
diff changeset
3910 for (i = 0; i < conf->headers_source->nelts; i++) {
63991ab67b3a Proxy: do not create conf->headers_source when not needed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6591
diff changeset
3911
63991ab67b3a Proxy: do not create conf->headers_source when not needed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6591
diff changeset
3912 s = ngx_array_push(&headers_merged);
63991ab67b3a Proxy: do not create conf->headers_source when not needed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6591
diff changeset
3913 if (s == NULL) {
63991ab67b3a Proxy: do not create conf->headers_source when not needed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6591
diff changeset
3914 return NGX_ERROR;
63991ab67b3a Proxy: do not create conf->headers_source when not needed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6591
diff changeset
3915 }
63991ab67b3a Proxy: do not create conf->headers_source when not needed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6591
diff changeset
3916
63991ab67b3a Proxy: do not create conf->headers_source when not needed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6591
diff changeset
3917 *s = src[i];
4274
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
3918 }
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
3919 }
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
3920
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3921 h = default_headers;
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3922
2705
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
3923 while (h->key.len) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3924
4274
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
3925 src = headers_merged.elts;
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
3926 for (i = 0; i < headers_merged.nelts; i++) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3927 if (ngx_strcasecmp(h->key.data, src[i].key.data) == 0) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3928 goto next;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3929 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3930 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3931
4274
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
3932 s = ngx_array_push(&headers_merged);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3933 if (s == NULL) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3934 return NGX_ERROR;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3935 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3936
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3937 *s = *h;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3938
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3939 next:
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3940
2705
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
3941 h++;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3942 }
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3943
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3944
4274
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
3945 src = headers_merged.elts;
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
3946 for (i = 0; i < headers_merged.nelts; i++) {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3947
3561
20708cffd6dc use local headers_names array instead of stored in configuration
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3948 hk = ngx_array_push(&headers_names);
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
3949 if (hk == NULL) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3950 return NGX_ERROR;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3951 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3952
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
3953 hk->key = src[i].key;
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
3954 hk->key_hash = ngx_hash_key_lc(src[i].key.data, src[i].key.len);
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
3955 hk->value = (void *) 1;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3956
519
12234c998d83 nginx-0.1.34-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
3957 if (src[i].value.len == 0) {
12234c998d83 nginx-0.1.34-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
3958 continue;
12234c998d83 nginx-0.1.34-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
3959 }
12234c998d83 nginx-0.1.34-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
3960
7047
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3961 copy = ngx_array_push_n(headers->lengths,
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3962 sizeof(ngx_http_script_copy_code_t));
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3963 if (copy == NULL) {
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3964 return NGX_ERROR;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3965 }
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3966
7271
9e25a5380a21 Silenced -Wcast-function-type warnings (closes #1546).
Sergey Kandaurov <pluknet@nginx.com>
parents: 7238
diff changeset
3967 copy->code = (ngx_http_script_code_pt) (void *)
9e25a5380a21 Silenced -Wcast-function-type warnings (closes #1546).
Sergey Kandaurov <pluknet@nginx.com>
parents: 7238
diff changeset
3968 ngx_http_script_copy_len_code;
7047
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3969 copy->len = src[i].key.len;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3970
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3971 size = (sizeof(ngx_http_script_copy_code_t)
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3972 + src[i].key.len + sizeof(uintptr_t) - 1)
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3973 & ~(sizeof(uintptr_t) - 1);
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3974
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3975 copy = ngx_array_push_n(headers->values, size);
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3976 if (copy == NULL) {
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3977 return NGX_ERROR;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3978 }
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3979
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3980 copy->code = ngx_http_script_copy_code;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3981 copy->len = src[i].key.len;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3982
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3983 p = (u_char *) copy + sizeof(ngx_http_script_copy_code_t);
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3984 ngx_memcpy(p, src[i].key.data, src[i].key.len);
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3985
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3986 ngx_memzero(&sc, sizeof(ngx_http_script_compile_t));
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3987
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3988 sc.cf = cf;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3989 sc.source = &src[i].value;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3990 sc.flushes = &headers->flushes;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3991 sc.lengths = &headers->lengths;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3992 sc.values = &headers->values;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3993
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3994 if (ngx_http_script_compile(&sc) != NGX_OK) {
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
3995 return NGX_ERROR;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3996 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3997
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3998 code = ngx_array_push_n(headers->lengths, sizeof(uintptr_t));
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3999 if (code == NULL) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4000 return NGX_ERROR;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4001 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4002
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4003 *code = (uintptr_t) NULL;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4004
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
4005 code = ngx_array_push_n(headers->values, sizeof(uintptr_t));
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4006 if (code == NULL) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4007 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4008 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4009
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4010 *code = (uintptr_t) NULL;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4011 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4012
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
4013 code = ngx_array_push_n(headers->lengths, sizeof(uintptr_t));
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4014 if (code == NULL) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4015 return NGX_ERROR;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4016 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4017
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4018 *code = (uintptr_t) NULL;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4019
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4020
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
4021 hash.hash = &headers->hash;
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
4022 hash.key = ngx_hash_key_lc;
1180
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
4023 hash.max_size = conf->headers_hash_max_size;
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
4024 hash.bucket_size = conf->headers_hash_bucket_size;
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
4025 hash.name = "proxy_headers_hash";
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
4026 hash.pool = cf->pool;
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
4027 hash.temp_pool = NULL;
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
4028
3561
20708cffd6dc use local headers_names array instead of stored in configuration
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
4029 return ngx_hash_init(&hash, headers_names.elts, headers_names.nelts);
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4030 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4031
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4032
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4033 static char *
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4034 ngx_http_proxy_pass(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4035 {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4036 ngx_http_proxy_loc_conf_t *plcf = conf;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4037
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4038 size_t add;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4039 u_short port;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4040 ngx_str_t *value, *url;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4041 ngx_url_t u;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4042 ngx_uint_t n;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4043 ngx_http_core_loc_conf_t *clcf;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4044 ngx_http_script_compile_t sc;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4045
2391
d88e757cc7d8 delete surplus upstream.schema field
Igor Sysoev <igor@sysoev.ru>
parents: 2285
diff changeset
4046 if (plcf->upstream.upstream || plcf->proxy_lengths) {
555
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
4047 return "is duplicate";
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
4048 }
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
4049
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4050 clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4051
2989
dff9764eaca2 do auto redirect for proxy_pass/fastcgi_pass with variables
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
4052 clcf->handler = ngx_http_proxy_handler;
dff9764eaca2 do auto redirect for proxy_pass/fastcgi_pass with variables
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
4053
7321
45e513c3540d Fixed invalid access to location defined as an empty string.
Ruslan Ermilov <ru@nginx.com>
parents: 7320
diff changeset
4054 if (clcf->name.len && clcf->name.data[clcf->name.len - 1] == '/') {
2989
dff9764eaca2 do auto redirect for proxy_pass/fastcgi_pass with variables
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
4055 clcf->auto_redirect = 1;
dff9764eaca2 do auto redirect for proxy_pass/fastcgi_pass with variables
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
4056 }
dff9764eaca2 do auto redirect for proxy_pass/fastcgi_pass with variables
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
4057
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4058 value = cf->args->elts;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4059
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4060 url = &value[1];
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4061
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4062 n = ngx_http_script_variables_count(url);
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4063
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4064 if (n) {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4065
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4066 ngx_memzero(&sc, sizeof(ngx_http_script_compile_t));
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4067
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4068 sc.cf = cf;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4069 sc.source = url;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4070 sc.lengths = &plcf->proxy_lengths;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4071 sc.values = &plcf->proxy_values;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4072 sc.variables = n;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4073 sc.complete_lengths = 1;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4074 sc.complete_values = 1;
1679
ca317d9b5c09 style fix: remove trailing spaces
Igor Sysoev <igor@sysoev.ru>
parents: 1671
diff changeset
4075
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4076 if (ngx_http_script_compile(&sc) != NGX_OK) {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4077 return NGX_CONF_ERROR;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4078 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4079
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4080 #if (NGX_HTTP_SSL)
5385
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
4081 plcf->ssl = 1;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4082 #endif
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4083
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4084 return NGX_CONF_OK;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4085 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4086
1107
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 969
diff changeset
4087 if (ngx_strncasecmp(url->data, (u_char *) "http://", 7) == 0) {
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
4088 add = 7;
591
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
4089 port = 80;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
4090
1107
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 969
diff changeset
4091 } else if (ngx_strncasecmp(url->data, (u_char *) "https://", 8) == 0) {
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
4092
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
4093 #if (NGX_HTTP_SSL)
5385
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
4094 plcf->ssl = 1;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
4095
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
4096 add = 8;
591
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
4097 port = 443;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
4098 #else
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
4099 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
4100 "https protocol requires SSL support");
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
4101 return NGX_CONF_ERROR;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
4102 #endif
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
4103
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
4104 } else {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4105 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "invalid URL prefix");
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4106 return NGX_CONF_ERROR;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4107 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4108
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4109 ngx_memzero(&u, sizeof(ngx_url_t));
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4110
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4111 u.url.len = url->len - add;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4112 u.url.data = url->data + add;
906
a0310ac2814f rewritten upstream
Igor Sysoev <igor@sysoev.ru>
parents: 896
diff changeset
4113 u.default_port = port;
a0310ac2814f rewritten upstream
Igor Sysoev <igor@sysoev.ru>
parents: 896
diff changeset
4114 u.uri_part = 1;
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 843
diff changeset
4115 u.no_resolve = 1;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 843
diff changeset
4116
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 843
diff changeset
4117 plcf->upstream.upstream = ngx_http_upstream_add(cf, &u, 0);
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 843
diff changeset
4118 if (plcf->upstream.upstream == NULL) {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4119 return NGX_CONF_ERROR;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4120 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4121
2391
d88e757cc7d8 delete surplus upstream.schema field
Igor Sysoev <igor@sysoev.ru>
parents: 2285
diff changeset
4122 plcf->vars.schema.len = add;
d88e757cc7d8 delete surplus upstream.schema field
Igor Sysoev <igor@sysoev.ru>
parents: 2285
diff changeset
4123 plcf->vars.schema.data = url->data;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4124 plcf->vars.key_start = plcf->vars.schema;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4125
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4126 ngx_http_proxy_set_vars(&u, &plcf->vars);
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4127
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4128 plcf->location = clcf->name;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4129
1353
7443fbe0b013 named location
Igor Sysoev <igor@sysoev.ru>
parents: 1339
diff changeset
4130 if (clcf->named
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4131 #if (NGX_PCRE)
1353
7443fbe0b013 named location
Igor Sysoev <igor@sysoev.ru>
parents: 1339
diff changeset
4132 || clcf->regex
7443fbe0b013 named location
Igor Sysoev <igor@sysoev.ru>
parents: 1339
diff changeset
4133 #endif
7443fbe0b013 named location
Igor Sysoev <igor@sysoev.ru>
parents: 1339
diff changeset
4134 || clcf->noname)
7443fbe0b013 named location
Igor Sysoev <igor@sysoev.ru>
parents: 1339
diff changeset
4135 {
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4136 if (plcf->vars.uri.len) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
4137 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
4138 "\"proxy_pass\" cannot have URI part in "
843
ebab9490204c allow proxy_pass inside limit_except
Igor Sysoev <igor@sysoev.ru>
parents: 812
diff changeset
4139 "location given by regular expression, "
1353
7443fbe0b013 named location
Igor Sysoev <igor@sysoev.ru>
parents: 1339
diff changeset
4140 "or inside named location, "
4593
834049edae24 Fixed grammar in error messages.
Ruslan Ermilov <ru@nginx.com>
parents: 4529
diff changeset
4141 "or inside \"if\" statement, "
834049edae24 Fixed grammar in error messages.
Ruslan Ermilov <ru@nginx.com>
parents: 4529
diff changeset
4142 "or inside \"limit_except\" block");
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
4143 return NGX_CONF_ERROR;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
4144 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
4145
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4146 plcf->location.len = 0;
555
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
4147 }
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
4148
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4149 plcf->url = *url;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4150
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4151 return NGX_CONF_OK;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4152 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4153
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4154
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4155 static char *
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4156 ngx_http_proxy_redirect(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4157 {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4158 ngx_http_proxy_loc_conf_t *plcf = conf;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4159
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4160 u_char *p;
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4161 ngx_str_t *value;
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
4162 ngx_http_proxy_rewrite_t *pr;
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4163 ngx_http_compile_complex_value_t ccv;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4164
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4165 if (plcf->redirect == 0) {
7714
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4166 return "is duplicate";
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4167 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4168
4422
b1a9d725ab69 Fixed proxy_redirect off inheritance.
Valentin Bartenev <vbart@nginx.com>
parents: 4412
diff changeset
4169 plcf->redirect = 1;
b1a9d725ab69 Fixed proxy_redirect off inheritance.
Valentin Bartenev <vbart@nginx.com>
parents: 4412
diff changeset
4170
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4171 value = cf->args->elts;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4172
2784
c2230102df6f *) check a proxy_redirect single parameter
Igor Sysoev <igor@sysoev.ru>
parents: 2753
diff changeset
4173 if (cf->args->nelts == 2) {
c2230102df6f *) check a proxy_redirect single parameter
Igor Sysoev <igor@sysoev.ru>
parents: 2753
diff changeset
4174 if (ngx_strcmp(value[1].data, "off") == 0) {
7714
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4175
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4176 if (plcf->redirects) {
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4177 return "is duplicate";
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4178 }
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4179
2784
c2230102df6f *) check a proxy_redirect single parameter
Igor Sysoev <igor@sysoev.ru>
parents: 2753
diff changeset
4180 plcf->redirect = 0;
c2230102df6f *) check a proxy_redirect single parameter
Igor Sysoev <igor@sysoev.ru>
parents: 2753
diff changeset
4181 return NGX_CONF_OK;
c2230102df6f *) check a proxy_redirect single parameter
Igor Sysoev <igor@sysoev.ru>
parents: 2753
diff changeset
4182 }
c2230102df6f *) check a proxy_redirect single parameter
Igor Sysoev <igor@sysoev.ru>
parents: 2753
diff changeset
4183
c2230102df6f *) check a proxy_redirect single parameter
Igor Sysoev <igor@sysoev.ru>
parents: 2753
diff changeset
4184 if (ngx_strcmp(value[1].data, "default") != 0) {
c2230102df6f *) check a proxy_redirect single parameter
Igor Sysoev <igor@sysoev.ru>
parents: 2753
diff changeset
4185 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
c2230102df6f *) check a proxy_redirect single parameter
Igor Sysoev <igor@sysoev.ru>
parents: 2753
diff changeset
4186 "invalid parameter \"%V\"", &value[1]);
c2230102df6f *) check a proxy_redirect single parameter
Igor Sysoev <igor@sysoev.ru>
parents: 2753
diff changeset
4187 return NGX_CONF_ERROR;
c2230102df6f *) check a proxy_redirect single parameter
Igor Sysoev <igor@sysoev.ru>
parents: 2753
diff changeset
4188 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4189 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4190
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4191 if (plcf->redirects == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4192 plcf->redirects = ngx_array_create(cf->pool, 1,
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
4193 sizeof(ngx_http_proxy_rewrite_t));
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4194 if (plcf->redirects == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4195 return NGX_CONF_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4196 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4197 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4198
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4199 pr = ngx_array_push(plcf->redirects);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4200 if (pr == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4201 return NGX_CONF_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4202 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4203
7714
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4204 if (cf->args->nelts == 2
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4205 && ngx_strcmp(value[1].data, "default") == 0)
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4206 {
3471
d8c56e7851b8 "proxy_redirect default" may not be used if a proxy_pass uses variables
Igor Sysoev <igor@sysoev.ru>
parents: 3470
diff changeset
4207 if (plcf->proxy_lengths) {
d8c56e7851b8 "proxy_redirect default" may not be used if a proxy_pass uses variables
Igor Sysoev <igor@sysoev.ru>
parents: 3470
diff changeset
4208 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
4209 "\"proxy_redirect default\" cannot be used "
3471
d8c56e7851b8 "proxy_redirect default" may not be used if a proxy_pass uses variables
Igor Sysoev <igor@sysoev.ru>
parents: 3470
diff changeset
4210 "with \"proxy_pass\" directive with variables");
d8c56e7851b8 "proxy_redirect default" may not be used if a proxy_pass uses variables
Igor Sysoev <igor@sysoev.ru>
parents: 3470
diff changeset
4211 return NGX_CONF_ERROR;
d8c56e7851b8 "proxy_redirect default" may not be used if a proxy_pass uses variables
Igor Sysoev <igor@sysoev.ru>
parents: 3470
diff changeset
4212 }
d8c56e7851b8 "proxy_redirect default" may not be used if a proxy_pass uses variables
Igor Sysoev <igor@sysoev.ru>
parents: 3470
diff changeset
4213
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4214 if (plcf->url.data == NULL) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4215 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
4216 "\"proxy_redirect default\" should be placed "
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4217 "after the \"proxy_pass\" directive");
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4218 return NGX_CONF_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4219 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4220
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
4221 pr->handler = ngx_http_proxy_rewrite_complex_handler;
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
4222
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
4223 ngx_memzero(&pr->pattern.complex, sizeof(ngx_http_complex_value_t));
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4224
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4225 ngx_memzero(&pr->replacement, sizeof(ngx_http_complex_value_t));
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4226
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4227 if (plcf->vars.uri.len) {
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
4228 pr->pattern.complex.value = plcf->url;
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4229 pr->replacement.value = plcf->location;
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
4230
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
4231 } else {
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
4232 pr->pattern.complex.value.len = plcf->url.len + sizeof("/") - 1;
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
4233
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
4234 p = ngx_pnalloc(cf->pool, pr->pattern.complex.value.len);
3862
f4c49c9e4bb5 always test proxy_redirect with slash, this fixes a case when nginx uses
Igor Sysoev <igor@sysoev.ru>
parents: 3734
diff changeset
4235 if (p == NULL) {
f4c49c9e4bb5 always test proxy_redirect with slash, this fixes a case when nginx uses
Igor Sysoev <igor@sysoev.ru>
parents: 3734
diff changeset
4236 return NGX_CONF_ERROR;
f4c49c9e4bb5 always test proxy_redirect with slash, this fixes a case when nginx uses
Igor Sysoev <igor@sysoev.ru>
parents: 3734
diff changeset
4237 }
f4c49c9e4bb5 always test proxy_redirect with slash, this fixes a case when nginx uses
Igor Sysoev <igor@sysoev.ru>
parents: 3734
diff changeset
4238
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
4239 pr->pattern.complex.value.data = p;
3862
f4c49c9e4bb5 always test proxy_redirect with slash, this fixes a case when nginx uses
Igor Sysoev <igor@sysoev.ru>
parents: 3734
diff changeset
4240
f4c49c9e4bb5 always test proxy_redirect with slash, this fixes a case when nginx uses
Igor Sysoev <igor@sysoev.ru>
parents: 3734
diff changeset
4241 p = ngx_cpymem(p, plcf->url.data, plcf->url.len);
f4c49c9e4bb5 always test proxy_redirect with slash, this fixes a case when nginx uses
Igor Sysoev <igor@sysoev.ru>
parents: 3734
diff changeset
4242 *p = '/';
f4c49c9e4bb5 always test proxy_redirect with slash, this fixes a case when nginx uses
Igor Sysoev <igor@sysoev.ru>
parents: 3734
diff changeset
4243
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4244 ngx_str_set(&pr->replacement.value, "/");
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
4245 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4246
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4247 return NGX_CONF_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4248 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4249
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4250
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4251 if (value[1].data[0] == '~') {
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4252 value[1].len--;
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4253 value[1].data++;
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4254
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4255 if (value[1].data[0] == '*') {
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4256 value[1].len--;
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4257 value[1].data++;
4463
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4258
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4259 if (ngx_http_proxy_rewrite_regex(cf, pr, &value[1], 1) != NGX_OK) {
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4260 return NGX_CONF_ERROR;
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4261 }
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4262
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4263 } else {
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4264 if (ngx_http_proxy_rewrite_regex(cf, pr, &value[1], 0) != NGX_OK) {
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4265 return NGX_CONF_ERROR;
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4266 }
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4267 }
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4268
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4269 } else {
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4270
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4271 ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4272
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4273 ccv.cf = cf;
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4274 ccv.value = &value[1];
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
4275 ccv.complex_value = &pr->pattern.complex;
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4276
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4277 if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4278 return NGX_CONF_ERROR;
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4279 }
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4280
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
4281 pr->handler = ngx_http_proxy_rewrite_complex_handler;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4282 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4283
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4284
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4285 ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4286
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4287 ccv.cf = cf;
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4288 ccv.value = &value[2];
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4289 ccv.complex_value = &pr->replacement;
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4290
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4291 if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4292 return NGX_CONF_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4293 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4294
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4295 return NGX_CONF_OK;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4296 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4297
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4298
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4299 static char *
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4300 ngx_http_proxy_cookie_domain(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4301 {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4302 ngx_http_proxy_loc_conf_t *plcf = conf;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4303
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4304 ngx_str_t *value;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4305 ngx_http_proxy_rewrite_t *pr;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4306 ngx_http_compile_complex_value_t ccv;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4307
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4308 if (plcf->cookie_domains == NULL) {
7714
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4309 return "is duplicate";
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4310 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4311
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4312 value = cf->args->elts;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4313
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4314 if (cf->args->nelts == 2) {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4315
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4316 if (ngx_strcmp(value[1].data, "off") == 0) {
7714
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4317
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4318 if (plcf->cookie_domains != NGX_CONF_UNSET_PTR) {
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4319 return "is duplicate";
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4320 }
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4321
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4322 plcf->cookie_domains = NULL;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4323 return NGX_CONF_OK;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4324 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4325
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4326 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4327 "invalid parameter \"%V\"", &value[1]);
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4328 return NGX_CONF_ERROR;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4329 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4330
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4331 if (plcf->cookie_domains == NGX_CONF_UNSET_PTR) {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4332 plcf->cookie_domains = ngx_array_create(cf->pool, 1,
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4333 sizeof(ngx_http_proxy_rewrite_t));
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4334 if (plcf->cookie_domains == NULL) {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4335 return NGX_CONF_ERROR;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4336 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4337 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4338
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4339 pr = ngx_array_push(plcf->cookie_domains);
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4340 if (pr == NULL) {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4341 return NGX_CONF_ERROR;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4342 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4343
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4344 if (value[1].data[0] == '~') {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4345 value[1].len--;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4346 value[1].data++;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4347
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4348 if (ngx_http_proxy_rewrite_regex(cf, pr, &value[1], 1) != NGX_OK) {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4349 return NGX_CONF_ERROR;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4350 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4351
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4352 } else {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4353
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4354 if (value[1].data[0] == '.') {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4355 value[1].len--;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4356 value[1].data++;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4357 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4358
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4359 ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4360
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4361 ccv.cf = cf;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4362 ccv.value = &value[1];
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4363 ccv.complex_value = &pr->pattern.complex;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4364
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4365 if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4366 return NGX_CONF_ERROR;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4367 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4368
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4369 pr->handler = ngx_http_proxy_rewrite_domain_handler;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4370
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4371 if (value[2].data[0] == '.') {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4372 value[2].len--;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4373 value[2].data++;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4374 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4375 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4376
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4377 ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4378
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4379 ccv.cf = cf;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4380 ccv.value = &value[2];
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4381 ccv.complex_value = &pr->replacement;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4382
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4383 if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4384 return NGX_CONF_ERROR;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4385 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4386
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4387 return NGX_CONF_OK;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4388 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4389
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4390
4466
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4391 static char *
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4392 ngx_http_proxy_cookie_path(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4393 {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4394 ngx_http_proxy_loc_conf_t *plcf = conf;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4395
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4396 ngx_str_t *value;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4397 ngx_http_proxy_rewrite_t *pr;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4398 ngx_http_compile_complex_value_t ccv;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4399
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4400 if (plcf->cookie_paths == NULL) {
7714
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4401 return "is duplicate";
4466
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4402 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4403
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4404 value = cf->args->elts;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4405
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4406 if (cf->args->nelts == 2) {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4407
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4408 if (ngx_strcmp(value[1].data, "off") == 0) {
7714
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4409
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4410 if (plcf->cookie_paths != NGX_CONF_UNSET_PTR) {
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4411 return "is duplicate";
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4412 }
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4413
4466
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4414 plcf->cookie_paths = NULL;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4415 return NGX_CONF_OK;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4416 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4417
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4418 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4419 "invalid parameter \"%V\"", &value[1]);
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4420 return NGX_CONF_ERROR;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4421 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4422
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4423 if (plcf->cookie_paths == NGX_CONF_UNSET_PTR) {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4424 plcf->cookie_paths = ngx_array_create(cf->pool, 1,
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4425 sizeof(ngx_http_proxy_rewrite_t));
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4426 if (plcf->cookie_paths == NULL) {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4427 return NGX_CONF_ERROR;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4428 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4429 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4430
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4431 pr = ngx_array_push(plcf->cookie_paths);
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4432 if (pr == NULL) {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4433 return NGX_CONF_ERROR;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4434 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4435
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4436 if (value[1].data[0] == '~') {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4437 value[1].len--;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4438 value[1].data++;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4439
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4440 if (value[1].data[0] == '*') {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4441 value[1].len--;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4442 value[1].data++;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4443
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4444 if (ngx_http_proxy_rewrite_regex(cf, pr, &value[1], 1) != NGX_OK) {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4445 return NGX_CONF_ERROR;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4446 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4447
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4448 } else {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4449 if (ngx_http_proxy_rewrite_regex(cf, pr, &value[1], 0) != NGX_OK) {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4450 return NGX_CONF_ERROR;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4451 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4452 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4453
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4454 } else {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4455
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4456 ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4457
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4458 ccv.cf = cf;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4459 ccv.value = &value[1];
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4460 ccv.complex_value = &pr->pattern.complex;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4461
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4462 if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4463 return NGX_CONF_ERROR;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4464 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4465
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4466 pr->handler = ngx_http_proxy_rewrite_complex_handler;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4467 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4468
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4469 ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4470
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4471 ccv.cf = cf;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4472 ccv.value = &value[2];
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4473 ccv.complex_value = &pr->replacement;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4474
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4475 if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4476 return NGX_CONF_ERROR;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4477 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4478
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4479 return NGX_CONF_OK;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4480 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4481
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4482
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4483 static char *
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4484 ngx_http_proxy_cookie_flags(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4485 {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4486 ngx_http_proxy_loc_conf_t *plcf = conf;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4487
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4488 ngx_str_t *value;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4489 ngx_uint_t i, m;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4490 ngx_conf_bitmask_t *mask;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4491 ngx_http_proxy_cookie_flags_t *pcf;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4492 ngx_http_compile_complex_value_t ccv;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4493 #if (NGX_PCRE)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4494 ngx_regex_compile_t rc;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4495 u_char errstr[NGX_MAX_CONF_ERRSTR];
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4496 #endif
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4497
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4498 if (plcf->cookie_flags == NULL) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4499 return "is duplicate";
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4500 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4501
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4502 value = cf->args->elts;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4503
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4504 if (cf->args->nelts == 2) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4505
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4506 if (ngx_strcmp(value[1].data, "off") == 0) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4507
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4508 if (plcf->cookie_flags != NGX_CONF_UNSET_PTR) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4509 return "is duplicate";
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4510 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4511
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4512 plcf->cookie_flags = NULL;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4513 return NGX_CONF_OK;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4514 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4515
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4516 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4517 "invalid parameter \"%V\"", &value[1]);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4518 return NGX_CONF_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4519 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4520
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4521 if (plcf->cookie_flags == NGX_CONF_UNSET_PTR) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4522 plcf->cookie_flags = ngx_array_create(cf->pool, 1,
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4523 sizeof(ngx_http_proxy_cookie_flags_t));
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4524 if (plcf->cookie_flags == NULL) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4525 return NGX_CONF_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4526 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4527 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4528
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4529 pcf = ngx_array_push(plcf->cookie_flags);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4530 if (pcf == NULL) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4531 return NGX_CONF_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4532 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4533
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4534 pcf->regex = 0;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4535
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4536 if (value[1].data[0] == '~') {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4537 value[1].len--;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4538 value[1].data++;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4539
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4540 #if (NGX_PCRE)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4541 ngx_memzero(&rc, sizeof(ngx_regex_compile_t));
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4542
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4543 rc.pattern = value[1];
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4544 rc.err.len = NGX_MAX_CONF_ERRSTR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4545 rc.err.data = errstr;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4546 rc.options = NGX_REGEX_CASELESS;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4547
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4548 pcf->cookie.regex = ngx_http_regex_compile(cf, &rc);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4549 if (pcf->cookie.regex == NULL) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4550 return NGX_CONF_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4551 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4552
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4553 pcf->regex = 1;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4554 #else
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4555 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4556 "using regex \"%V\" requires PCRE library",
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4557 &value[1]);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4558 return NGX_CONF_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4559 #endif
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4560
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4561 } else {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4562
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4563 ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4564
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4565 ccv.cf = cf;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4566 ccv.value = &value[1];
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4567 ccv.complex_value = &pcf->cookie.complex;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4568
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4569 if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4570 return NGX_CONF_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4571 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4572 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4573
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4574 mask = ngx_http_proxy_cookie_flags_masks;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4575 pcf->flags = 0;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4576
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4577 for (i = 2; i < cf->args->nelts; i++) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4578 for (m = 0; mask[m].name.len != 0; m++) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4579
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4580 if (mask[m].name.len != value[i].len
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4581 || ngx_strcasecmp(mask[m].name.data, value[i].data) != 0)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4582 {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4583 continue;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4584 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4585
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4586 if (pcf->flags & mask[m].mask) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4587 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4588 "duplicate parameter \"%V\"", &value[i]);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4589 return NGX_CONF_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4590 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4591
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4592 pcf->flags |= mask[m].mask;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4593
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4594 break;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4595 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4596
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4597 if (mask[m].name.len == 0) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4598 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4599 "invalid parameter \"%V\"", &value[i]);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4600 return NGX_CONF_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4601 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4602 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4603
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4604 return NGX_CONF_OK;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4605 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4606
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4607
4463
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4608 static ngx_int_t
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4609 ngx_http_proxy_rewrite_regex(ngx_conf_t *cf, ngx_http_proxy_rewrite_t *pr,
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4610 ngx_str_t *regex, ngx_uint_t caseless)
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4611 {
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4612 #if (NGX_PCRE)
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4613 u_char errstr[NGX_MAX_CONF_ERRSTR];
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4614 ngx_regex_compile_t rc;
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4615
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4616 ngx_memzero(&rc, sizeof(ngx_regex_compile_t));
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4617
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4618 rc.pattern = *regex;
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4619 rc.err.len = NGX_MAX_CONF_ERRSTR;
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4620 rc.err.data = errstr;
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4621
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4622 if (caseless) {
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4623 rc.options = NGX_REGEX_CASELESS;
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4624 }
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4625
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4626 pr->pattern.regex = ngx_http_regex_compile(cf, &rc);
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4627 if (pr->pattern.regex == NULL) {
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4628 return NGX_ERROR;
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4629 }
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4630
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4631 pr->handler = ngx_http_proxy_rewrite_regex_handler;
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4632
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4633 return NGX_OK;
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4634
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4635 #else
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4636
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4637 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4638 "using regex \"%V\" requires PCRE library", regex);
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4639 return NGX_ERROR;
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4640
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4641 #endif
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4642 }
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4643
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4644
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4645 static char *
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4646 ngx_http_proxy_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
4647 {
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4648 ngx_http_proxy_loc_conf_t *plcf = conf;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4649
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4650 ngx_str_t *value;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4651 ngx_http_script_compile_t sc;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4652
5947
d9025ea1f5a5 Upstream: simplified proxy_store and friends configuration code.
Valentin Bartenev <vbart@nginx.com>
parents: 5940
diff changeset
4653 if (plcf->upstream.store != NGX_CONF_UNSET) {
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4654 return "is duplicate";
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4655 }
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4656
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4657 value = cf->args->elts;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4658
2895
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
4659 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
4660 plcf->upstream.store = 0;
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4661 return NGX_CONF_OK;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4662 }
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4663
2895
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
4664 #if (NGX_HTTP_CACHE)
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
4665 if (plcf->upstream.cache > 0) {
2895
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
4666 return "is incompatible with \"proxy_cache\"";
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
4667 }
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
4668 #endif
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
4669
5947
d9025ea1f5a5 Upstream: simplified proxy_store and friends configuration code.
Valentin Bartenev <vbart@nginx.com>
parents: 5940
diff changeset
4670 plcf->upstream.store = 1;
d9025ea1f5a5 Upstream: simplified proxy_store and friends configuration code.
Valentin Bartenev <vbart@nginx.com>
parents: 5940
diff changeset
4671
2895
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
4672 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
4673 return NGX_CONF_OK;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4674 }
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4675
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4676 /* include the terminating '\0' into script */
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4677 value[1].len++;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4678
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4679 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
4680
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4681 sc.cf = cf;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4682 sc.source = &value[1];
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4683 sc.lengths = &plcf->upstream.store_lengths;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4684 sc.values = &plcf->upstream.store_values;
1563
022ec9420f80 style fix: remove double semicolons
Igor Sysoev <igor@sysoev.ru>
parents: 1488
diff changeset
4685 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
4686 sc.complete_lengths = 1;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4687 sc.complete_values = 1;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4688
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4689 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
4690 return NGX_CONF_ERROR;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4691 }
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4692
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4693 return NGX_CONF_OK;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4694 }
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4695
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4696
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4697 #if (NGX_HTTP_CACHE)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4698
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4699 static char *
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4700 ngx_http_proxy_cache(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4701 {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4702 ngx_http_proxy_loc_conf_t *plcf = conf;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4703
5951
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4704 ngx_str_t *value;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4705 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
4706 ngx_http_compile_complex_value_t ccv;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4707
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4708 value = cf->args->elts;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4709
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
4710 if (plcf->upstream.cache != NGX_CONF_UNSET) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4711 return "is duplicate";
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4712 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4713
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4714 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
4715 plcf->upstream.cache = 0;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4716 return NGX_CONF_OK;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4717 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4718
5947
d9025ea1f5a5 Upstream: simplified proxy_store and friends configuration code.
Valentin Bartenev <vbart@nginx.com>
parents: 5940
diff changeset
4719 if (plcf->upstream.store > 0) {
2895
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
4720 return "is incompatible with \"proxy_store\"";
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
4721 }
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
4722
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
4723 plcf->upstream.cache = 1;
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
4724
5951
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4725 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
4726
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4727 ccv.cf = cf;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4728 ccv.value = &value[1];
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4729 ccv.complex_value = &cv;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4730
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4731 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
4732 return NGX_CONF_ERROR;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4733 }
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4734
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4735 if (cv.lengths != NULL) {
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4736
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4737 plcf->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
4738 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
4739 if (plcf->upstream.cache_value == NULL) {
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4740 return NGX_CONF_ERROR;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4741 }
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4742
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4743 *plcf->upstream.cache_value = cv;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4744
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4745 return NGX_CONF_OK;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4746 }
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4747
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
4748 plcf->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
4749 &ngx_http_proxy_module);
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
4750 if (plcf->upstream.cache_zone == NULL) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4751 return NGX_CONF_ERROR;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4752 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4753
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4754 return NGX_CONF_OK;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4755 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4756
2672
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4757
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4758 static char *
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4759 ngx_http_proxy_cache_key(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4760 {
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4761 ngx_http_proxy_loc_conf_t *plcf = conf;
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4762
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4763 ngx_str_t *value;
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4764 ngx_http_compile_complex_value_t ccv;
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4765
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4766 value = cf->args->elts;
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4767
4947
4251e72b8bb4 Allow the complex value to be defined as an empty string.
Ruslan Ermilov <ru@nginx.com>
parents: 4927
diff changeset
4768 if (plcf->cache_key.value.data) {
2672
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4769 return "is duplicate";
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4770 }
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4771
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4772 ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4773
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4774 ccv.cf = cf;
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4775 ccv.value = &value[1];
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4776 ccv.complex_value = &plcf->cache_key;
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4777
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4778 if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4779 return NGX_CONF_ERROR;
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4780 }
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4781
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4782 return NGX_CONF_OK;
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4783 }
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4784
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4785 #endif
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4786
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4787
5900
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4788 #if (NGX_HTTP_SSL)
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4789
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4790 static char *
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4791 ngx_http_proxy_ssl_password_file(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4792 {
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4793 ngx_http_proxy_loc_conf_t *plcf = conf;
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4794
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4795 ngx_str_t *value;
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4796
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4797 if (plcf->ssl_passwords != NGX_CONF_UNSET_PTR) {
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4798 return "is duplicate";
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4799 }
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4800
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4801 value = cf->args->elts;
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4802
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4803 plcf->ssl_passwords = ngx_ssl_read_password_file(cf, &value[1]);
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4804
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4805 if (plcf->ssl_passwords == NULL) {
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4806 return NGX_CONF_ERROR;
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4807 }
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4808
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4809 return NGX_CONF_OK;
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4810 }
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4811
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4812 #endif
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4813
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4814
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4815 static char *
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4816 ngx_http_proxy_lowat_check(ngx_conf_t *cf, void *post, void *data)
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4817 {
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4818 #if (NGX_FREEBSD)
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4819 ssize_t *np = data;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4820
673
b80f94fa2197 nginx-0.3.58-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
4821 if ((u_long) *np >= ngx_freebsd_net_inet_tcp_sendspace) {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4822 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4823 "\"proxy_send_lowat\" must be less than %d "
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4824 "(sysctl net.inet.tcp.sendspace)",
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4825 ngx_freebsd_net_inet_tcp_sendspace);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4826
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4827 return NGX_CONF_ERROR;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4828 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4829
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4830 #elif !(NGX_HAVE_SO_SNDLOWAT)
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4831 ssize_t *np = data;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4832
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4833 ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4834 "\"proxy_send_lowat\" is not supported, ignored");
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4835
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4836 *np = 0;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4837
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4838 #endif
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4839
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4840 return NGX_CONF_OK;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4841 }
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 843
diff changeset
4842
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 843
diff changeset
4843
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4844 #if (NGX_HTTP_SSL)
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4845
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4846 static ngx_int_t
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4847 ngx_http_proxy_set_ssl(ngx_conf_t *cf, ngx_http_proxy_loc_conf_t *plcf)
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4848 {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4849 ngx_pool_cleanup_t *cln;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4850
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4851 plcf->upstream.ssl = ngx_pcalloc(cf->pool, sizeof(ngx_ssl_t));
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4852 if (plcf->upstream.ssl == NULL) {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4853 return NGX_ERROR;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4854 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4855
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4856 plcf->upstream.ssl->log = cf->log;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4857
5385
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
4858 if (ngx_ssl_create(plcf->upstream.ssl, plcf->ssl_protocols, NULL)
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4859 != NGX_OK)
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4860 {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4861 return NGX_ERROR;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4862 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4863
5659
3fb6615bb87f Upstream: plugged potential memory leak on reload.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5575
diff changeset
4864 cln = ngx_pool_cleanup_add(cf->pool, 0);
3fb6615bb87f Upstream: plugged potential memory leak on reload.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5575
diff changeset
4865 if (cln == NULL) {
7473
8981dbb12254 SSL: fixed potential leak on memory allocation errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7371
diff changeset
4866 ngx_ssl_cleanup_ctx(plcf->upstream.ssl);
5659
3fb6615bb87f Upstream: plugged potential memory leak on reload.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5575
diff changeset
4867 return NGX_ERROR;
3fb6615bb87f Upstream: plugged potential memory leak on reload.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5575
diff changeset
4868 }
3fb6615bb87f Upstream: plugged potential memory leak on reload.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5575
diff changeset
4869
3fb6615bb87f Upstream: plugged potential memory leak on reload.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5575
diff changeset
4870 cln->handler = ngx_ssl_cleanup_ctx;
3fb6615bb87f Upstream: plugged potential memory leak on reload.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5575
diff changeset
4871 cln->data = plcf->upstream.ssl;
3fb6615bb87f Upstream: plugged potential memory leak on reload.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5575
diff changeset
4872
5900
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4873 if (plcf->ssl_certificate.len) {
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4874
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4875 if (plcf->ssl_certificate_key.len == 0) {
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4876 ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4877 "no \"proxy_ssl_certificate_key\" is defined "
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4878 "for certificate \"%V\"", &plcf->ssl_certificate);
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4879 return NGX_ERROR;
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4880 }
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4881
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4882 if (ngx_ssl_certificate(cf, plcf->upstream.ssl, &plcf->ssl_certificate,
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4883 &plcf->ssl_certificate_key, plcf->ssl_passwords)
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4884 != NGX_OK)
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4885 {
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4886 return NGX_ERROR;
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4887 }
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4888 }
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4889
6591
04d8d1f85649 SSL: ngx_ssl_ciphers() to set list of ciphers.
Tim Taubert <tim@timtaubert.de>
parents: 6530
diff changeset
4890 if (ngx_ssl_ciphers(cf, plcf->upstream.ssl, &plcf->ssl_ciphers, 0)
04d8d1f85649 SSL: ngx_ssl_ciphers() to set list of ciphers.
Tim Taubert <tim@timtaubert.de>
parents: 6530
diff changeset
4891 != NGX_OK)
5390
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
4892 {
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
4893 return NGX_ERROR;
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
4894 }
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
4895
5661
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4896 if (plcf->upstream.ssl_verify) {
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4897 if (plcf->ssl_trusted_certificate.len == 0) {
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4898 ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4899 "no proxy_ssl_trusted_certificate for proxy_ssl_verify");
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4900 return NGX_ERROR;
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4901 }
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4902
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4903 if (ngx_ssl_trusted_certificate(cf, plcf->upstream.ssl,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4904 &plcf->ssl_trusted_certificate,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4905 plcf->ssl_verify_depth)
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4906 != NGX_OK)
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4907 {
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4908 return NGX_ERROR;
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4909 }
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4910
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4911 if (ngx_ssl_crl(cf, plcf->upstream.ssl, &plcf->ssl_crl) != NGX_OK) {
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4912 return NGX_ERROR;
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4913 }
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4914 }
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4915
7320
696df3ac27ac SSL: save sessions for upstream peers using a callback function.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7271
diff changeset
4916 if (ngx_ssl_client_session_cache(cf, plcf->upstream.ssl,
696df3ac27ac SSL: save sessions for upstream peers using a callback function.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7271
diff changeset
4917 plcf->upstream.ssl_session_reuse)
696df3ac27ac SSL: save sessions for upstream peers using a callback function.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7271
diff changeset
4918 != NGX_OK)
696df3ac27ac SSL: save sessions for upstream peers using a callback function.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7271
diff changeset
4919 {
696df3ac27ac SSL: save sessions for upstream peers using a callback function.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7271
diff changeset
4920 return NGX_ERROR;
696df3ac27ac SSL: save sessions for upstream peers using a callback function.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7271
diff changeset
4921 }
696df3ac27ac SSL: save sessions for upstream peers using a callback function.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7271
diff changeset
4922
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4923 return NGX_OK;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4924 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4925
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4926 #endif
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4927
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4928
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4929 static void
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4930 ngx_http_proxy_set_vars(ngx_url_t *u, ngx_http_proxy_vars_t *v)
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4931 {
2203
8e5bf1bc87e2 *) refactor ngx_parse_inet_url()
Igor Sysoev <igor@sysoev.ru>
parents: 2184
diff changeset
4932 if (u->family != AF_UNIX) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4933
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4934 if (u->no_port || u->port == u->default_port) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4935
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4936 v->host_header = u->host;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4937
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4938 if (u->default_port == 80) {
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3477
diff changeset
4939 ngx_str_set(&v->port, "80");
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4940
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4941 } else {
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3477
diff changeset
4942 ngx_str_set(&v->port, "443");
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4943 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4944
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4945 } else {
1671
8075179cae21 ngx_parse_url() saves port text, this allows to use it in proxy host header
Igor Sysoev <igor@sysoev.ru>
parents: 1667
diff changeset
4946 v->host_header.len = u->host.len + 1 + u->port_text.len;
8075179cae21 ngx_parse_url() saves port text, this allows to use it in proxy host header
Igor Sysoev <igor@sysoev.ru>
parents: 1667
diff changeset
4947 v->host_header.data = u->host.data;
8075179cae21 ngx_parse_url() saves port text, this allows to use it in proxy host header
Igor Sysoev <igor@sysoev.ru>
parents: 1667
diff changeset
4948 v->port = u->port_text;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4949 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4950
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4951 v->key_start.len += v->host_header.len;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4952
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4953 } else {
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3477
diff changeset
4954 ngx_str_set(&v->host_header, "localhost");
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3477
diff changeset
4955 ngx_str_null(&v->port);
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4956 v->key_start.len += sizeof("unix:") - 1 + u->host.len + 1;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4957 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4958
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4959 v->uri = u->uri;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4960 }