annotate src/http/modules/ngx_http_proxy_module.c @ 7881:52338ddf9e2f

Disabled spaces in URIs (ticket #196). From now on, requests with spaces in URIs are immediately rejected rather than allowed. Spaces were allowed in 31e9677b15a1 (0.8.41) to handle bad clients. It is believed that now this behaviour causes more harm than good.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 28 Jun 2021 18:01:13 +0300
parents 3ab8e1e2f0f7
children b87b7092cedb
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
7786
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
59 ngx_array_t flags_values;
7716
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;
7730
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
127 ngx_array_t *ssl_conf_commands;
5385
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
128 #endif
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
129 } ngx_http_proxy_loc_conf_t;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
130
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
131
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
132 typedef struct {
3627
9061fdb2ed8c use ngx_http_parse_status_line()
Igor Sysoev <igor@sysoev.ru>
parents: 3615
diff changeset
133 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
134 ngx_http_chunked_t chunked;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
135 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
136 off_t internal_body_length;
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
137
6051
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
138 ngx_chain_t *free;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
139 ngx_chain_t *busy;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
140
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
141 unsigned head:1;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
142 unsigned internal_chunked:1;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
143 unsigned header_sent:1;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
144 } ngx_http_proxy_ctx_t;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
145
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
146
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
147 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
148 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
149 #if (NGX_HTTP_CACHE)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
150 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
151 #endif
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
152 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
153 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
154 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
155 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
156 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
157 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
158 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
159 ngx_buf_t *buf);
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_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
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_non_buffered_copy_filter(void *data,
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
163 ssize_t bytes);
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_chunked_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);
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
166 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
167 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
168 ngx_int_t rc);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
169
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
170 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
171 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
172 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
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
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
175 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
176 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
177 static ngx_int_t
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
178 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
179 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
180 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
181 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
182 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
183 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
184 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
185 ngx_table_elt_t *h);
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
186 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
187 ngx_array_t *attrs);
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
188 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
189 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
190 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
191 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
192 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
193 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
194 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
195 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
196
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
197 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
198 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
199 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
200 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
201 void *parent, void *child);
5907
195561ef367f Upstream: moved header initializations to separate functions.
Roman Arutyunyan <arut@nginx.com>
parents: 5905
diff changeset
202 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
203 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
204 ngx_keyval_t *default_headers);
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
205
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
206 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
207 void *conf);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
208 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
209 void *conf);
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
210 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
211 void *conf);
4466
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
212 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
213 void *conf);
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
214 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
215 void *conf);
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
216 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
217 void *conf);
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
218 #if (NGX_HTTP_CACHE)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
219 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
220 void *conf);
2672
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
221 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
222 void *conf);
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
223 #endif
5900
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
224 #if (NGX_HTTP_SSL)
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
225 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
226 ngx_command_t *cmd, void *conf);
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
227 #endif
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
228
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
229 static char *ngx_http_proxy_lowat_check(ngx_conf_t *cf, void *post, void *data);
7730
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
230 #if (NGX_HTTP_SSL)
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
231 static char *ngx_http_proxy_ssl_conf_command_check(ngx_conf_t *cf, void *post,
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
232 void *data);
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
233 #endif
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
234
4463
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
235 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
236 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
237
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
238 #if (NGX_HTTP_SSL)
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
239 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
240 ngx_http_proxy_loc_conf_t *plcf);
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
241 #endif
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
242 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
243
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
244
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
245 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
246 { ngx_http_proxy_lowat_check };
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
247
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
248
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
249 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
250 { ngx_string("error"), NGX_HTTP_UPSTREAM_FT_ERROR },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
251 { ngx_string("timeout"), NGX_HTTP_UPSTREAM_FT_TIMEOUT },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
252 { 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
253 { 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
254 { 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
255 { 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
256 { 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
257 { 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
258 { 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
259 { 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
260 { 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
261 { 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
262 { ngx_string("off"), NGX_HTTP_UPSTREAM_FT_OFF },
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
263 { ngx_null_string, 0 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
264 };
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
265
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
266
5385
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
267 #if (NGX_HTTP_SSL)
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
268
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
269 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
270 { ngx_string("SSLv2"), NGX_SSL_SSLv2 },
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
271 { ngx_string("SSLv3"), NGX_SSL_SSLv3 },
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
272 { ngx_string("TLSv1"), NGX_SSL_TLSv1 },
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
273 { 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
274 { 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
275 { 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
276 { ngx_null_string, 0 }
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
277 };
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
278
7730
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
279 static ngx_conf_post_t ngx_http_proxy_ssl_conf_command_post =
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
280 { ngx_http_proxy_ssl_conf_command_check };
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
281
5385
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
282 #endif
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
283
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
284
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
285 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
286 { 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
287 { 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
288 { ngx_null_string, 0 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
289 };
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
290
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
291
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
292 ngx_module_t ngx_http_proxy_module;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
293
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
294
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
295 static ngx_command_t ngx_http_proxy_commands[] = {
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
296
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
297 { ngx_string("proxy_pass"),
843
ebab9490204c allow proxy_pass inside limit_except
Igor Sysoev <igor@sysoev.ru>
parents: 812
diff changeset
298 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
299 ngx_http_proxy_pass,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
300 NGX_HTTP_LOC_CONF_OFFSET,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
301 0,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
302 NULL },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
303
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
304 { ngx_string("proxy_redirect"),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
305 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
306 ngx_http_proxy_redirect,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
307 NGX_HTTP_LOC_CONF_OFFSET,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
308 0,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
309 NULL },
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
310
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
311 { ngx_string("proxy_cookie_domain"),
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
312 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
313 ngx_http_proxy_cookie_domain,
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
314 NGX_HTTP_LOC_CONF_OFFSET,
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
315 0,
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
316 NULL },
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
317
4466
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
318 { ngx_string("proxy_cookie_path"),
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
319 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
320 ngx_http_proxy_cookie_path,
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
321 NGX_HTTP_LOC_CONF_OFFSET,
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
322 0,
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
323 NULL },
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
324
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
325 { ngx_string("proxy_cookie_flags"),
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
326 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
327 ngx_http_proxy_cookie_flags,
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
328 NGX_HTTP_LOC_CONF_OFFSET,
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
329 0,
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
330 NULL },
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
331
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1244
diff changeset
332 { ngx_string("proxy_store"),
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
333 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
334 ngx_http_proxy_store,
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
335 NGX_HTTP_LOC_CONF_OFFSET,
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
336 0,
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
337 NULL },
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
338
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
339 { ngx_string("proxy_store_access"),
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1244
diff changeset
340 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
341 ngx_conf_set_access_slot,
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1244
diff changeset
342 NGX_HTTP_LOC_CONF_OFFSET,
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
343 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
344 NULL },
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1244
diff changeset
345
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
346 { ngx_string("proxy_buffering"),
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
347 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
348 ngx_conf_set_flag_slot,
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
349 NGX_HTTP_LOC_CONF_OFFSET,
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
350 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
351 NULL },
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
352
6050
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
353 { ngx_string("proxy_request_buffering"),
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
354 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
355 ngx_conf_set_flag_slot,
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
356 NGX_HTTP_LOC_CONF_OFFSET,
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
357 offsetof(ngx_http_proxy_loc_conf_t, upstream.request_buffering),
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
358 NULL },
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
359
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
360 { ngx_string("proxy_ignore_client_abort"),
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
361 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
362 ngx_conf_set_flag_slot,
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
363 NGX_HTTP_LOC_CONF_OFFSET,
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
364 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
365 NULL },
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
366
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3006
diff changeset
367 { ngx_string("proxy_bind"),
6530
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6480
diff changeset
368 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
369 ngx_http_upstream_bind_set_slot,
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3006
diff changeset
370 NGX_HTTP_LOC_CONF_OFFSET,
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3006
diff changeset
371 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
372 NULL },
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3006
diff changeset
373
7371
8b68d50090e4 Upstream: proxy_socket_keepalive and friends.
Vladimir Homutov <vl@nginx.com>
parents: 7321
diff changeset
374 { ngx_string("proxy_socket_keepalive"),
8b68d50090e4 Upstream: proxy_socket_keepalive and friends.
Vladimir Homutov <vl@nginx.com>
parents: 7321
diff changeset
375 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
376 ngx_conf_set_flag_slot,
8b68d50090e4 Upstream: proxy_socket_keepalive and friends.
Vladimir Homutov <vl@nginx.com>
parents: 7321
diff changeset
377 NGX_HTTP_LOC_CONF_OFFSET,
8b68d50090e4 Upstream: proxy_socket_keepalive and friends.
Vladimir Homutov <vl@nginx.com>
parents: 7321
diff changeset
378 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
379 NULL },
8b68d50090e4 Upstream: proxy_socket_keepalive and friends.
Vladimir Homutov <vl@nginx.com>
parents: 7321
diff changeset
380
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
381 { ngx_string("proxy_connect_timeout"),
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
382 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
383 ngx_conf_set_msec_slot,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
384 NGX_HTTP_LOC_CONF_OFFSET,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
385 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
386 NULL },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
387
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
388 { ngx_string("proxy_send_timeout"),
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
389 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
390 ngx_conf_set_msec_slot,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
391 NGX_HTTP_LOC_CONF_OFFSET,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
392 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
393 NULL },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
394
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
395 { ngx_string("proxy_send_lowat"),
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
396 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
397 ngx_conf_set_size_slot,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
398 NGX_HTTP_LOC_CONF_OFFSET,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
399 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
400 &ngx_http_proxy_lowat_post },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
401
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
402 { ngx_string("proxy_intercept_errors"),
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
403 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
404 ngx_conf_set_flag_slot,
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
405 NGX_HTTP_LOC_CONF_OFFSET,
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
406 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
407 NULL },
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
408
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
409 { ngx_string("proxy_set_header"),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
410 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
411 ngx_conf_set_keyval_slot,
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
412 NGX_HTTP_LOC_CONF_OFFSET,
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
413 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
414 NULL },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
415
1180
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
416 { 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
417 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
418 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
419 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
420 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
421 NULL },
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
422
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
423 { 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
424 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
425 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
426 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
427 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
428 NULL },
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
429
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
430 { ngx_string("proxy_set_body"),
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
431 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
432 ngx_conf_set_str_slot,
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
433 NGX_HTTP_LOC_CONF_OFFSET,
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
434 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
435 NULL },
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
436
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
437 { ngx_string("proxy_method"),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
438 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
439 ngx_http_set_complex_value_slot,
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
440 NGX_HTTP_LOC_CONF_OFFSET,
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 555
diff changeset
441 offsetof(ngx_http_proxy_loc_conf_t, method),
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 555
diff changeset
442 NULL },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
443
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
444 { ngx_string("proxy_pass_request_headers"),
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
445 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
446 ngx_conf_set_flag_slot,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
447 NGX_HTTP_LOC_CONF_OFFSET,
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
448 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
449 NULL },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
450
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
451 { ngx_string("proxy_pass_request_body"),
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
452 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
453 ngx_conf_set_flag_slot,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
454 NGX_HTTP_LOC_CONF_OFFSET,
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
455 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
456 NULL },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
457
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
458 { ngx_string("proxy_buffer_size"),
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
459 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
460 ngx_conf_set_size_slot,
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
461 NGX_HTTP_LOC_CONF_OFFSET,
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
462 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
463 NULL },
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
464
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
465 { ngx_string("proxy_read_timeout"),
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
466 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
467 ngx_conf_set_msec_slot,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
468 NGX_HTTP_LOC_CONF_OFFSET,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
469 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
470 NULL },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
471
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
472 { ngx_string("proxy_buffers"),
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
473 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
474 ngx_conf_set_bufs_slot,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
475 NGX_HTTP_LOC_CONF_OFFSET,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
476 offsetof(ngx_http_proxy_loc_conf_t, upstream.bufs),
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
477 NULL },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
478
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
479 { ngx_string("proxy_busy_buffers_size"),
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
480 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
481 ngx_conf_set_size_slot,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
482 NGX_HTTP_LOC_CONF_OFFSET,
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
483 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
484 NULL },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
485
5874
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5832
diff changeset
486 { ngx_string("proxy_force_ranges"),
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5832
diff changeset
487 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
488 ngx_conf_set_flag_slot,
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5832
diff changeset
489 NGX_HTTP_LOC_CONF_OFFSET,
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5832
diff changeset
490 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
491 NULL },
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5832
diff changeset
492
5883
973ee2276300 Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5874
diff changeset
493 { ngx_string("proxy_limit_rate"),
973ee2276300 Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5874
diff changeset
494 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
495 ngx_conf_set_size_slot,
973ee2276300 Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5874
diff changeset
496 NGX_HTTP_LOC_CONF_OFFSET,
973ee2276300 Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5874
diff changeset
497 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
498 NULL },
973ee2276300 Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5874
diff changeset
499
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
500 #if (NGX_HTTP_CACHE)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
501
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
502 { ngx_string("proxy_cache"),
3729
4b773fc06336 fix directive type
Igor Sysoev <igor@sysoev.ru>
parents: 3700
diff changeset
503 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
504 ngx_http_proxy_cache,
2597
86967878cd76 fix the previous commit
Igor Sysoev <igor@sysoev.ru>
parents: 2596
diff changeset
505 NGX_HTTP_LOC_CONF_OFFSET,
2596
9a265cd00ba5 axe old definition fields
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
506 0,
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
507 NULL },
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
508
2672
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
509 { ngx_string("proxy_cache_key"),
3729
4b773fc06336 fix directive type
Igor Sysoev <igor@sysoev.ru>
parents: 3700
diff changeset
510 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
511 ngx_http_proxy_cache_key,
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
512 NGX_HTTP_LOC_CONF_OFFSET,
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
513 0,
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
514 NULL },
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
515
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
516 { ngx_string("proxy_cache_path"),
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
517 NGX_HTTP_MAIN_CONF|NGX_CONF_2MORE,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
518 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
519 NGX_HTTP_MAIN_CONF_OFFSET,
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
520 offsetof(ngx_http_proxy_main_conf_t, caches),
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
521 &ngx_http_proxy_module },
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
522
3699
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3692
diff changeset
523 { 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
524 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
525 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
526 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
527 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
528 NULL },
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3692
diff changeset
529
3526
62a4fd1e6e2c proxy_no_cache and fastcgi_no_cache
Igor Sysoev <igor@sysoev.ru>
parents: 3523
diff changeset
530 { ngx_string("proxy_no_cache"),
62a4fd1e6e2c proxy_no_cache and fastcgi_no_cache
Igor Sysoev <igor@sysoev.ru>
parents: 3523
diff changeset
531 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
532 ngx_http_set_predicate_slot,
3526
62a4fd1e6e2c proxy_no_cache and fastcgi_no_cache
Igor Sysoev <igor@sysoev.ru>
parents: 3523
diff changeset
533 NGX_HTTP_LOC_CONF_OFFSET,
62a4fd1e6e2c proxy_no_cache and fastcgi_no_cache
Igor Sysoev <igor@sysoev.ru>
parents: 3523
diff changeset
534 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
535 NULL },
62a4fd1e6e2c proxy_no_cache and fastcgi_no_cache
Igor Sysoev <igor@sysoev.ru>
parents: 3523
diff changeset
536
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
537 { ngx_string("proxy_cache_valid"),
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
538 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
539 ngx_http_file_cache_valid_set_slot,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
540 NGX_HTTP_LOC_CONF_OFFSET,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
541 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
542 NULL },
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
543
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
544 { ngx_string("proxy_cache_min_uses"),
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
545 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
546 ngx_conf_set_num_slot,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
547 NGX_HTTP_LOC_CONF_OFFSET,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
548 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
549 NULL },
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
550
6793
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
551 { 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
552 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
553 ngx_conf_set_off_slot,
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
554 NGX_HTTP_LOC_CONF_OFFSET,
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
555 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
556 NULL },
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
557
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
558 { ngx_string("proxy_cache_use_stale"),
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
559 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
560 ngx_conf_set_bitmask_slot,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
561 NGX_HTTP_LOC_CONF_OFFSET,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
562 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
563 &ngx_http_proxy_next_upstream_masks },
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
564
2875
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
565 { ngx_string("proxy_cache_methods"),
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
566 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
567 ngx_conf_set_bitmask_slot,
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
568 NGX_HTTP_LOC_CONF_OFFSET,
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
569 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
570 &ngx_http_upstream_cache_method_mask },
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
571
4385
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
572 { ngx_string("proxy_cache_lock"),
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
573 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
574 ngx_conf_set_flag_slot,
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
575 NGX_HTTP_LOC_CONF_OFFSET,
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
576 offsetof(ngx_http_proxy_loc_conf_t, upstream.cache_lock),
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
577 NULL },
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
578
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
579 { ngx_string("proxy_cache_lock_timeout"),
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
580 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
581 ngx_conf_set_msec_slot,
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
582 NGX_HTTP_LOC_CONF_OFFSET,
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
583 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
584 NULL },
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
585
5905
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5900
diff changeset
586 { ngx_string("proxy_cache_lock_age"),
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5900
diff changeset
587 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
588 ngx_conf_set_msec_slot,
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5900
diff changeset
589 NGX_HTTP_LOC_CONF_OFFSET,
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5900
diff changeset
590 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
591 NULL },
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5900
diff changeset
592
5441
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
593 { ngx_string("proxy_cache_revalidate"),
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
594 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
595 ngx_conf_set_flag_slot,
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
596 NGX_HTTP_LOC_CONF_OFFSET,
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
597 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
598 NULL },
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
599
6290
4d5ac1a31d44 Upstream: proxy_cache_convert_head directive.
Roman Arutyunyan <arut@nginx.com>
parents: 6157
diff changeset
600 { ngx_string("proxy_cache_convert_head"),
4d5ac1a31d44 Upstream: proxy_cache_convert_head directive.
Roman Arutyunyan <arut@nginx.com>
parents: 6157
diff changeset
601 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
602 ngx_conf_set_flag_slot,
4d5ac1a31d44 Upstream: proxy_cache_convert_head directive.
Roman Arutyunyan <arut@nginx.com>
parents: 6157
diff changeset
603 NGX_HTTP_LOC_CONF_OFFSET,
4d5ac1a31d44 Upstream: proxy_cache_convert_head directive.
Roman Arutyunyan <arut@nginx.com>
parents: 6157
diff changeset
604 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
605 NULL },
4d5ac1a31d44 Upstream: proxy_cache_convert_head directive.
Roman Arutyunyan <arut@nginx.com>
parents: 6157
diff changeset
606
6906
1aeaae6e9446 Upstream: proxy_cache_background_update and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6793
diff changeset
607 { ngx_string("proxy_cache_background_update"),
1aeaae6e9446 Upstream: proxy_cache_background_update and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6793
diff changeset
608 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
609 ngx_conf_set_flag_slot,
1aeaae6e9446 Upstream: proxy_cache_background_update and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6793
diff changeset
610 NGX_HTTP_LOC_CONF_OFFSET,
1aeaae6e9446 Upstream: proxy_cache_background_update and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6793
diff changeset
611 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
612 NULL },
1aeaae6e9446 Upstream: proxy_cache_background_update and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6793
diff changeset
613
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
614 #endif
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
615
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
616 { ngx_string("proxy_temp_path"),
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
617 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
618 ngx_conf_set_path_slot,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
619 NGX_HTTP_LOC_CONF_OFFSET,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
620 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
621 NULL },
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
622
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
623 { ngx_string("proxy_max_temp_file_size"),
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
624 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
625 ngx_conf_set_size_slot,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
626 NGX_HTTP_LOC_CONF_OFFSET,
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
627 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
628 NULL },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
629
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
630 { ngx_string("proxy_temp_file_write_size"),
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
631 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
632 ngx_conf_set_size_slot,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
633 NGX_HTTP_LOC_CONF_OFFSET,
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
634 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
635 NULL },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
636
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
637 { ngx_string("proxy_next_upstream"),
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
638 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
639 ngx_conf_set_bitmask_slot,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
640 NGX_HTTP_LOC_CONF_OFFSET,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
641 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
642 &ngx_http_proxy_next_upstream_masks },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
643
5832
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5738
diff changeset
644 { 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
645 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
646 ngx_conf_set_num_slot,
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5738
diff changeset
647 NGX_HTTP_LOC_CONF_OFFSET,
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5738
diff changeset
648 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
649 NULL },
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5738
diff changeset
650
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5738
diff changeset
651 { 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
652 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
653 ngx_conf_set_msec_slot,
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5738
diff changeset
654 NGX_HTTP_LOC_CONF_OFFSET,
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5738
diff changeset
655 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
656 NULL },
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5738
diff changeset
657
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
658 { ngx_string("proxy_pass_header"),
3729
4b773fc06336 fix directive type
Igor Sysoev <igor@sysoev.ru>
parents: 3700
diff changeset
659 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
660 ngx_conf_set_str_array_slot,
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
661 NGX_HTTP_LOC_CONF_OFFSET,
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
662 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
663 NULL },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
664
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
665 { ngx_string("proxy_hide_header"),
3729
4b773fc06336 fix directive type
Igor Sysoev <igor@sysoev.ru>
parents: 3700
diff changeset
666 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
667 ngx_conf_set_str_array_slot,
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
668 NGX_HTTP_LOC_CONF_OFFSET,
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
669 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
670 NULL },
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
671
2786
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2784
diff changeset
672 { ngx_string("proxy_ignore_headers"),
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2784
diff changeset
673 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
674 ngx_conf_set_bitmask_slot,
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2784
diff changeset
675 NGX_HTTP_LOC_CONF_OFFSET,
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2784
diff changeset
676 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
677 &ngx_http_upstream_ignore_headers_masks },
2786
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2784
diff changeset
678
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
679 { ngx_string("proxy_http_version"),
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
680 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
681 ngx_conf_set_enum_slot,
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
682 NGX_HTTP_LOC_CONF_OFFSET,
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
683 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
684 &ngx_http_proxy_http_version },
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
685
2184
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
686 #if (NGX_HTTP_SSL)
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
687
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
688 { ngx_string("proxy_ssl_session_reuse"),
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
689 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
690 ngx_conf_set_flag_slot,
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
691 NGX_HTTP_LOC_CONF_OFFSET,
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
692 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
693 NULL },
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
694
5385
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
695 { ngx_string("proxy_ssl_protocols"),
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
696 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
697 ngx_conf_set_bitmask_slot,
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
698 NGX_HTTP_LOC_CONF_OFFSET,
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
699 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
700 &ngx_http_proxy_ssl_protocols },
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
701
5390
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
702 { ngx_string("proxy_ssl_ciphers"),
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
703 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
704 ngx_conf_set_str_slot,
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
705 NGX_HTTP_LOC_CONF_OFFSET,
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
706 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
707 NULL },
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
708
5660
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
709 { 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
710 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
711 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
712 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
713 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
714 NULL },
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
715
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
716 { 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
717 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
718 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
719 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
720 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
721 NULL },
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
722
5661
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
723 { ngx_string("proxy_ssl_verify"),
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
724 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
725 ngx_conf_set_flag_slot,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
726 NGX_HTTP_LOC_CONF_OFFSET,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
727 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
728 NULL },
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
729
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
730 { ngx_string("proxy_ssl_verify_depth"),
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
731 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
732 ngx_conf_set_num_slot,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
733 NGX_HTTP_LOC_CONF_OFFSET,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
734 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
735 NULL },
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
736
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
737 { ngx_string("proxy_ssl_trusted_certificate"),
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
738 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
739 ngx_conf_set_str_slot,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
740 NGX_HTTP_LOC_CONF_OFFSET,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
741 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
742 NULL },
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
743
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
744 { ngx_string("proxy_ssl_crl"),
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
745 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
746 ngx_conf_set_str_slot,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
747 NGX_HTTP_LOC_CONF_OFFSET,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
748 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
749 NULL },
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
750
5900
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
751 { ngx_string("proxy_ssl_certificate"),
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
752 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
7833
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
753 ngx_http_set_complex_value_zero_slot,
5900
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
754 NGX_HTTP_LOC_CONF_OFFSET,
7833
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
755 offsetof(ngx_http_proxy_loc_conf_t, upstream.ssl_certificate),
5900
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
756 NULL },
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
757
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
758 { ngx_string("proxy_ssl_certificate_key"),
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
759 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
7833
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
760 ngx_http_set_complex_value_zero_slot,
5900
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
761 NGX_HTTP_LOC_CONF_OFFSET,
7833
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
762 offsetof(ngx_http_proxy_loc_conf_t, upstream.ssl_certificate_key),
5900
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
763 NULL },
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
764
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
765 { ngx_string("proxy_ssl_password_file"),
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
766 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
767 ngx_http_proxy_ssl_password_file,
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
768 NGX_HTTP_LOC_CONF_OFFSET,
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
769 0,
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
770 NULL },
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
771
7730
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
772 { ngx_string("proxy_ssl_conf_command"),
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
773 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE2,
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
774 ngx_conf_set_keyval_slot,
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
775 NGX_HTTP_LOC_CONF_OFFSET,
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
776 offsetof(ngx_http_proxy_loc_conf_t, ssl_conf_commands),
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
777 &ngx_http_proxy_ssl_conf_command_post },
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
778
2184
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
779 #endif
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
780
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
781 ngx_null_command
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
782 };
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
783
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
784
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 665
diff changeset
785 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
786 ngx_http_proxy_add_variables, /* preconfiguration */
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
787 NULL, /* postconfiguration */
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
788
5951
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
789 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
790 NULL, /* init main configuration */
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
791
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
792 NULL, /* create server configuration */
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
793 NULL, /* merge server configuration */
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
794
4499
778ef9c3fd2d Fixed spelling in single-line comments.
Ruslan Ermilov <ru@nginx.com>
parents: 4466
diff changeset
795 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
796 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
797 };
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
798
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
799
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
800 ngx_module_t ngx_http_proxy_module = {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
801 NGX_MODULE_V1,
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
802 &ngx_http_proxy_module_ctx, /* module context */
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
803 ngx_http_proxy_commands, /* module directives */
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
804 NGX_HTTP_MODULE, /* module type */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
805 NULL, /* init master */
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
806 NULL, /* init module */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
807 NULL, /* init process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
808 NULL, /* init thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
809 NULL, /* exit thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
810 NULL, /* exit process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
811 NULL, /* exit master */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
812 NGX_MODULE_V1_PADDING
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
813 };
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
814
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
815
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
816 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
817 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
818
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
819
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
820 static ngx_keyval_t ngx_http_proxy_headers[] = {
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
821 { ngx_string("Host"), ngx_string("$proxy_host") },
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
822 { 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
823 { 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
824 { 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
825 { ngx_string("TE"), ngx_string("") },
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
826 { ngx_string("Keep-Alive"), ngx_string("") },
2067
5657037448d1 the "Expect" header support
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
827 { ngx_string("Expect"), ngx_string("") },
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
828 { ngx_string("Upgrade"), ngx_string("") },
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
829 { ngx_null_string, ngx_null_string }
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
830 };
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
831
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
832
2706
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
833 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
834 ngx_string("Date"),
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
835 ngx_string("Server"),
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
836 ngx_string("X-Pad"),
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
837 ngx_string("X-Accel-Expires"),
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
838 ngx_string("X-Accel-Redirect"),
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
839 ngx_string("X-Accel-Limit-Rate"),
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
840 ngx_string("X-Accel-Buffering"),
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
841 ngx_string("X-Accel-Charset"),
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
842 ngx_null_string
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
843 };
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
844
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
845
2705
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
846 #if (NGX_HTTP_CACHE)
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
847
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
848 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
849 { 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
850 { 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
851 { 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
852 { 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
853 { ngx_string("TE"), ngx_string("") },
2705
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
854 { ngx_string("Keep-Alive"), ngx_string("") },
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
855 { ngx_string("Expect"), ngx_string("") },
4276
a0f18c78db3b Fixed Upgrade header clearing with proxy_cache.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4275
diff changeset
856 { ngx_string("Upgrade"), ngx_string("") },
5441
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
857 { ngx_string("If-Modified-Since"),
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
858 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
859 { 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
860 { 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
861 { ngx_string("If-Match"), ngx_string("") },
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
862 { ngx_string("Range"), ngx_string("") },
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
863 { ngx_string("If-Range"), ngx_string("") },
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
864 { ngx_null_string, ngx_null_string }
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
865 };
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
866
2706
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
867 #endif
f905a6ab0ca8 hide cacheable Set-Cookie and P3P response headers
Igor Sysoev <igor@sysoev.ru>
parents: 2705
diff changeset
868
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
869
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
870 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
871
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
872 { 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
873 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
874
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
875 { 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
876 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
877
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
878 { 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
879 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
880
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
881 #if 0
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
882 { 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
883 #endif
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
884
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
885 { ngx_string("proxy_internal_body_length"), NULL,
5203
bfb99b75833b Proxy: $proxy_internal_body_length fixed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5188
diff changeset
886 ngx_http_proxy_internal_body_length_variable, 0,
bfb99b75833b Proxy: $proxy_internal_body_length fixed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5188
diff changeset
887 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
888
6051
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
889 { ngx_string("proxy_internal_chunked"), NULL,
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
890 ngx_http_proxy_internal_chunked_variable, 0,
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
891 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
892
7077
2a288909abc6 Variables: macros for null variables.
Ruslan Ermilov <ru@nginx.com>
parents: 7047
diff changeset
893 ngx_http_null_variable
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
894 };
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
895
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
896
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
897 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
898 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
899 };
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
900
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
901
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
902 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
903
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
904 { ngx_string("secure"),
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
905 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
906
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
907 { ngx_string("nosecure"),
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
908 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
909
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
910 { ngx_string("httponly"),
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
911 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
912
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
913 { ngx_string("nohttponly"),
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
914 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
915
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
916 { ngx_string("samesite=strict"),
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
917 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
918
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
919 { ngx_string("samesite=lax"),
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
920 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
921
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
922 { ngx_string("samesite=none"),
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
923 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
924
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
925 { ngx_string("nosamesite"),
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
926 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
927
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
928 { ngx_null_string, 0 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
929 };
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
930
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
931
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
932 static ngx_int_t
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
933 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
934 {
5951
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
935 ngx_int_t rc;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
936 ngx_http_upstream_t *u;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
937 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
938 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
939 #if (NGX_HTTP_CACHE)
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
940 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
941 #endif
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
942
3006
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 2989
diff changeset
943 if (ngx_http_upstream_create(r) != NGX_OK) {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
944 return NGX_HTTP_INTERNAL_SERVER_ERROR;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
945 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
946
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
947 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
948 if (ctx == NULL) {
6003
cf2f8d91cf09 Proxy: use an appropriate error on memory allocation failure.
Ruslan Ermilov <ru@nginx.com>
parents: 5951
diff changeset
949 return NGX_HTTP_INTERNAL_SERVER_ERROR;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
950 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
951
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
952 ngx_http_set_ctx(r, ctx, ngx_http_proxy_module);
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
953
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
954 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
955
3006
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 2989
diff changeset
956 u = r->upstream;
95972b9e790b ngx_http_upstream_create() to cleanup the previous upstream after
Igor Sysoev <igor@sysoev.ru>
parents: 2989
diff changeset
957
3733
527a0f8cae2a use NULL instead of 0
Igor Sysoev <igor@sysoev.ru>
parents: 3731
diff changeset
958 if (plcf->proxy_lengths == NULL) {
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
959 ctx->vars = plcf->vars;
2391
d88e757cc7d8 delete surplus upstream.schema field
Igor Sysoev <igor@sysoev.ru>
parents: 2285
diff changeset
960 u->schema = plcf->vars.schema;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
961 #if (NGX_HTTP_SSL)
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
962 u->ssl = (plcf->upstream.ssl != NULL);
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
963 #endif
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
964
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
965 } else {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
966 if (ngx_http_proxy_eval(r, ctx, plcf) != NGX_OK) {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
967 return NGX_HTTP_INTERNAL_SERVER_ERROR;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
968 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
969 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
970
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
971 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
972
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
973 u->conf = &plcf->upstream;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
974
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
975 #if (NGX_HTTP_CACHE)
5951
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
976 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
977
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
978 u->caches = &pmcf->caches;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
979 u->create_key = ngx_http_proxy_create_key;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
980 #endif
5951
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
981
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
982 u->create_request = ngx_http_proxy_create_request;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
983 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
984 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
985 u->abort_request = ngx_http_proxy_abort_request;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
986 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
987 r->state = 0;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
988
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
989 if (plcf->redirects) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
990 u->rewrite_redirect = ngx_http_proxy_rewrite_redirect;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
991 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
992
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
993 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
994 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
995 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
996
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
997 u->buffering = plcf->upstream.buffering;
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
998
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
999 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
1000 if (u->pipe == NULL) {
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1001 return NGX_HTTP_INTERNAL_SERVER_ERROR;
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
1002 }
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1003
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1004 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
1005 u->pipe->input_ctx = r;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1006
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1007 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
1008 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
1009 u->input_filter_ctx = r;
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1010
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1011 u->accel = 1;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1012
6050
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
1013 if (!plcf->upstream.request_buffering
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
1014 && 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
1015 && (!r->headers_in.chunked
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1016 || plcf->http_version == NGX_HTTP_VERSION_11))
6050
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
1017 {
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
1018 r->request_body_no_buffering = 1;
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
1019 }
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
1020
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1021 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
1022
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1023 if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1024 return rc;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1025 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1026
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1027 return NGX_DONE;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1028 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1029
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1030
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1031 static ngx_int_t
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1032 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
1033 ngx_http_proxy_loc_conf_t *plcf)
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1034 {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1035 u_char *p;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1036 size_t add;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1037 u_short port;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1038 ngx_str_t proxy;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1039 ngx_url_t url;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1040 ngx_http_upstream_t *u;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1041
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1042 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
1043 plcf->proxy_values->elts)
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1044 == NULL)
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1045 {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1046 return NGX_ERROR;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1047 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1048
3977
2527cdb8d31f test length of proxy_pass with variables
Igor Sysoev <igor@sysoev.ru>
parents: 3976
diff changeset
1049 if (proxy.len > 7
2527cdb8d31f test length of proxy_pass with variables
Igor Sysoev <igor@sysoev.ru>
parents: 3976
diff changeset
1050 && 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
1051 {
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1052 add = 7;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1053 port = 80;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1054
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1055 #if (NGX_HTTP_SSL)
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1056
3977
2527cdb8d31f test length of proxy_pass with variables
Igor Sysoev <igor@sysoev.ru>
parents: 3976
diff changeset
1057 } else if (proxy.len > 8
2527cdb8d31f test length of proxy_pass with variables
Igor Sysoev <igor@sysoev.ru>
parents: 3976
diff changeset
1058 && 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
1059 {
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1060 add = 8;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1061 port = 443;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1062 r->upstream->ssl = 1;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1063
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1064 #endif
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1065
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1066 } else {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1067 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1068 "invalid URL prefix in \"%V\"", &proxy);
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1069 return NGX_ERROR;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1070 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1071
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1072 u = r->upstream;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1073
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1074 u->schema.len = add;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1075 u->schema.data = proxy.data;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1076
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1077 ngx_memzero(&url, sizeof(ngx_url_t));
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1078
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1079 url.url.len = proxy.len - add;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1080 url.url.data = proxy.data + add;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1081 url.default_port = port;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1082 url.uri_part = 1;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1083 url.no_resolve = 1;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1084
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1085 if (ngx_parse_url(r->pool, &url) != NGX_OK) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1086 if (url.err) {
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1087 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
1088 "%s in upstream \"%V\"", url.err, &url.url);
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1089 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1090
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1091 return NGX_ERROR;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1092 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1093
3323
9421e997c2c4 allow "proxy_pass http://$backend" without URI part
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
1094 if (url.uri.len) {
9421e997c2c4 allow "proxy_pass http://$backend" without URI part
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
1095 if (url.uri.data[0] == '?') {
9421e997c2c4 allow "proxy_pass http://$backend" without URI part
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
1096 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
1097 if (p == NULL) {
9421e997c2c4 allow "proxy_pass http://$backend" without URI part
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
1098 return NGX_ERROR;
9421e997c2c4 allow "proxy_pass http://$backend" without URI part
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
1099 }
9421e997c2c4 allow "proxy_pass http://$backend" without URI part
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
1100
9421e997c2c4 allow "proxy_pass http://$backend" without URI part
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
1101 *p++ = '/';
9421e997c2c4 allow "proxy_pass http://$backend" without URI part
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
1102 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
1103
9421e997c2c4 allow "proxy_pass http://$backend" without URI part
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
1104 url.uri.len++;
9421e997c2c4 allow "proxy_pass http://$backend" without URI part
Igor Sysoev <igor@sysoev.ru>
parents: 3271
diff changeset
1105 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
1106 }
c3035feb6638 fix case proxy_pass URL is evaluted to http://host?args
Igor Sysoev <igor@sysoev.ru>
parents: 2268
diff changeset
1107 }
c3035feb6638 fix case proxy_pass URL is evaluted to http://host?args
Igor Sysoev <igor@sysoev.ru>
parents: 2268
diff changeset
1108
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1109 ctx->vars.key_start = u->schema;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1110
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1111 ngx_http_proxy_set_vars(&url, &ctx->vars);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1112
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1113 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
1114 if (u->resolved == NULL) {
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1115 return NGX_ERROR;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1116 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1117
6784
1af120241cde Upstream: removed unnecessary condition in proxy_eval() and friends.
Ruslan Ermilov <ru@nginx.com>
parents: 6781
diff changeset
1118 if (url.addrs) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1119 u->resolved->sockaddr = url.addrs[0].sockaddr;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1120 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
1121 u->resolved->name = url.addrs[0].name;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1122 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
1123 }
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1124
6785
d1d0dd69a419 Upstream: added the ngx_http_upstream_resolved_t.name field.
Ruslan Ermilov <ru@nginx.com>
parents: 6784
diff changeset
1125 u->resolved->host = url.host;
6303
a93345ee8f52 Upstream: fixed "no port" detection in evaluated upstreams.
Ruslan Ermilov <ru@nginx.com>
parents: 6290
diff changeset
1126 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
1127 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
1128
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1129 return NGX_OK;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1130 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1131
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1132
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1133 #if (NGX_HTTP_CACHE)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1134
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1135 static ngx_int_t
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1136 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
1137 {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1138 size_t len, loc_len;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1139 u_char *p;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1140 uintptr_t escape;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1141 ngx_str_t *key;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1142 ngx_http_upstream_t *u;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1143 ngx_http_proxy_ctx_t *ctx;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1144 ngx_http_proxy_loc_conf_t *plcf;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1145
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1146 u = r->upstream;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1147
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1148 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
1149
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1150 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
1151
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1152 key = ngx_array_push(&r->cache->keys);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1153 if (key == NULL) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1154 return NGX_ERROR;
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
4947
4251e72b8bb4 Allow the complex value to be defined as an empty string.
Ruslan Ermilov <ru@nginx.com>
parents: 4927
diff changeset
1157 if (plcf->cache_key.value.data) {
2672
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
1158
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
1159 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
1160 return NGX_ERROR;
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
1161 }
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
1162
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
1163 return NGX_OK;
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
1164 }
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
1165
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1166 *key = ctx->vars.key_start;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1167
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1168 key = ngx_array_push(&r->cache->keys);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1169 if (key == NULL) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1170 return NGX_ERROR;
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
4377
726a1ca9b52b Proxy: made proxy_pass with variables more consistent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4336
diff changeset
1173 if (plcf->proxy_lengths && ctx->vars.uri.len) {
2592
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 *key = ctx->vars.uri;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1176 u->uri = ctx->vars.uri;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1177
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1178 return NGX_OK;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1179
7167
8530aea9aa50 Proxy: simplified conditions of using unparsed uri.
Roman Arutyunyan <arut@nginx.com>
parents: 7077
diff changeset
1180 } 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
1181 *key = r->unparsed_uri;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1182 u->uri = r->unparsed_uri;
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 return NGX_OK;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1185 }
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 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
1188
7881
52338ddf9e2f Disabled spaces in URIs (ticket #196).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7833
diff changeset
1189 if (r->quoted_uri || r->internal) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1190 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
1191 r->uri.len - loc_len, NGX_ESCAPE_URI);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1192 } else {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1193 escape = 0;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1194 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1195
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1196 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
1197 + sizeof("?") - 1 + r->args.len;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1198
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1199 p = ngx_pnalloc(r->pool, len);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1200 if (p == NULL) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1201 return NGX_ERROR;
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
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1204 key->data = p;
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 if (r->valid_location) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1207 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
1208 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1209
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1210 if (escape) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1211 ngx_escape_uri(p, r->uri.data + loc_len,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1212 r->uri.len - loc_len, NGX_ESCAPE_URI);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1213 p += r->uri.len - loc_len + escape;
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 } else {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1216 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
1217 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1218
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1219 if (r->args.len > 0) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1220 *p++ = '?';
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1221 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
1222 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1223
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1224 key->len = p - key->data;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1225 u->uri = *key;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1226
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1227 return NGX_OK;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1228 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1229
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1230 #endif
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1231
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1232
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1233 static ngx_int_t
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1234 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
1235 {
7047
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1236 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
1237 key_len, val_len;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1238 uintptr_t escape;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1239 ngx_buf_t *b;
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1240 ngx_str_t method;
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1241 ngx_uint_t i, unparsed_uri;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1242 ngx_chain_t *cl, *body;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1243 ngx_list_part_t *part;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1244 ngx_table_elt_t *header;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1245 ngx_http_upstream_t *u;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1246 ngx_http_proxy_ctx_t *ctx;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1247 ngx_http_script_code_pt code;
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
1248 ngx_http_proxy_headers_t *headers;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1249 ngx_http_script_engine_t e, le;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1250 ngx_http_proxy_loc_conf_t *plcf;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1251 ngx_http_script_len_code_pt lcode;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1252
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1253 u = r->upstream;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1254
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1255 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
1256
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
1257 #if (NGX_HTTP_CACHE)
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
1258 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
1259 #else
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
1260 headers = &plcf->headers;
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
1261 #endif
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
1262
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 555
diff changeset
1263 if (u->method.len) {
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 555
diff changeset
1264 /* HEAD was changed to GET to cache response */
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 555
diff changeset
1265 method = u->method;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 555
diff changeset
1266
6781
ca27074f8f0f Proxy: support variables for proxy_method directive.
Dmitry Lazurkin <dilaz03@gmail.com>
parents: 6747
diff changeset
1267 } else if (plcf->method) {
ca27074f8f0f Proxy: support variables for proxy_method directive.
Dmitry Lazurkin <dilaz03@gmail.com>
parents: 6747
diff changeset
1268 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
1269 return NGX_ERROR;
ca27074f8f0f Proxy: support variables for proxy_method directive.
Dmitry Lazurkin <dilaz03@gmail.com>
parents: 6747
diff changeset
1270 }
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 555
diff changeset
1271
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1272 } else {
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 555
diff changeset
1273 method = r->method_name;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1274 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1275
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1276 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
1277
6311
44122bddd9a1 Proxy: improved code readability.
Ruslan Ermilov <ru@nginx.com>
parents: 6303
diff changeset
1278 if (method.len == 4
44122bddd9a1 Proxy: improved code readability.
Ruslan Ermilov <ru@nginx.com>
parents: 6303
diff changeset
1279 && 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
1280 {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1281 ctx->head = 1;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1282 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1283
6311
44122bddd9a1 Proxy: improved code readability.
Ruslan Ermilov <ru@nginx.com>
parents: 6303
diff changeset
1284 len = method.len + 1 + sizeof(ngx_http_proxy_version) - 1
44122bddd9a1 Proxy: improved code readability.
Ruslan Ermilov <ru@nginx.com>
parents: 6303
diff changeset
1285 + sizeof(CRLF) - 1;
1667
e9bd042134cb fix segfault
Igor Sysoev <igor@sysoev.ru>
parents: 1658
diff changeset
1286
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1287 escape = 0;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1288 loc_len = 0;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1289 unparsed_uri = 0;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1290
4377
726a1ca9b52b Proxy: made proxy_pass with variables more consistent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4336
diff changeset
1291 if (plcf->proxy_lengths && ctx->vars.uri.len) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1292 uri_len = ctx->vars.uri.len;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1293
7167
8530aea9aa50 Proxy: simplified conditions of using unparsed uri.
Roman Arutyunyan <arut@nginx.com>
parents: 7077
diff changeset
1294 } 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
1295 unparsed_uri = 1;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1296 uri_len = r->unparsed_uri.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 } else {
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1299 loc_len = (r->valid_location && ctx->vars.uri.len) ?
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1300 plcf->location.len : 0;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1301
7881
52338ddf9e2f Disabled spaces in URIs (ticket #196).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7833
diff changeset
1302 if (r->quoted_uri || r->internal) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1303 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
1304 r->uri.len - loc_len, NGX_ESCAPE_URI);
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1305 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1306
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1307 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
1308 + sizeof("?") - 1 + r->args.len;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1309 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1310
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1311 if (uri_len == 0) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1312 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
1313 "zero length URI to proxy");
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1314 return NGX_ERROR;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1315 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1316
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1317 len += uri_len;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1318
5211
ecd762770729 Proxy: clear script engine used to calculate lengths.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5203
diff changeset
1319 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
1320
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
1321 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
1322 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
1323
5910
29fa5023bd6f Proxy: renamed and rearranged fields in proxy configuration.
Roman Arutyunyan <arut@nginx.com>
parents: 5909
diff changeset
1324 if (plcf->body_lengths) {
29fa5023bd6f Proxy: renamed and rearranged fields in proxy configuration.
Roman Arutyunyan <arut@nginx.com>
parents: 5909
diff changeset
1325 le.ip = plcf->body_lengths->elts;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1326 le.request = r;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1327 le.flushed = 1;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1328 body_len = 0;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1329
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1330 while (*(uintptr_t *) le.ip) {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1331 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
1332 body_len += lcode(&le);
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1333 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1334
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1335 ctx->internal_body_length = body_len;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1336 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
1337
6051
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1338 } 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
1339 ctx->internal_body_length = -1;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1340 ctx->internal_chunked = 1;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1341
4927
93294110728f Request body: always use calculated size of a request body in proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4925
diff changeset
1342 } else {
93294110728f Request body: always use calculated size of a request body in proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4925
diff changeset
1343 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
1344 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1345
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
1346 le.ip = headers->lengths->elts;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1347 le.request = r;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1348 le.flushed = 1;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1349
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1350 while (*(uintptr_t *) le.ip) {
7047
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 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
1353 key_len = lcode(&le);
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1354
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1355 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
1356 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
1357 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1358 le.ip += sizeof(uintptr_t);
7047
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1359
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1360 if (val_len == 0) {
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1361 continue;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1362 }
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1363
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1364 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
1365 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1366
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1367
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1368 if (plcf->upstream.pass_request_headers) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1369 part = &r->headers_in.headers.part;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1370 header = part->elts;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1371
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1372 for (i = 0; /* void */; i++) {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1373
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1374 if (i >= part->nelts) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1375 if (part->next == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1376 break;
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
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1379 part = part->next;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1380 header = part->elts;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1381 i = 0;
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
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
1384 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
1385 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
1386 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1387 continue;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1388 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1389
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1390 len += header[i].key.len + sizeof(": ") - 1
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1391 + header[i].value.len + sizeof(CRLF) - 1;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1392 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1393 }
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1394
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 b = ngx_create_temp_buf(r->pool, len);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1397 if (b == NULL) {
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1398 return NGX_ERROR;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1399 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1400
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1401 cl = ngx_alloc_chain_link(r->pool);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1402 if (cl == NULL) {
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1403 return NGX_ERROR;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1404 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1405
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1406 cl->buf = b;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1407
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1408
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1409 /* the request line */
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1410
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1411 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
1412 *b->last++ = ' ';
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1413
555
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1414 u->uri.data = b->last;
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1415
4377
726a1ca9b52b Proxy: made proxy_pass with variables more consistent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4336
diff changeset
1416 if (plcf->proxy_lengths && ctx->vars.uri.len) {
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1417 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
1418
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1419 } else if (unparsed_uri) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1420 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
1421
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1422 } else {
555
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1423 if (r->valid_location) {
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1424 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
1425 }
551
483cca230603 nginx-0.2.4-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
1426
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1427 if (escape) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1428 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
1429 r->uri.len - loc_len, NGX_ESCAPE_URI);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1430 b->last += r->uri.len - loc_len + escape;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1431
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1432 } else {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1433 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
1434 r->uri.len - loc_len);
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1435 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1436
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1437 if (r->args.len > 0) {
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1438 *b->last++ = '?';
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1439 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
1440 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1441 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1442
555
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1443 u->uri.len = b->last - u->uri.data;
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
1444
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1445 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
1446 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
1447 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
1448
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1449 } else {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1450 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
1451 sizeof(ngx_http_proxy_version) - 1);
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1452 }
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1453
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1454 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
1455
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
1456 e.ip = headers->values->elts;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1457 e.pos = b->last;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1458 e.request = r;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1459 e.flushed = 1;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1460
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
1461 le.ip = headers->lengths->elts;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1462
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1463 while (*(uintptr_t *) le.ip) {
7047
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1464
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1465 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
1466 (void) lcode(&le);
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 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
1469 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
1470 }
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1471 le.ip += sizeof(uintptr_t);
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1472
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1473 if (val_len == 0) {
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1474 e.skip = 1;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1475
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1476 while (*(uintptr_t *) e.ip) {
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1477 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
1478 code((ngx_http_script_engine_t *) &e);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1479 }
7047
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1480 e.ip += sizeof(uintptr_t);
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1481
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1482 e.skip = 0;
7047
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1483
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1484 continue;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1485 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1486
7047
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1487 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
1488 code((ngx_http_script_engine_t *) &e);
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1489
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1490 *e.pos++ = ':'; *e.pos++ = ' ';
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1491
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1492 while (*(uintptr_t *) e.ip) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1493 code = *(ngx_http_script_code_pt *) e.ip;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1494 code((ngx_http_script_engine_t *) &e);
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 e.ip += sizeof(uintptr_t);
7047
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1497
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
1498 *e.pos++ = CR; *e.pos++ = LF;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1499 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1500
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1501 b->last = e.pos;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1502
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1503
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1504 if (plcf->upstream.pass_request_headers) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1505 part = &r->headers_in.headers.part;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1506 header = part->elts;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1507
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1508 for (i = 0; /* void */; i++) {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1509
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1510 if (i >= part->nelts) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1511 if (part->next == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1512 break;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1513 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1514
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1515 part = part->next;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1516 header = part->elts;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1517 i = 0;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1518 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1519
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
1520 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
1521 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
1522 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1523 continue;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1524 }
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1525
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1526 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
1527
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1528 *b->last++ = ':'; *b->last++ = ' ';
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1529
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1530 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
1531 header[i].value.len);
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1532
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1533 *b->last++ = CR; *b->last++ = LF;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1534
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1535 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
1536 "http proxy header: \"%V: %V\"",
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1537 &header[i].key, &header[i].value);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1538 }
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1539 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1540
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1541
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1542 /* add "\r\n" at the header end */
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1543 *b->last++ = CR; *b->last++ = LF;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1544
5910
29fa5023bd6f Proxy: renamed and rearranged fields in proxy configuration.
Roman Arutyunyan <arut@nginx.com>
parents: 5909
diff changeset
1545 if (plcf->body_values) {
29fa5023bd6f Proxy: renamed and rearranged fields in proxy configuration.
Roman Arutyunyan <arut@nginx.com>
parents: 5909
diff changeset
1546 e.ip = plcf->body_values->elts;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1547 e.pos = b->last;
6043
613b14b305c7 Proxy: fixed proxy_set_body with proxy_cache.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6003
diff changeset
1548 e.skip = 0;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1549
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1550 while (*(uintptr_t *) e.ip) {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1551 code = *(ngx_http_script_code_pt *) e.ip;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1552 code((ngx_http_script_engine_t *) &e);
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1553 }
579
4c5c2c55975c nginx-0.3.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1554
4c5c2c55975c nginx-0.3.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1555 b->last = e.pos;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1556 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1557
1774
68d21fd1dc64 use %*s format
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
1558 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
1559 "http proxy header:%N\"%*s\"",
1774
68d21fd1dc64 use %*s format
Igor Sysoev <igor@sysoev.ru>
parents: 1701
diff changeset
1560 (size_t) (b->last - b->pos), b->pos);
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1561
6050
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
1562 if (r->request_body_no_buffering) {
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
1563
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
1564 u->request_bufs = cl;
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
1565
6051
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1566 if (ctx->internal_chunked) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1567 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
1568 u->output.filter_ctx = r;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1569 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1570
6050
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
1571 } 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
1572
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1573 body = u->request_bufs;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1574 u->request_bufs = cl;
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 while (body) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1577 b = ngx_alloc_buf(r->pool);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1578 if (b == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1579 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1580 }
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 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
1583
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1584 cl->next = ngx_alloc_chain_link(r->pool);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1585 if (cl->next == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1586 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1587 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1588
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1589 cl = cl->next;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1590 cl->buf = b;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1591
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1592 body = body->next;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1593 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1594
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1595 } else {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1596 u->request_bufs = cl;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1597 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1598
4009
3183165283cc Fixing proxy_set_body and proxy_pass_request_body with SSL.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3977
diff changeset
1599 b->flush = 1;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1600 cl->next = NULL;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1601
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1602 return NGX_OK;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1603 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1604
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1605
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1606 static ngx_int_t
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1607 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
1608 {
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1609 ngx_http_proxy_ctx_t *ctx;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1610
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1611 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
1612
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1613 if (ctx == NULL) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1614 return NGX_OK;
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
3627
9061fdb2ed8c use ngx_http_parse_status_line()
Igor Sysoev <igor@sysoev.ru>
parents: 3615
diff changeset
1617 ctx->status.code = 0;
9061fdb2ed8c use ngx_http_parse_status_line()
Igor Sysoev <igor@sysoev.ru>
parents: 3615
diff changeset
1618 ctx->status.count = 0;
9061fdb2ed8c use ngx_http_parse_status_line()
Igor Sysoev <igor@sysoev.ru>
parents: 3615
diff changeset
1619 ctx->status.start = NULL;
9061fdb2ed8c use ngx_http_parse_status_line()
Igor Sysoev <igor@sysoev.ru>
parents: 3615
diff changeset
1620 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
1621 ctx->chunked.state = 0;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1622
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1623 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
1624 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
1625 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
1626 r->state = 0;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1627
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1628 return NGX_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1629 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1630
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1631
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1632 static ngx_int_t
6051
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1633 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
1634 {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1635 ngx_http_request_t *r = data;
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 off_t size;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1638 u_char *chunk;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1639 ngx_int_t rc;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1640 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
1641 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
1642 ngx_http_proxy_ctx_t *ctx;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1643
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1644 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
1645 "proxy output filter");
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1646
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1647 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
1648
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1649 if (in == NULL) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1650 out = in;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1651 goto out;
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
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1654 out = NULL;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1655 ll = &out;
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 if (!ctx->header_sent) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1658 /* first buffer contains headers, pass it unmodified */
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1659
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1660 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
1661 "proxy output header");
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1662
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1663 ctx->header_sent = 1;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1664
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1665 tl = ngx_alloc_chain_link(r->pool);
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1666 if (tl == NULL) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1667 return NGX_ERROR;
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 tl->buf = in->buf;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1671 *ll = tl;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1672 ll = &tl->next;
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 in = in->next;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1675
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1676 if (in == NULL) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1677 tl->next = NULL;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1678 goto out;
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 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1681
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1682 size = 0;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1683 cl = in;
6056
24ccec3c4a87 Proxy: fixed proxy_request_buffering and chunked with preread body.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6051
diff changeset
1684 fl = ll;
6051
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1685
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1686 for ( ;; ) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1687 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
6480
f01ab2dbcfdc Fixed logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6467
diff changeset
1688 "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
1689
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1690 size += ngx_buf_size(cl->buf);
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1691
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1692 if (cl->buf->flush
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1693 || cl->buf->sync
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1694 || ngx_buf_in_memory(cl->buf)
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1695 || cl->buf->in_file)
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1696 {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1697 tl = ngx_alloc_chain_link(r->pool);
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1698 if (tl == NULL) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1699 return NGX_ERROR;
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 tl->buf = cl->buf;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1703 *ll = tl;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1704 ll = &tl->next;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1705 }
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 if (cl->next == NULL) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1708 break;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1709 }
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 cl = cl->next;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1712 }
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 if (size) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1715 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
1716 if (tl == NULL) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1717 return NGX_ERROR;
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
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1720 b = tl->buf;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1721 chunk = b->start;
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 if (chunk == NULL) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1724 /* the "0000000000000000" is 64-bit hexadecimal string */
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1725
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1726 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
1727 if (chunk == NULL) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1728 return NGX_ERROR;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1729 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1730
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1731 b->start = chunk;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1732 b->end = chunk + sizeof("0000000000000000" CRLF) - 1;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1733 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1734
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1735 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
1736 b->memory = 0;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1737 b->temporary = 1;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1738 b->pos = chunk;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1739 b->last = ngx_sprintf(chunk, "%xO" CRLF, size);
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1740
6056
24ccec3c4a87 Proxy: fixed proxy_request_buffering and chunked with preread body.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6051
diff changeset
1741 tl->next = *fl;
24ccec3c4a87 Proxy: fixed proxy_request_buffering and chunked with preread body.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6051
diff changeset
1742 *fl = tl;
6051
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1743 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1744
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1745 if (cl->buf->last_buf) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1746 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
1747 if (tl == NULL) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1748 return NGX_ERROR;
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
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1751 b = tl->buf;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1752
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1753 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
1754 b->temporary = 0;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1755 b->memory = 1;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1756 b->last_buf = 1;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1757 b->pos = (u_char *) CRLF "0" CRLF CRLF;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1758 b->last = b->pos + 7;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1759
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1760 cl->buf->last_buf = 0;
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 *ll = tl;
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 if (size == 0) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1765 b->pos += 2;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1766 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1767
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1768 } else if (size > 0) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1769 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
1770 if (tl == NULL) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1771 return NGX_ERROR;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1772 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1773
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1774 b = tl->buf;
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 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
1777 b->temporary = 0;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1778 b->memory = 1;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1779 b->pos = (u_char *) CRLF;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1780 b->last = b->pos + 2;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1781
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1782 *ll = tl;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1783
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1784 } else {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1785 *ll = NULL;
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
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1788 out:
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1789
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1790 rc = ngx_chain_writer(&r->upstream->writer, out);
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1791
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1792 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
1793 (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
1794
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1795 return rc;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1796 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1797
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1798
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
1799 static ngx_int_t
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1800 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
1801 {
3628
cf47471a9eda make code more obviuos
Igor Sysoev <igor@sysoev.ru>
parents: 3627
diff changeset
1802 size_t len;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1803 ngx_int_t rc;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1804 ngx_http_upstream_t *u;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1805 ngx_http_proxy_ctx_t *ctx;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1806
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1807 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
1808
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
1809 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
1810 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1811 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1812
3627
9061fdb2ed8c use ngx_http_parse_status_line()
Igor Sysoev <igor@sysoev.ru>
parents: 3615
diff changeset
1813 u = r->upstream;
9061fdb2ed8c use ngx_http_parse_status_line()
Igor Sysoev <igor@sysoev.ru>
parents: 3615
diff changeset
1814
9061fdb2ed8c use ngx_http_parse_status_line()
Igor Sysoev <igor@sysoev.ru>
parents: 3615
diff changeset
1815 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
1816
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1817 if (rc == NGX_AGAIN) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1818 return rc;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1819 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1820
3627
9061fdb2ed8c use ngx_http_parse_status_line()
Igor Sysoev <igor@sysoev.ru>
parents: 3615
diff changeset
1821 if (rc == NGX_ERROR) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1822
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1823 #if (NGX_HTTP_CACHE)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1824
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1825 if (r->cache) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1826 r->http_version = NGX_HTTP_VERSION_9;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1827 return NGX_OK;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1828 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1829
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1830 #endif
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1831
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1832 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
1833 "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
1834
619
7a16e281c01f nginx-0.3.31-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1835 #if 0
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1836 if (u->accel) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1837 return NGX_HTTP_UPSTREAM_INVALID_HEADER;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1838 }
619
7a16e281c01f nginx-0.3.31-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1839 #endif
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1840
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1841 r->http_version = NGX_HTTP_VERSION_9;
1616
0a293900d21b set status in correct place
Igor Sysoev <igor@sysoev.ru>
parents: 1565
diff changeset
1842 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
1843 u->headers_in.connection_close = 1;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1844
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1845 return NGX_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1846 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1847
5575
d15822784cf9 Upstream: fix $upstream_status variable.
Piotr Sikora <piotr@cloudflare.com>
parents: 5466
diff changeset
1848 if (u->state && u->state->status == 0) {
3627
9061fdb2ed8c use ngx_http_parse_status_line()
Igor Sysoev <igor@sysoev.ru>
parents: 3615
diff changeset
1849 u->state->status = ctx->status.code;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1850 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
1851
3627
9061fdb2ed8c use ngx_http_parse_status_line()
Igor Sysoev <igor@sysoev.ru>
parents: 3615
diff changeset
1852 u->headers_in.status_n = ctx->status.code;
9061fdb2ed8c use ngx_http_parse_status_line()
Igor Sysoev <igor@sysoev.ru>
parents: 3615
diff changeset
1853
3628
cf47471a9eda make code more obviuos
Igor Sysoev <igor@sysoev.ru>
parents: 3627
diff changeset
1854 len = ctx->status.end - ctx->status.start;
cf47471a9eda make code more obviuos
Igor Sysoev <igor@sysoev.ru>
parents: 3627
diff changeset
1855 u->headers_in.status_line.len = len;
cf47471a9eda make code more obviuos
Igor Sysoev <igor@sysoev.ru>
parents: 3627
diff changeset
1856
cf47471a9eda make code more obviuos
Igor Sysoev <igor@sysoev.ru>
parents: 3627
diff changeset
1857 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
1858 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
1859 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1860 }
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
1861
3628
cf47471a9eda make code more obviuos
Igor Sysoev <igor@sysoev.ru>
parents: 3627
diff changeset
1862 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
1863
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1864 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
1865 "http proxy status %ui \"%V\"",
936
2864303e0ce5 fix debug log
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
1866 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
1867
4125
e5df04b05e75 Protocol version parsing in ngx_http_parse_status_line().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4009
diff changeset
1868 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
1869 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
1870 }
e5df04b05e75 Protocol version parsing in ngx_http_parse_status_line().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4009
diff changeset
1871
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1872 u->process_header = ngx_http_proxy_process_header;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1873
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1874 return ngx_http_proxy_process_header(r);
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
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1877
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1878 static ngx_int_t
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1879 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
1880 {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1881 ngx_int_t rc;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1882 ngx_table_elt_t *h;
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1883 ngx_http_upstream_t *u;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1884 ngx_http_proxy_ctx_t *ctx;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1885 ngx_http_upstream_header_t *hh;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1886 ngx_http_upstream_main_conf_t *umcf;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1887
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1888 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
1889
2024
7018254cc006 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1925
diff changeset
1890 for ( ;; ) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1891
2256
8c17cfe63d2c underscores_in_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
1892 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
1893
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1894 if (rc == NGX_OK) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1895
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1896 /* a header line has been parsed successfully */
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1897
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1898 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
1899 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
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->hash = r->header_hash;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1904
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1905 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
1906 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
1907
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2030
diff changeset
1908 h->key.data = ngx_pnalloc(r->pool,
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1909 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
1910 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
1911 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
1912 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1913 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1914
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1915 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
1916 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
1917
4529
1ebec1d15a25 Fixed incorrect ngx_cpystrn() usage in ngx_http_*_process_header().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4499
diff changeset
1918 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
1919 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
1920 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
1921 h->value.data[h->value.len] = '\0';
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1922
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1923 if (h->key.len == r->lowcase_index) {
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1924 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
1925
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1926 } else {
2135
8c6521eedf84 ngx_strlow()
Igor Sysoev <igor@sysoev.ru>
parents: 2067
diff changeset
1927 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
1928 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1929
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1930 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
1931 h->lowcase_key, h->key.len);
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1932
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1933 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
1934 return NGX_ERROR;
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1935 }
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1936
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1937 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
1938 "http proxy header: \"%V: %V\"",
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1939 &h->key, &h->value);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1940
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1941 continue;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1942 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1943
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1944 if (rc == NGX_HTTP_PARSE_HEADER_DONE) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1945
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1946 /* a whole header has been parsed successfully */
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1947
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1948 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
1949 "http proxy header done");
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1950
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1951 /*
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1952 * if no "Server" and "Date" in header line,
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1953 * then add the special empty headers
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1954 */
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1955
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1956 if (r->upstream->headers_in.server == NULL) {
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1957 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
1958 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
1959 return NGX_ERROR;
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1960 }
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1961
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1962 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
1963 ngx_hash('s', 'e'), 'r'), 'v'), 'e'), 'r');
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1964
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3477
diff changeset
1965 ngx_str_set(&h->key, "Server");
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3477
diff changeset
1966 ngx_str_null(&h->value);
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1967 h->lowcase_key = (u_char *) "server";
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1968 }
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 if (r->upstream->headers_in.date == NULL) {
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1971 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
1972 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
1973 return NGX_ERROR;
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1974 }
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1975
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1976 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
1977
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3477
diff changeset
1978 ngx_str_set(&h->key, "Date");
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3477
diff changeset
1979 ngx_str_null(&h->value);
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1980 h->lowcase_key = (u_char *) "date";
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1981 }
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1982
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1983 /* 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
1984
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1985 u = r->upstream;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1986
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1987 if (u->headers_in.chunked) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1988 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
1989 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1990
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 * 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
1993 * 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
1994 */
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1995
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1996 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
1997
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
1998 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
1999 || 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
2000 || ctx->head
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2001 || (!u->headers_in.chunked
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2002 && 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
2003 {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2004 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
2005 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2006
5072
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5012
diff changeset
2007 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
2008 u->keepalive = 0;
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5012
diff changeset
2009
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5012
diff changeset
2010 if (r->headers_in.upgrade) {
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5012
diff changeset
2011 u->upgrade = 1;
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5012
diff changeset
2012 }
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5012
diff changeset
2013 }
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5012
diff changeset
2014
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2015 return NGX_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2016 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2017
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 519
diff changeset
2018 if (rc == NGX_AGAIN) {
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 519
diff changeset
2019 return NGX_AGAIN;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 519
diff changeset
2020 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 519
diff changeset
2021
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2022 /* there was error while a header line parsing */
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2023
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2024 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
2025 "upstream sent invalid header");
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2026
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2027 return NGX_HTTP_UPSTREAM_INVALID_HEADER;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2028 }
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2029 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2030
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2031
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2032 static ngx_int_t
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2033 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
2034 {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2035 ngx_http_request_t *r = data;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2036 ngx_http_upstream_t *u;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2037 ngx_http_proxy_ctx_t *ctx;
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 u = r->upstream;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2040 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
2041
4602
8036fc6af2df Proxy: added ctx checking to input filters.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
2042 if (ctx == NULL) {
8036fc6af2df Proxy: added ctx checking to input filters.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
2043 return NGX_ERROR;
8036fc6af2df Proxy: added ctx checking to input filters.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
2044 }
8036fc6af2df Proxy: added ctx checking to input filters.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
2045
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2046 ngx_log_debug4(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
6480
f01ab2dbcfdc Fixed logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6467
diff changeset
2047 "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
2048 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
2049 u->headers_in.content_length_n);
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2050
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2051 /* 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
2052
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2053 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
2054 || 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
2055 || ctx->head)
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2056 {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2057 /* 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
2058 /* 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
2059
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2060 u->pipe->length = 0;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2061 u->length = 0;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2062 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
2063
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2064 } else if (u->headers_in.chunked) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2065 /* chunked */
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2066
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2067 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
2068 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
2069
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2070 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
2071 u->length = 1;
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2072
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2073 } 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
2074 /* 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
2075
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2076 u->pipe->length = 0;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2077 u->length = 0;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2078 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
2079
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2080 } else {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2081 /* content length or connection close */
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2082
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2083 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
2084 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
2085 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2086
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
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2090
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2091 static ngx_int_t
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2092 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
2093 {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2094 ngx_buf_t *b;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2095 ngx_chain_t *cl;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2096 ngx_http_request_t *r;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2097
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2098 if (buf->pos == buf->last) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2099 return NGX_OK;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2100 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2101
7675
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2102 if (p->upstream_done) {
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2103 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
2104 "http proxy data after close");
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2105 return NGX_OK;
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2106 }
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 if (p->length == 0) {
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2109
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2110 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
2111 "upstream sent more data than specified in "
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2112 "\"Content-Length\" header");
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2113
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2114 r = p->input_ctx;
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2115 r->upstream->keepalive = 0;
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2116 p->upstream_done = 1;
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2117
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2118 return NGX_OK;
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2119 }
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2120
5466
e7b3b9855be8 Use ngx_chain_get_free_buf() in pipe input filters.
Valentin Bartenev <vbart@nginx.com>
parents: 5441
diff changeset
2121 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
2122 if (cl == NULL) {
e7b3b9855be8 Use ngx_chain_get_free_buf() in pipe input filters.
Valentin Bartenev <vbart@nginx.com>
parents: 5441
diff changeset
2123 return NGX_ERROR;
4126
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
5466
e7b3b9855be8 Use ngx_chain_get_free_buf() in pipe input filters.
Valentin Bartenev <vbart@nginx.com>
parents: 5441
diff changeset
2126 b = cl->buf;
e7b3b9855be8 Use ngx_chain_get_free_buf() in pipe input filters.
Valentin Bartenev <vbart@nginx.com>
parents: 5441
diff changeset
2127
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2128 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
2129 b->shadow = buf;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2130 b->tag = p->tag;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2131 b->last_shadow = 1;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2132 b->recycled = 1;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2133 buf->shadow = b;
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 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
2136
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2137 if (p->in) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2138 *p->last_in = cl;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2139 } else {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2140 p->in = cl;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2141 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2142 p->last_in = &cl->next;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2143
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2144 if (p->length == -1) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2145 return NGX_OK;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2146 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2147
7675
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2148 if (b->last - b->pos > p->length) {
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2149
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2150 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
2151 "upstream sent more data than specified in "
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2152 "\"Content-Length\" header");
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2153
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2154 b->last = b->pos + p->length;
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2155 p->upstream_done = 1;
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2156
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2157 return NGX_OK;
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2158 }
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2159
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2160 p->length -= b->last - b->pos;
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 if (p->length == 0) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2163 r = p->input_ctx;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2164 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
2165 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2166
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2167 return NGX_OK;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2168 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2169
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 static ngx_int_t
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2172 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
2173 {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2174 ngx_int_t rc;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2175 ngx_buf_t *b, **prev;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2176 ngx_chain_t *cl;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2177 ngx_http_request_t *r;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2178 ngx_http_proxy_ctx_t *ctx;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2179
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2180 if (buf->pos == buf->last) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2181 return NGX_OK;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2182 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2183
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2184 r = p->input_ctx;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2185 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
2186
4602
8036fc6af2df Proxy: added ctx checking to input filters.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
2187 if (ctx == NULL) {
8036fc6af2df Proxy: added ctx checking to input filters.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
2188 return NGX_ERROR;
8036fc6af2df Proxy: added ctx checking to input filters.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
2189 }
8036fc6af2df Proxy: added ctx checking to input filters.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
2190
7676
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2191 if (p->upstream_done) {
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2192 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
2193 "http proxy data after close");
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2194 return NGX_OK;
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2195 }
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2196
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2197 if (p->length == 0) {
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2198
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2199 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
2200 "upstream sent data after final chunk");
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2201
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2202 r->upstream->keepalive = 0;
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2203 p->upstream_done = 1;
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2204
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2205 return NGX_OK;
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2206 }
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2207
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2208 b = NULL;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2209 prev = &buf->shadow;
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 for ( ;; ) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2212
4925
32030fa8cb14 Request body: chunked parsing moved to ngx_http_parse.c from proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4602
diff changeset
2213 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
2214
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2215 if (rc == NGX_OK) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2216
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2217 /* a chunk has been parsed successfully */
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2218
5466
e7b3b9855be8 Use ngx_chain_get_free_buf() in pipe input filters.
Valentin Bartenev <vbart@nginx.com>
parents: 5441
diff changeset
2219 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
2220 if (cl == NULL) {
e7b3b9855be8 Use ngx_chain_get_free_buf() in pipe input filters.
Valentin Bartenev <vbart@nginx.com>
parents: 5441
diff changeset
2221 return NGX_ERROR;
4126
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
5466
e7b3b9855be8 Use ngx_chain_get_free_buf() in pipe input filters.
Valentin Bartenev <vbart@nginx.com>
parents: 5441
diff changeset
2224 b = cl->buf;
e7b3b9855be8 Use ngx_chain_get_free_buf() in pipe input filters.
Valentin Bartenev <vbart@nginx.com>
parents: 5441
diff changeset
2225
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2226 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
2227
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2228 b->pos = buf->pos;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2229 b->start = buf->start;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2230 b->end = buf->end;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2231 b->tag = p->tag;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2232 b->temporary = 1;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2233 b->recycled = 1;
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 *prev = b;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2236 prev = &b->shadow;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2237
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2238 if (p->in) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2239 *p->last_in = cl;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2240 } else {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2241 p->in = cl;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2242 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2243 p->last_in = &cl->next;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2244
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2245 /* STUB */ b->num = buf->num;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2246
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2247 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
2248 "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
2249
4925
32030fa8cb14 Request body: chunked parsing moved to ngx_http_parse.c from proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4602
diff changeset
2250 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
2251
5359
2fda9065d0f4 Win32: Borland C compatibility fixes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5301
diff changeset
2252 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
2253 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
2254 ctx->chunked.size = 0;
4126
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 continue;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2257 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2258
4925
32030fa8cb14 Request body: chunked parsing moved to ngx_http_parse.c from proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4602
diff changeset
2259 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
2260 buf->pos = buf->last;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2261 b->last = buf->last;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2262
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2263 continue;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2264 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2265
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2266 if (rc == NGX_DONE) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2267
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2268 /* 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
2269
7676
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2270 p->length = 0;
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2271 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
2272
7676
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2273 if (buf->pos != buf->last) {
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2274 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
2275 "upstream sent data after final chunk");
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2276 r->upstream->keepalive = 0;
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2277 }
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2278
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2279 break;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2280 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2281
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2282 if (rc == NGX_AGAIN) {
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 /* 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
2285
4925
32030fa8cb14 Request body: chunked parsing moved to ngx_http_parse.c from proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4602
diff changeset
2286 p->length = ctx->chunked.length;
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2287
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2288 break;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2289 }
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 /* invalid response */
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2292
7677
a786e491d08d Proxy: style.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7676
diff changeset
2293 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
2294 "upstream sent invalid chunked response");
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2295
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2296 return NGX_ERROR;
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
7677
a786e491d08d Proxy: style.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7676
diff changeset
2299 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, p->log, 0,
6480
f01ab2dbcfdc Fixed logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6467
diff changeset
2300 "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
2301 ctx->chunked.state, p->length);
4126
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 (b) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2304 b->shadow = buf;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2305 b->last_shadow = 1;
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 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
2308 "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
2309
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2310 return NGX_OK;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2311 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2312
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2313 /* 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
2314
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2315 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
2316 return NGX_ERROR;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2317 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2318
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2319 return NGX_OK;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2320 }
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
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2323 static ngx_int_t
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2324 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
2325 {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2326 ngx_http_request_t *r = data;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2327
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2328 ngx_buf_t *b;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2329 ngx_chain_t *cl, **ll;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2330 ngx_http_upstream_t *u;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2331
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2332 u = r->upstream;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2333
7760
83c4622053b0 Upstream: fixed zero size buf alerts on extra data (ticket #2117).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7730
diff changeset
2334 if (u->length == 0) {
83c4622053b0 Upstream: fixed zero size buf alerts on extra data (ticket #2117).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7730
diff changeset
2335 ngx_log_error(NGX_LOG_WARN, r->connection->log, 0,
83c4622053b0 Upstream: fixed zero size buf alerts on extra data (ticket #2117).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7730
diff changeset
2336 "upstream sent more data than specified in "
83c4622053b0 Upstream: fixed zero size buf alerts on extra data (ticket #2117).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7730
diff changeset
2337 "\"Content-Length\" header");
83c4622053b0 Upstream: fixed zero size buf alerts on extra data (ticket #2117).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7730
diff changeset
2338 return NGX_OK;
83c4622053b0 Upstream: fixed zero size buf alerts on extra data (ticket #2117).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7730
diff changeset
2339 }
83c4622053b0 Upstream: fixed zero size buf alerts on extra data (ticket #2117).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7730
diff changeset
2340
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2341 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
2342 ll = &cl->next;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2343 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2344
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2345 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
2346 if (cl == NULL) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2347 return NGX_ERROR;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2348 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2349
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2350 *ll = cl;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2351
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2352 cl->buf->flush = 1;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2353 cl->buf->memory = 1;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2354
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2355 b = &u->buffer;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2356
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2357 cl->buf->pos = b->last;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2358 b->last += bytes;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2359 cl->buf->last = b->last;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2360 cl->buf->tag = u->output.tag;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2361
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2362 if (u->length == -1) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2363 return NGX_OK;
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
7675
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2366 if (bytes > u->length) {
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2367
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2368 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
2369 "upstream sent more data than specified in "
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2370 "\"Content-Length\" header");
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2371
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2372 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
2373 u->length = 0;
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2374
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2375 return NGX_OK;
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2376 }
9afa45068b8f Proxy: drop extra data sent by upstream.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7473
diff changeset
2377
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2378 u->length -= bytes;
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 if (u->length == 0) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2381 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
2382 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2383
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2384 return NGX_OK;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2385 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2386
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2387
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2388 static ngx_int_t
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2389 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
2390 {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2391 ngx_http_request_t *r = data;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2392
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2393 ngx_int_t rc;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2394 ngx_buf_t *b, *buf;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2395 ngx_chain_t *cl, **ll;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2396 ngx_http_upstream_t *u;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2397 ngx_http_proxy_ctx_t *ctx;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2398
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2399 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
2400
8036fc6af2df Proxy: added ctx checking to input filters.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
2401 if (ctx == NULL) {
8036fc6af2df Proxy: added ctx checking to input filters.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
2402 return NGX_ERROR;
8036fc6af2df Proxy: added ctx checking to input filters.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
2403 }
8036fc6af2df Proxy: added ctx checking to input filters.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4593
diff changeset
2404
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2405 u = r->upstream;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2406 buf = &u->buffer;
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 buf->pos = buf->last;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2409 buf->last += bytes;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2410
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2411 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
2412 ll = &cl->next;
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
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2415 for ( ;; ) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2416
4925
32030fa8cb14 Request body: chunked parsing moved to ngx_http_parse.c from proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4602
diff changeset
2417 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
2418
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2419 if (rc == NGX_OK) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2420
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2421 /* a chunk has been parsed successfully */
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2422
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2423 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
2424 if (cl == NULL) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2425 return NGX_ERROR;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2426 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2427
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2428 *ll = cl;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2429 ll = &cl->next;
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 b = cl->buf;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2432
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2433 b->flush = 1;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2434 b->memory = 1;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2435
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2436 b->pos = buf->pos;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2437 b->tag = u->output.tag;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2438
4925
32030fa8cb14 Request body: chunked parsing moved to ngx_http_parse.c from proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4602
diff changeset
2439 if (buf->last - buf->pos >= ctx->chunked.size) {
5359
2fda9065d0f4 Win32: Borland C compatibility fixes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5301
diff changeset
2440 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
2441 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
2442 ctx->chunked.size = 0;
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2443
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2444 } else {
4925
32030fa8cb14 Request body: chunked parsing moved to ngx_http_parse.c from proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4602
diff changeset
2445 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
2446 buf->pos = buf->last;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2447 b->last = buf->last;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2448 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2449
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2450 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
2451 "http proxy out buf %p %z",
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2452 b->pos, b->last - b->pos);
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 continue;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2455 }
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 if (rc == NGX_DONE) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2458
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2459 /* 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
2460
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2461 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
2462 u->length = 0;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2463
7676
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2464 if (buf->pos != buf->last) {
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2465 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
2466 "upstream sent data after final chunk");
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2467 u->keepalive = 0;
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2468 }
d225b70d38b6 Proxy: detection of data after final chunk.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7675
diff changeset
2469
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2470 break;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2471 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2472
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2473 if (rc == NGX_AGAIN) {
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2474 break;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2475 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2476
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2477 /* invalid response */
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2478
4145
f321e9750c8c Proxy: logging levels tuned, double logging fixed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4144
diff changeset
2479 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
2480 "upstream sent invalid chunked response");
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2481
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2482 return NGX_ERROR;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2483 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2484
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2485 return NGX_OK;
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2486 }
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2487
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
2488
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2489 static void
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2490 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
2491 {
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2492 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
2493 "abort http proxy request");
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2494
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2495 return;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2496 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2497
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2498
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2499 static void
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2500 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
2501 {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2502 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
2503 "finalize http proxy request");
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2504
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2505 return;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2506 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2507
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 static ngx_int_t
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2510 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
2511 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
2512 {
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2513 ngx_http_proxy_ctx_t *ctx;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2514
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2515 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
2516
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2517 if (ctx == NULL) {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2518 v->not_found = 1;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2519 return NGX_OK;
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
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2522 v->len = ctx->vars.host_header.len;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2523 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1563
diff changeset
2524 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2525 v->not_found = 0;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2526 v->data = ctx->vars.host_header.data;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2527
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2528 return NGX_OK;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2529 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2530
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2531
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2532 static ngx_int_t
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2533 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
2534 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
2535 {
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2536 ngx_http_proxy_ctx_t *ctx;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2537
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2538 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
2539
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2540 if (ctx == NULL) {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2541 v->not_found = 1;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2542 return NGX_OK;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2543 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2544
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2545 v->len = ctx->vars.port.len;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2546 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1563
diff changeset
2547 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2548 v->not_found = 0;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2549 v->data = ctx->vars.port.data;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2550
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2551 return NGX_OK;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2552 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2553
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2554
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2555 static ngx_int_t
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2556 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
2557 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
2558 {
5084
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2559 size_t len;
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2560 u_char *p;
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2561 ngx_uint_t i, n;
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2562 ngx_table_elt_t **h;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2563
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2564 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1563
diff changeset
2565 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2566 v->not_found = 0;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2567
5084
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2568 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
2569 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
2570
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2571 len = 0;
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2572
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2573 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
2574 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
2575 }
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2576
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2577 if (len == 0) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2578 v->len = r->connection->addr_text.len;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2579 v->data = r->connection->addr_text.data;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2580 return NGX_OK;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2581 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2582
5084
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2583 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
2584
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2585 p = ngx_pnalloc(r->pool, len);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2586 if (p == NULL) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2587 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2588 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2589
5084
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2590 v->len = len;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2591 v->data = p;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2592
5084
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2593 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
2594 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
2595 *p++ = ','; *p++ = ' ';
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
2596 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2597
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2598 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
2599
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
2600 return NGX_OK;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2601 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2602
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2603
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2604 static ngx_int_t
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2605 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
2606 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
2607 {
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2608 ngx_http_proxy_ctx_t *ctx;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2609
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
2610 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
2611
4927
93294110728f Request body: always use calculated size of a request body in proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4925
diff changeset
2612 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
2613 v->not_found = 1;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2614 return NGX_OK;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2615 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2616
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2617 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1563
diff changeset
2618 v->no_cacheable = 0;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2619 v->not_found = 0;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2620
5188
886800caf360 Proxy: allocate $proxy_internal_body_length from request pool.
Ruslan Ermilov <ru@nginx.com>
parents: 5084
diff changeset
2621 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
2622
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2623 if (v->data == NULL) {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2624 return NGX_ERROR;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2625 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2626
4927
93294110728f Request body: always use calculated size of a request body in proxy.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4925
diff changeset
2627 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
2628
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2629 return NGX_OK;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2630 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2631
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2632
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2633 static ngx_int_t
6051
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2634 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
2635 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
2636 {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2637 ngx_http_proxy_ctx_t *ctx;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2638
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2639 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
2640
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2641 if (ctx == NULL || !ctx->internal_chunked) {
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2642 v->not_found = 1;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2643 return NGX_OK;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2644 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2645
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2646 v->valid = 1;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2647 v->no_cacheable = 0;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2648 v->not_found = 0;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2649
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2650 v->data = (u_char *) "chunked";
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2651 v->len = sizeof("chunked") - 1;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2652
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2653 return NGX_OK;
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2654 }
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2655
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2656
d97e6be2d292 Proxy: proxy_request_buffering chunked support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6050
diff changeset
2657 static ngx_int_t
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2658 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
2659 size_t prefix)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2660 {
4462
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
2661 size_t len;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2662 ngx_int_t rc;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2663 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
2664 ngx_http_proxy_rewrite_t *pr;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2665 ngx_http_proxy_loc_conf_t *plcf;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2666
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2667 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
2668
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2669 pr = plcf->redirects->elts;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2670
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2671 if (pr == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2672 return NGX_DECLINED;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2673 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2674
4462
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
2675 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
2676
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2677 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
2678 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
2679
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2680 if (rc != NGX_DECLINED) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2681 return rc;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2682 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2683 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2684
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2685 return NGX_DECLINED;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2686 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2687
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2688
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2689 static ngx_int_t
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2690 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
2691 {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2692 u_char *p;
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2693 size_t len;
4466
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2694 ngx_int_t rc, rv;
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2695 ngx_str_t *key, *value;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2696 ngx_uint_t i;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2697 ngx_array_t attrs;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2698 ngx_keyval_t *attr;
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2699 ngx_http_proxy_loc_conf_t *plcf;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2700
7720
a88384c69d1e Proxy: error checking for array init, missed in 7716:d6a5e14aa3e4.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7716
diff changeset
2701 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
2702 return NGX_ERROR;
a88384c69d1e Proxy: error checking for array init, missed in 7716:d6a5e14aa3e4.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7716
diff changeset
2703 }
7716
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 (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
2706 return NGX_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2707 }
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 attr = attrs.elts;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2710
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2711 if (attr[0].value.data == NULL) {
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2712 return NGX_DECLINED;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2713 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2714
4466
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2715 rv = NGX_DECLINED;
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2716
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2717 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
2718
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2719 for (i = 1; i < attrs.nelts; i++) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2720
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2721 key = &attr[i].key;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2722 value = &attr[i].value;
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 if (plcf->cookie_domains && key->len == 6
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2725 && 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
2726 && value->data)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2727 {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2728 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
2729 plcf->cookie_domains);
4466
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2730 if (rc == NGX_ERROR) {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2731 return NGX_ERROR;
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 if (rc != NGX_DECLINED) {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2735 rv = rc;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2736 }
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2737 }
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2738
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2739 if (plcf->cookie_paths && key->len == 4
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2740 && 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
2741 && value->data)
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 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
2744 plcf->cookie_paths);
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2745 if (rc == NGX_ERROR) {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2746 return NGX_ERROR;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2747 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2748
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2749 if (rc != NGX_DECLINED) {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2750 rv = rc;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2751 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2752 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2753 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
2754
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2755 if (plcf->cookie_flags) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2756 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
2757 plcf->cookie_flags);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2758 if (rc == NGX_ERROR) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2759 return NGX_ERROR;
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 (rc != NGX_DECLINED) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2763 rv = rc;
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 attr = attrs.elts;
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
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2769 if (rv != NGX_OK) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2770 return rv;
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 len = 0;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2774
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2775 for (i = 0; i < attrs.nelts; i++) {
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 if (attr[i].key.data == NULL) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2778 continue;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2779 }
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 if (i > 0) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2782 len += 2;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2783 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2784
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2785 len += attr[i].key.len;
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 (attr[i].value.data) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2788 len += 1 + attr[i].value.len;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2789 }
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_pnalloc(r->pool, len + 1);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2793 if (p == NULL) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2794 return NGX_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2795 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2796
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2797 h->value.data = p;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2798 h->value.len = len;
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 for (i = 0; i < attrs.nelts; i++) {
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 if (attr[i].key.data == NULL) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2803 continue;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2804 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2805
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2806 if (i > 0) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2807 *p++ = ';';
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2808 *p++ = ' ';
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2809 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2810
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2811 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
2812
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2813 if (attr[i].value.data) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2814 *p++ = '=';
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2815 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
2816 }
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
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2819 *p = '\0';
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2820
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2821 return NGX_OK;
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2822 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2823
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2824
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2825 static ngx_int_t
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2826 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
2827 {
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2828 u_char *start, *end, *p, *last;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2829 ngx_str_t name, val;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2830 ngx_keyval_t *attr;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2831
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2832 start = value->data;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2833 end = value->data + value->len;
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 for ( ;; ) {
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 last = (u_char *) ngx_strchr(start, ';');
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 if (last == NULL) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2840 last = end;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2841 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2842
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2843 while (start < last && *start == ' ') { start++; }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2844
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2845 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
2846
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2847 name.data = start;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2848 name.len = p - start;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2849
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2850 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
2851 name.len--;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2852 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2853
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2854 if (p < last) {
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 p++;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2857
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2858 while (p < last && *p == ' ') { p++; }
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 val.data = p;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2861 val.len = last - val.data;
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 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
2864 val.len--;
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 } else {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2868 ngx_str_null(&val);
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 attr = ngx_array_push(attrs);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2872 if (attr == NULL) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2873 return NGX_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2874 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2875
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2876 attr->key = name;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2877 attr->value = val;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2878
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2879 if (last == end) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2880 break;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2881 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2882
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2883 start = last + 1;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2884 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2885
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2886 return NGX_OK;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2887 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2888
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2889
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2890 static ngx_int_t
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2891 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
2892 ngx_array_t *rewrites)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2893 {
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2894 ngx_int_t rc;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2895 ngx_uint_t i;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2896 ngx_http_proxy_rewrite_t *pr;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2897
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2898 pr = rewrites->elts;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2899
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2900 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
2901 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
2902
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2903 if (rc != NGX_DECLINED) {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2904 return rc;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2905 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2906 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2907
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2908 return NGX_DECLINED;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2909 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2910
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2911
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
2912 static ngx_int_t
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2913 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
2914 ngx_array_t *flags)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2915 {
7786
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2916 ngx_str_t pattern, value;
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2917 #if (NGX_PCRE)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2918 ngx_int_t rc;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2919 #endif
7786
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2920 ngx_uint_t i, m, f, nelts;
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2921 ngx_keyval_t *attr;
7786
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2922 ngx_conf_bitmask_t *mask;
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2923 ngx_http_complex_value_t *flags_values;
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2924 ngx_http_proxy_cookie_flags_t *pcf;
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 attr = attrs->elts;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2927 pcf = flags->elts;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2928
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2929 for (i = 0; i < flags->nelts; i++) {
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 #if (NGX_PCRE)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2932 if (pcf[i].regex) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2933 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
2934
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2935 if (rc == NGX_ERROR) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2936 return NGX_ERROR;
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
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2939 if (rc == NGX_OK) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2940 break;
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
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2943 /* 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 continue;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2946 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2947 #endif
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 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
2950 != NGX_OK)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2951 {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2952 return NGX_ERROR;
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
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2955 if (pattern.len == attr[0].key.len
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2956 && 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
2957 == 0)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2958 {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2959 break;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2960 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2961 }
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 (i == flags->nelts) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
2964 return NGX_DECLINED;
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
7786
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2967 nelts = pcf[i].flags_values.nelts;
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2968 flags_values = pcf[i].flags_values.elts;
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2969
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2970 mask = ngx_http_proxy_cookie_flags_masks;
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2971 f = 0;
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2972
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2973 for (i = 0; i < nelts; i++) {
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2974
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2975 if (ngx_http_complex_value(r, &flags_values[i], &value) != NGX_OK) {
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2976 return NGX_ERROR;
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2977 }
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2978
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2979 if (value.len == 0) {
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2980 continue;
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2981 }
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2982
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2983 for (m = 0; mask[m].name.len != 0; m++) {
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2984
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2985 if (mask[m].name.len != value.len
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2986 || ngx_strncasecmp(mask[m].name.data, value.data, value.len)
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2987 != 0)
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2988 {
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2989 continue;
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2990 }
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2991
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2992 f |= mask[m].mask;
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2993
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2994 break;
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2995 }
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2996
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2997 if (mask[m].name.len == 0) {
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2998 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
2999 "invalid proxy_cookie_flags flag \"%V\"", &value);
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
3000 }
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
3001 }
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
3002
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
3003 if (f == 0) {
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
3004 return NGX_DECLINED;
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
3005 }
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
3006
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
3007 return ngx_http_proxy_edit_cookie_flags(r, attrs, f);
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3008 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3009
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 static ngx_int_t
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3012 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
3013 ngx_uint_t flags)
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 ngx_str_t *key, *value;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3016 ngx_uint_t i;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3017 ngx_keyval_t *attr;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3018
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3019 attr = attrs->elts;
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 for (i = 1; i < attrs->nelts; i++) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3022 key = &attr[i].key;
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 if (key->len == 6
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3025 && 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
3026 {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3027 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
3028 flags &= ~NGX_HTTP_PROXY_COOKIE_SECURE_ON;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3029
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3030 } 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
3031 key->data = NULL;
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
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3034 continue;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3035 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3036
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3037 if (key->len == 8
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3038 && 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
3039 {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3040 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
3041 flags &= ~NGX_HTTP_PROXY_COOKIE_HTTPONLY_ON;
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 } 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
3044 key->data = NULL;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3045 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3046
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3047 continue;
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
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3050 if (key->len == 8
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3051 && 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
3052 {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3053 value = &attr[i].value;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3054
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3055 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
3056 flags &= ~NGX_HTTP_PROXY_COOKIE_SAMESITE_STRICT;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3057
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3058 if (value->len != 6
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3059 || 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
3060 != 0)
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(key, "SameSite");
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3063 ngx_str_set(value, "Strict");
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3064 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3065
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3066 } 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
3067 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
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3069 if (value->len != 3
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3070 || 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
3071 {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3072 ngx_str_set(key, "SameSite");
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3073 ngx_str_set(value, "Lax");
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
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3076 } 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
3077 flags &= ~NGX_HTTP_PROXY_COOKIE_SAMESITE_NONE;
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 if (value->len != 4
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3080 || 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
3081 {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3082 ngx_str_set(key, "SameSite");
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3083 ngx_str_set(value, "None");
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3084 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3085
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3086 } 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
3087 key->data = NULL;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3088 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3089
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3090 continue;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3091 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3092 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3093
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3094 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
3095 attr = ngx_array_push(attrs);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3096 if (attr == NULL) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3097 return NGX_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3098 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3099
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3100 ngx_str_set(&attr->key, "Secure");
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3101 ngx_str_null(&attr->value);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3102 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3103
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3104 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
3105 attr = ngx_array_push(attrs);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3106 if (attr == NULL) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3107 return NGX_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3108 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3109
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3110 ngx_str_set(&attr->key, "HttpOnly");
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3111 ngx_str_null(&attr->value);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3112 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3113
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3114 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
3115 |NGX_HTTP_PROXY_COOKIE_SAMESITE_LAX
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3116 |NGX_HTTP_PROXY_COOKIE_SAMESITE_NONE))
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3117 {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3118 attr = ngx_array_push(attrs);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3119 if (attr == NULL) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3120 return NGX_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3121 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3122
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3123 ngx_str_set(&attr->key, "SameSite");
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3124
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3125 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
3126 ngx_str_set(&attr->value, "Strict");
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3127
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3128 } 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
3129 ngx_str_set(&attr->value, "Lax");
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3130
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3131 } else {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3132 ngx_str_set(&attr->value, "None");
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3133 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3134 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3135
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3136 return NGX_OK;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3137 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3138
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3139
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3140 static ngx_int_t
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3141 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
3142 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
3143 {
4462
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3144 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
3145
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
3146 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
3147 return NGX_ERROR;
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
3148 }
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
3149
4462
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3150 if (pattern.len > len
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3151 || 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
3152 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3153 return NGX_DECLINED;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3154 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3155
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
3156 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
3157 return NGX_ERROR;
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
3158 }
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
3159
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3160 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
3161 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3162
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3163
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
3164 #if (NGX_PCRE)
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
3165
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3166 static ngx_int_t
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3167 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
3168 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
3169 {
4462
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3170 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
3171
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3172 pattern.len = len;
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3173 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
3174
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
3175 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
3176 return NGX_DECLINED;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3177 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3178
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
3179 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
3180 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3181 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3182
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3183 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
3184 }
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3185
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3186 #endif
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
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3189 static ngx_int_t
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3190 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
3191 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
3192 {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3193 u_char *p;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3194 ngx_str_t pattern, replacement;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3195
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3196 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
3197 return NGX_ERROR;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3198 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3199
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3200 p = value->data + prefix;
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3201
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3202 if (len && p[0] == '.') {
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3203 p++;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3204 prefix++;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3205 len--;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3206 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3207
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3208 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
3209 return NGX_DECLINED;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3210 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3211
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3212 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
3213 return NGX_ERROR;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3214 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3215
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3216 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
3217 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3218
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3219
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3220 static ngx_int_t
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3221 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
3222 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
3223 {
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3224 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
3225 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
3226
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3227 if (len == value->len) {
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3228 *value = *replacement;
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3229 return NGX_OK;
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3230 }
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3231
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3232 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
3233
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3234 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
3235
5676
fbfdf8017748 Proxy: fixed possible uninitialized memory access.
Valentin Bartenev <vbart@nginx.com>
parents: 5661
diff changeset
3236 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
3237 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
3238 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
3239 }
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3240
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3241 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
3242 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
3243
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3244 ngx_memcpy(p, value->data + prefix + len,
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3245 value->len - len - prefix + 1);
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3246
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3247 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
3248
a73c63bdce32 Proxy: generic rewrite code from the "proxy_redirect" handlers moved to a
Valentin Bartenev <vbart@nginx.com>
parents: 4461
diff changeset
3249 } else {
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3250 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
3251
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3252 ngx_memmove(p, value->data + prefix + len,
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3253 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
3254 }
3d51ba7f347b Fixed: proxy_redirect with regex might broke Refresh header.
Valentin Bartenev <vbart@nginx.com>
parents: 4385
diff changeset
3255
7715
5c7917292b29 Proxy: changed interface of some internal functions.
Ruslan Ermilov <ru@nginx.com>
parents: 7714
diff changeset
3256 value->len = new_len;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3257
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3258 return NGX_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3259 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3260
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3261
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3262 static ngx_int_t
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3263 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
3264 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3265 ngx_http_variable_t *var, *v;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3266
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3267 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
3268 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
3269 if (var == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3270 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3271 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3272
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
3273 var->get_handler = v->get_handler;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3274 var->data = v->data;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3275 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3276
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3277 return NGX_OK;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3278 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3279
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3280
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3281 static void *
5951
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3282 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
3283 {
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3284 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
3285
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3286 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
3287 if (conf == NULL) {
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3288 return NULL;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3289 }
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3290
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3291 #if (NGX_HTTP_CACHE)
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3292 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
3293 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
3294 != NGX_OK)
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3295 {
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3296 return NULL;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3297 }
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3298 #endif
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3299
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3300 return conf;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3301 }
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3302
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3303
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
3304 static void *
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3305 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
3306 {
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3307 ngx_http_proxy_loc_conf_t *conf;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3308
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3309 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
3310 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
3311 return NULL;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3312 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3313
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3314 /*
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3315 * set by ngx_pcalloc():
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3316 *
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3317 * conf->upstream.bufs.num = 0;
2786
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2784
diff changeset
3318 * conf->upstream.ignore_headers = 0;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3319 * conf->upstream.next_upstream = 0;
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3320 * conf->upstream.cache_zone = NULL;
2875
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
3321 * conf->upstream.cache_use_stale = 0;
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
3322 * conf->upstream.cache_methods = 0;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3323 * conf->upstream.temp_path = NULL;
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
3324 * 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
3325 * conf->upstream.store_lengths = NULL;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3326 * conf->upstream.store_values = NULL;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3327 *
7238
06cf0c4b8618 Upstream: fixed comments after 13f8dec720b5.
Ruslan Ermilov <ru@nginx.com>
parents: 7220
diff changeset
3328 * conf->location = NULL;
06cf0c4b8618 Upstream: fixed comments after 13f8dec720b5.
Ruslan Ermilov <ru@nginx.com>
parents: 7220
diff changeset
3329 * conf->url = { 0, NULL };
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3330 * conf->headers.lengths = NULL;
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3331 * conf->headers.values = NULL;
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3332 * 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
3333 * conf->headers_cache.lengths = NULL;
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3334 * conf->headers_cache.values = NULL;
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3335 * 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
3336 * conf->body_lengths = NULL;
29fa5023bd6f Proxy: renamed and rearranged fields in proxy configuration.
Roman Arutyunyan <arut@nginx.com>
parents: 5909
diff changeset
3337 * conf->body_values = NULL;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3338 * conf->body_source = { 0, NULL };
3470
b982f2dee8cf fix proxy_redirect name in error message
Igor Sysoev <igor@sysoev.ru>
parents: 3399
diff changeset
3339 * conf->redirects = NULL;
5385
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
3340 * conf->ssl = 0;
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
3341 * conf->ssl_protocols = 0;
5390
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
3342 * conf->ssl_ciphers = { 0, NULL };
5661
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
3343 * conf->ssl_trusted_certificate = { 0, NULL };
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
3344 * conf->ssl_crl = { 0, NULL };
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3345 */
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3346
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3347 conf->upstream.store = NGX_CONF_UNSET;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3348 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
3349 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
3350 conf->upstream.buffering = NGX_CONF_UNSET;
6050
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
3351 conf->upstream.request_buffering = NGX_CONF_UNSET;
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
3352 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
3353 conf->upstream.force_ranges = NGX_CONF_UNSET;
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
3354
5008
fd84344f1df7 Fixed and improved the "*_bind" directives of proxying modules.
Ruslan Ermilov <ru@nginx.com>
parents: 4962
diff changeset
3355 conf->upstream.local = NGX_CONF_UNSET_PTR;
7371
8b68d50090e4 Upstream: proxy_socket_keepalive and friends.
Vladimir Homutov <vl@nginx.com>
parents: 7321
diff changeset
3356 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
3357
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3358 conf->upstream.connect_timeout = NGX_CONF_UNSET_MSEC;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3359 conf->upstream.send_timeout = NGX_CONF_UNSET_MSEC;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3360 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
3361 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
3362
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3363 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
3364 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
3365 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
3366
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3367 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
3368 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
3369 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
3370
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3371 conf->upstream.pass_request_headers = NGX_CONF_UNSET;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3372 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
3373
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3374 #if (NGX_HTTP_CACHE)
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3375 conf->upstream.cache = NGX_CONF_UNSET;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3376 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
3377 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
3378 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
3379 conf->upstream.no_cache = NGX_CONF_UNSET_PTR;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3380 conf->upstream.cache_valid = NGX_CONF_UNSET_PTR;
4385
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
3381 conf->upstream.cache_lock = NGX_CONF_UNSET;
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
3382 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
3383 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
3384 conf->upstream.cache_revalidate = NGX_CONF_UNSET;
6290
4d5ac1a31d44 Upstream: proxy_cache_convert_head directive.
Roman Arutyunyan <arut@nginx.com>
parents: 6157
diff changeset
3385 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
3386 conf->upstream.cache_background_update = NGX_CONF_UNSET;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3387 #endif
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3388
1701
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
3389 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
3390 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
3391
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3392 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
3393
2184
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
3394 #if (NGX_HTTP_SSL)
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
3395 conf->upstream.ssl_session_reuse = NGX_CONF_UNSET;
7831
bdd4d89370a7 Changed complex value slots to use NGX_CONF_UNSET_PTR.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7787
diff changeset
3396 conf->upstream.ssl_name = NGX_CONF_UNSET_PTR;
5660
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
3397 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
3398 conf->upstream.ssl_verify = NGX_CONF_UNSET;
7833
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
3399 conf->upstream.ssl_certificate = NGX_CONF_UNSET_PTR;
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
3400 conf->upstream.ssl_certificate_key = NGX_CONF_UNSET_PTR;
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
3401 conf->upstream.ssl_passwords = NGX_CONF_UNSET_PTR;
5661
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
3402 conf->ssl_verify_depth = NGX_CONF_UNSET_UINT;
7730
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
3403 conf->ssl_conf_commands = NGX_CONF_UNSET_PTR;
2184
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
3404 #endif
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3405
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3406 /* "proxy_cyclic_temp_file" is disabled */
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3407 conf->upstream.cyclic_temp_file = 0;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3408
7831
bdd4d89370a7 Changed complex value slots to use NGX_CONF_UNSET_PTR.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7787
diff changeset
3409 conf->upstream.change_buffering = 1;
bdd4d89370a7 Changed complex value slots to use NGX_CONF_UNSET_PTR.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7787
diff changeset
3410
7728
485dba3e2a01 Core: ngx_conf_set_keyval_slot() now accepts NGX_CONF_UNSET_PTR.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7720
diff changeset
3411 conf->headers_source = NGX_CONF_UNSET_PTR;
485dba3e2a01 Core: ngx_conf_set_keyval_slot() now accepts NGX_CONF_UNSET_PTR.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7720
diff changeset
3412
7831
bdd4d89370a7 Changed complex value slots to use NGX_CONF_UNSET_PTR.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7787
diff changeset
3413 conf->method = NGX_CONF_UNSET_PTR;
bdd4d89370a7 Changed complex value slots to use NGX_CONF_UNSET_PTR.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7787
diff changeset
3414
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3415 conf->redirect = NGX_CONF_UNSET;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3416
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3417 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
3418 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
3419 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
3420
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
3421 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
3422
1180
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
3423 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
3424 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
3425
3976
215fe9223419 update r3945 with more descriptive error message
Igor Sysoev <igor@sysoev.ru>
parents: 3862
diff changeset
3426 ngx_str_set(&conf->upstream.module, "proxy");
215fe9223419 update r3945 with more descriptive error message
Igor Sysoev <igor@sysoev.ru>
parents: 3862
diff changeset
3427
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3428 return conf;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3429 }
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
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3432 static char *
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3433 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
3434 {
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3435 ngx_http_proxy_loc_conf_t *prev = parent;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3436 ngx_http_proxy_loc_conf_t *conf = child;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3437
3862
f4c49c9e4bb5 always test proxy_redirect with slash, this fixes a case when nginx uses
Igor Sysoev <igor@sysoev.ru>
parents: 3734
diff changeset
3438 u_char *p;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3439 size_t size;
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3440 ngx_int_t rc;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3441 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
3442 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
3443 ngx_http_proxy_rewrite_t *pr;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3444 ngx_http_script_compile_t sc;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3445
5948
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
3446 #if (NGX_HTTP_CACHE)
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
3447
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
3448 if (conf->upstream.store > 0) {
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3449 conf->upstream.cache = 0;
5948
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
3450 }
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
3451
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3452 if (conf->upstream.cache > 0) {
5948
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
3453 conf->upstream.store = 0;
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
3454 }
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
3455
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
3456 #endif
f2ff0aa89126 Upstream: mutually exclusive inheritance of "cache" and "store".
Valentin Bartenev <vbart@nginx.com>
parents: 5947
diff changeset
3457
5940
e3b3b89d74e8 Upstream: fixed inheritance of proxy_store and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5939
diff changeset
3458 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
3459 ngx_conf_merge_value(conf->upstream.store,
2894
d26f4e80c71f style fix
Igor Sysoev <igor@sysoev.ru>
parents: 2875
diff changeset
3460 prev->upstream.store, 0);
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3461
5947
d9025ea1f5a5 Upstream: simplified proxy_store and friends configuration code.
Valentin Bartenev <vbart@nginx.com>
parents: 5940
diff changeset
3462 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
3463 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
3464 }
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3465
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
3466 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
3467 prev->upstream.store_access, 0600);
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1244
diff changeset
3468
5832
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5738
diff changeset
3469 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
3470 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
3471
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
3472 ngx_conf_merge_value(conf->upstream.buffering,
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
3473 prev->upstream.buffering, 1);
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
3474
6050
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
3475 ngx_conf_merge_value(conf->upstream.request_buffering,
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
3476 prev->upstream.request_buffering, 1);
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6043
diff changeset
3477
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
3478 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
3479 prev->upstream.ignore_client_abort, 0);
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 627
diff changeset
3480
5874
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5832
diff changeset
3481 ngx_conf_merge_value(conf->upstream.force_ranges,
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5832
diff changeset
3482 prev->upstream.force_ranges, 0);
2aff40b3dea2 Upstream: proxy_force_ranges and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5832
diff changeset
3483
5008
fd84344f1df7 Fixed and improved the "*_bind" directives of proxying modules.
Ruslan Ermilov <ru@nginx.com>
parents: 4962
diff changeset
3484 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
3485 prev->upstream.local, NULL);
fd84344f1df7 Fixed and improved the "*_bind" directives of proxying modules.
Ruslan Ermilov <ru@nginx.com>
parents: 4962
diff changeset
3486
7371
8b68d50090e4 Upstream: proxy_socket_keepalive and friends.
Vladimir Homutov <vl@nginx.com>
parents: 7321
diff changeset
3487 ngx_conf_merge_value(conf->upstream.socket_keepalive,
8b68d50090e4 Upstream: proxy_socket_keepalive and friends.
Vladimir Homutov <vl@nginx.com>
parents: 7321
diff changeset
3488 prev->upstream.socket_keepalive, 0);
8b68d50090e4 Upstream: proxy_socket_keepalive and friends.
Vladimir Homutov <vl@nginx.com>
parents: 7321
diff changeset
3489
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3490 ngx_conf_merge_msec_value(conf->upstream.connect_timeout,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3491 prev->upstream.connect_timeout, 60000);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3492
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3493 ngx_conf_merge_msec_value(conf->upstream.send_timeout,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3494 prev->upstream.send_timeout, 60000);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3495
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3496 ngx_conf_merge_msec_value(conf->upstream.read_timeout,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3497 prev->upstream.read_timeout, 60000);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3498
5832
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 5738
diff changeset
3499 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
3500 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
3501
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3502 ngx_conf_merge_size_value(conf->upstream.send_lowat,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3503 prev->upstream.send_lowat, 0);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3504
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
3505 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
3506 prev->upstream.buffer_size,
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3507 (size_t) ngx_pagesize);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3508
5883
973ee2276300 Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5874
diff changeset
3509 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
3510 prev->upstream.limit_rate, 0);
973ee2276300 Upstream: proxy_limit_rate and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5874
diff changeset
3511
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3512 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
3513 8, ngx_pagesize);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3514
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3515 if (conf->upstream.bufs.num < 2) {
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3516 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
3517 "there must be at least 2 \"proxy_buffers\"");
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3518 return NGX_CONF_ERROR;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3519 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3520
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3521
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 579
diff changeset
3522 size = conf->upstream.buffer_size;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3523 if (size < conf->upstream.bufs.size) {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3524 size = conf->upstream.bufs.size;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3525 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3526
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3527
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3528 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
3529 prev->upstream.busy_buffers_size_conf,
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3530 NGX_CONF_UNSET_SIZE);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3531
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3532 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
3533 conf->upstream.busy_buffers_size = 2 * size;
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3534 } else {
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3535 conf->upstream.busy_buffers_size =
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3536 conf->upstream.busy_buffers_size_conf;
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3537 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3538
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3539 if (conf->upstream.busy_buffers_size < size) {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3540 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
3541 "\"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
3542 "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
3543 "one of the \"proxy_buffers\"");
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3544
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3545 return NGX_CONF_ERROR;
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3546 }
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3547
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3548 if (conf->upstream.busy_buffers_size
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3549 > (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
3550 {
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3551 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3552 "\"proxy_busy_buffers_size\" must be less than "
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3553 "the size of all \"proxy_buffers\" minus one buffer");
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3554
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3555 return NGX_CONF_ERROR;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3556 }
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3557
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3558
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3559 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
3560 prev->upstream.temp_file_write_size_conf,
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3561 NGX_CONF_UNSET_SIZE);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3562
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3563 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
3564 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
3565 } else {
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3566 conf->upstream.temp_file_write_size =
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3567 conf->upstream.temp_file_write_size_conf;
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3568 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3569
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3570 if (conf->upstream.temp_file_write_size < size) {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3571 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
3572 "\"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
3573 "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
3574 "one of the \"proxy_buffers\"");
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3575
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3576 return NGX_CONF_ERROR;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3577 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3578
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3579 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
3580 prev->upstream.max_temp_file_size_conf,
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3581 NGX_CONF_UNSET_SIZE);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3582
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3583 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
3584 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
3585 } else {
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3586 conf->upstream.max_temp_file_size =
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3587 conf->upstream.max_temp_file_size_conf;
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3588 }
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3589
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3590 if (conf->upstream.max_temp_file_size != 0
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3591 && conf->upstream.max_temp_file_size < size)
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3592 {
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3593 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
3594 "\"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
3595 "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
3596 "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
3597 "one of the \"proxy_buffers\"");
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3598
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3599 return NGX_CONF_ERROR;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3600 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3601
529
e5d7d0334fdb nginx-0.1.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3602
2786
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2784
diff changeset
3603 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
3604 prev->upstream.ignore_headers,
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2784
diff changeset
3605 NGX_CONF_BITMASK_SET);
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2784
diff changeset
3606
4e002555652d proxy_ignore_headers and fastcgi_ignore_headers
Igor Sysoev <igor@sysoev.ru>
parents: 2784
diff changeset
3607
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3608 ngx_conf_merge_bitmask_value(conf->upstream.next_upstream,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3609 prev->upstream.next_upstream,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3610 (NGX_CONF_BITMASK_SET
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3611 |NGX_HTTP_UPSTREAM_FT_ERROR
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3612 |NGX_HTTP_UPSTREAM_FT_TIMEOUT));
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3613
665
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
3614 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
3615 conf->upstream.next_upstream = NGX_CONF_BITMASK_SET
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
3616 |NGX_HTTP_UPSTREAM_FT_OFF;
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
3617 }
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
3618
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3619 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
3620 prev->upstream.temp_path,
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3621 &ngx_http_proxy_temp_path)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3622 != NGX_OK)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3623 {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3624 return NGX_CONF_ERROR;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3625 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3626
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3627
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3628 #if (NGX_HTTP_CACHE)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3629
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3630 if (conf->upstream.cache == NGX_CONF_UNSET) {
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3631 ngx_conf_merge_value(conf->upstream.cache,
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3632 prev->upstream.cache, 0);
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3633
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3634 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
3635 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
3636 }
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3637
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3638 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
3639 ngx_shm_zone_t *shm_zone;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3640
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
3641 shm_zone = conf->upstream.cache_zone;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3642
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3643 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3644 "\"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
3645 &shm_zone->shm.name);
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3646
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3647 return NGX_CONF_ERROR;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3648 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3649
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3650 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
3651 prev->upstream.cache_min_uses, 1);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3652
6793
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
3653 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
3654 prev->upstream.cache_max_range_offset,
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
3655 NGX_MAX_OFF_T_VALUE);
0fba3ed4e7eb Cache: proxy_cache_max_range_offset and friends.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6785
diff changeset
3656
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3657 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
3658 prev->upstream.cache_use_stale,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3659 (NGX_CONF_BITMASK_SET
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3660 |NGX_HTTP_UPSTREAM_FT_OFF));
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3661
4401
d45742815c90 Fixed proxy_cache_use_stale in "no live upstreams" case.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4400
diff changeset
3662 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
3663 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
3664 |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
3665 }
d45742815c90 Fixed proxy_cache_use_stale in "no live upstreams" case.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4400
diff changeset
3666
d45742815c90 Fixed proxy_cache_use_stale in "no live upstreams" case.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4400
diff changeset
3667 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
3668 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
3669 }
d45742815c90 Fixed proxy_cache_use_stale in "no live upstreams" case.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4400
diff changeset
3670
2875
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
3671 if (conf->upstream.cache_methods == 0) {
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
3672 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
3673 }
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
3674
6e1941b321b7 proxy_cache_methods and fastcgi_cache_methods
Igor Sysoev <igor@sysoev.ru>
parents: 2786
diff changeset
3675 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
3676
3699
b0a0686a85bb proxy_cache_pass, fastcgi_cache_bypass, uwsgi_cache_bypass, scgi_cache_bypass
Igor Sysoev <igor@sysoev.ru>
parents: 3692
diff changeset
3677 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
3678 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
3679
3526
62a4fd1e6e2c proxy_no_cache and fastcgi_no_cache
Igor Sysoev <igor@sysoev.ru>
parents: 3523
diff changeset
3680 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
3681 prev->upstream.no_cache, NULL);
62a4fd1e6e2c proxy_no_cache and fastcgi_no_cache
Igor Sysoev <igor@sysoev.ru>
parents: 3523
diff changeset
3682
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3683 ngx_conf_merge_ptr_value(conf->upstream.cache_valid,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3684 prev->upstream.cache_valid, NULL);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3685
2672
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
3686 if (conf->cache_key.value.data == NULL) {
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
3687 conf->cache_key = prev->cache_key;
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
3688 }
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
3689
4385
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
3690 ngx_conf_merge_value(conf->upstream.cache_lock,
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
3691 prev->upstream.cache_lock, 0);
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
3692
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
3693 ngx_conf_merge_msec_value(conf->upstream.cache_lock_timeout,
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
3694 prev->upstream.cache_lock_timeout, 5000);
70ba81827472 Cache locks initial implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4377
diff changeset
3695
5905
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5900
diff changeset
3696 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
3697 prev->upstream.cache_lock_age, 5000);
2f7e557eab5b Cache: proxy_cache_lock_age and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 5900
diff changeset
3698
5441
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
3699 ngx_conf_merge_value(conf->upstream.cache_revalidate,
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
3700 prev->upstream.cache_revalidate, 0);
43ccaf8e8728 Upstream: cache revalidation with conditional requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5391
diff changeset
3701
6290
4d5ac1a31d44 Upstream: proxy_cache_convert_head directive.
Roman Arutyunyan <arut@nginx.com>
parents: 6157
diff changeset
3702 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
3703 prev->upstream.cache_convert_head, 1);
4d5ac1a31d44 Upstream: proxy_cache_convert_head directive.
Roman Arutyunyan <arut@nginx.com>
parents: 6157
diff changeset
3704
6906
1aeaae6e9446 Upstream: proxy_cache_background_update and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6793
diff changeset
3705 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
3706 prev->upstream.cache_background_update, 0);
1aeaae6e9446 Upstream: proxy_cache_background_update and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6793
diff changeset
3707
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3708 #endif
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3709
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3710 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
3711 prev->upstream.pass_request_headers, 1);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3712 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
3713 prev->upstream.pass_request_body, 1);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3714
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3715 ngx_conf_merge_value(conf->upstream.intercept_errors,
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
3716 prev->upstream.intercept_errors, 0);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3717
2184
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
3718 #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
3719
2184
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
3720 ngx_conf_merge_value(conf->upstream.ssl_session_reuse,
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
3721 prev->upstream.ssl_session_reuse, 1);
5385
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
3722
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
3723 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
3724 (NGX_CONF_BITMASK_SET|NGX_SSL_TLSv1
b2899e7d0ef8 Disabled SSLv3 by default (ticket #653).
Maxim Dounin <mdounin@mdounin.ru>
parents: 6056
diff changeset
3725 |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
3726
5390
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
3727 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
3728 "DEFAULT");
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
3729
7831
bdd4d89370a7 Changed complex value slots to use NGX_CONF_UNSET_PTR.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7787
diff changeset
3730 ngx_conf_merge_ptr_value(conf->upstream.ssl_name,
bdd4d89370a7 Changed complex value slots to use NGX_CONF_UNSET_PTR.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7787
diff changeset
3731 prev->upstream.ssl_name, NULL);
5660
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
3732 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
3733 prev->upstream.ssl_server_name, 0);
5661
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
3734 ngx_conf_merge_value(conf->upstream.ssl_verify,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
3735 prev->upstream.ssl_verify, 0);
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
3736 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
3737 prev->ssl_verify_depth, 1);
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
3738 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
3739 prev->ssl_trusted_certificate, "");
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
3740 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
3741
7833
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
3742 ngx_conf_merge_ptr_value(conf->upstream.ssl_certificate,
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
3743 prev->upstream.ssl_certificate, NULL);
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
3744 ngx_conf_merge_ptr_value(conf->upstream.ssl_certificate_key,
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
3745 prev->upstream.ssl_certificate_key, NULL);
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
3746 ngx_conf_merge_ptr_value(conf->upstream.ssl_passwords,
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
3747 prev->upstream.ssl_passwords, NULL);
5900
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
3748
7730
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
3749 ngx_conf_merge_ptr_value(conf->ssl_conf_commands,
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
3750 prev->ssl_conf_commands, NULL);
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
3751
5385
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
3752 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
3753 return NGX_CONF_ERROR;
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
3754 }
5660
7022564a9e0e Upstream: proxy_ssl_name and proxy_ssl_server_name directives.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5659
diff changeset
3755
2184
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
3756 #endif
274c0f3ea600 proxy_ssl_session_reuse
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
3757
7831
bdd4d89370a7 Changed complex value slots to use NGX_CONF_UNSET_PTR.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7787
diff changeset
3758 ngx_conf_merge_ptr_value(conf->method, prev->method, NULL);
bdd4d89370a7 Changed complex value slots to use NGX_CONF_UNSET_PTR.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7787
diff changeset
3759
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3760 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
3761
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3762 if (conf->redirect) {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3763
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3764 if (conf->redirects == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3765 conf->redirects = prev->redirects;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3766 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3767
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
3768 if (conf->redirects == NULL && conf->url.data) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3769
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3770 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
3771 sizeof(ngx_http_proxy_rewrite_t));
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3772 if (conf->redirects == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3773 return NGX_CONF_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3774 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3775
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3776 pr = ngx_array_push(conf->redirects);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3777 if (pr == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3778 return NGX_CONF_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3779 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3780
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
3781 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
3782 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
3783
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
3784 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
3785
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
3786 pr->handler = ngx_http_proxy_rewrite_complex_handler;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
3787
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
3788 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
3789 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
3790 pr->replacement.value = conf->location;
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
3791
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
3792 } else {
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
3793 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
3794 + sizeof("/") - 1;
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
3795
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
3796 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
3797 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
3798 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
3799 }
f4c49c9e4bb5 always test proxy_redirect with slash, this fixes a case when nginx uses
Igor Sysoev <igor@sysoev.ru>
parents: 3734
diff changeset
3800
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
3801 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
3802
f4c49c9e4bb5 always test proxy_redirect with slash, this fixes a case when nginx uses
Igor Sysoev <igor@sysoev.ru>
parents: 3734
diff changeset
3803 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
3804 *p = '/';
f4c49c9e4bb5 always test proxy_redirect with slash, this fixes a case when nginx uses
Igor Sysoev <igor@sysoev.ru>
parents: 3734
diff changeset
3805
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
3806 ngx_str_set(&pr->replacement.value, "/");
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
3807 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3808 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3809 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3810
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
3811 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
3812
4466
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
3813 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
3814
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
3815 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
3816
4126
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
3817 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
3818 NGX_HTTP_VERSION_10);
bba9a5ccc6cd Proxy: basic HTTP/1.1 support (including keepalive).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4125
diff changeset
3819
1180
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
3820 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
3821 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
3822
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
3823 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
3824 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
3825
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
3826 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
3827 ngx_cacheline_size);
1666b7b0bafc proxy_headers_hash_max_size and proxy_headers_hash_bucket_size
Igor Sysoev <igor@sysoev.ru>
parents: 1125
diff changeset
3828
1701
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
3829 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
3830 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
3831 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
3832
40d004d95d88 *) now ngx_conf_set_str_array_slot() tests NGX_CONF_UNSET_PTR
Igor Sysoev <igor@sysoev.ru>
parents: 1699
diff changeset
3833 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
3834 &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
3835 != NGX_OK)
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
3836 {
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
3837 return NGX_CONF_ERROR;
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
3838 }
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
3839
5938
cd2abf7e7740 Upstream: fixed unexpected inheritance into limit_except blocks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5937
diff changeset
3840 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
3841
cd2abf7e7740 Upstream: fixed unexpected inheritance into limit_except blocks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5937
diff changeset
3842 if (clcf->noname
cd2abf7e7740 Upstream: fixed unexpected inheritance into limit_except blocks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5937
diff changeset
3843 && 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
3844 {
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 843
diff changeset
3845 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
3846 conf->location = prev->location;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
3847 conf->vars = prev->vars;
5937
5b9f711dc819 Upstream: inheritance of proxy_pass and friends (ticket #645).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5936
diff changeset
3848
3734
e3a6785b5be4 *) make code consistent to fastcgi, etc
Igor Sysoev <igor@sysoev.ru>
parents: 3733
diff changeset
3849 conf->proxy_lengths = prev->proxy_lengths;
e3a6785b5be4 *) make code consistent to fastcgi, etc
Igor Sysoev <igor@sysoev.ru>
parents: 3733
diff changeset
3850 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
3851
5b9f711dc819 Upstream: inheritance of proxy_pass and friends (ticket #645).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5936
diff changeset
3852 #if (NGX_HTTP_SSL)
5b9f711dc819 Upstream: inheritance of proxy_pass and friends (ticket #645).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5936
diff changeset
3853 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
3854 #endif
3734
e3a6785b5be4 *) make code consistent to fastcgi, etc
Igor Sysoev <igor@sysoev.ru>
parents: 3733
diff changeset
3855 }
e3a6785b5be4 *) make code consistent to fastcgi, etc
Igor Sysoev <igor@sysoev.ru>
parents: 3733
diff changeset
3856
5938
cd2abf7e7740 Upstream: fixed unexpected inheritance into limit_except blocks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5937
diff changeset
3857 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
3858 && (conf->upstream.upstream || conf->proxy_lengths))
cd2abf7e7740 Upstream: fixed unexpected inheritance into limit_except blocks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5937
diff changeset
3859 {
cd2abf7e7740 Upstream: fixed unexpected inheritance into limit_except blocks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5937
diff changeset
3860 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
3861 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3862
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3863 if (conf->body_source.data == NULL) {
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3864 conf->body_flushes = prev->body_flushes;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3865 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
3866 conf->body_lengths = prev->body_lengths;
29fa5023bd6f Proxy: renamed and rearranged fields in proxy configuration.
Roman Arutyunyan <arut@nginx.com>
parents: 5909
diff changeset
3867 conf->body_values = prev->body_values;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3868 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3869
5910
29fa5023bd6f Proxy: renamed and rearranged fields in proxy configuration.
Roman Arutyunyan <arut@nginx.com>
parents: 5909
diff changeset
3870 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
3871
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3872 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
3873
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3874 sc.cf = cf;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3875 sc.source = &conf->body_source;
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3876 sc.flushes = &conf->body_flushes;
5910
29fa5023bd6f Proxy: renamed and rearranged fields in proxy configuration.
Roman Arutyunyan <arut@nginx.com>
parents: 5909
diff changeset
3877 sc.lengths = &conf->body_lengths;
29fa5023bd6f Proxy: renamed and rearranged fields in proxy configuration.
Roman Arutyunyan <arut@nginx.com>
parents: 5909
diff changeset
3878 sc.values = &conf->body_values;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3879 sc.complete_lengths = 1;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3880 sc.complete_values = 1;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3881
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3882 if (ngx_http_script_compile(&sc) != NGX_OK) {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3883 return NGX_CONF_ERROR;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3884 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3885 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3886
7728
485dba3e2a01 Core: ngx_conf_set_keyval_slot() now accepts NGX_CONF_UNSET_PTR.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7720
diff changeset
3887 ngx_conf_merge_ptr_value(conf->headers_source, prev->headers_source, NULL);
485dba3e2a01 Core: ngx_conf_set_keyval_slot() now accepts NGX_CONF_UNSET_PTR.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7720
diff changeset
3888
485dba3e2a01 Core: ngx_conf_set_keyval_slot() now accepts NGX_CONF_UNSET_PTR.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7720
diff changeset
3889 if (conf->headers_source == prev->headers_source) {
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3890 conf->headers = prev->headers;
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3891 #if (NGX_HTTP_CACHE)
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3892 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
3893 #endif
5907
195561ef367f Upstream: moved header initializations to separate functions.
Roman Arutyunyan <arut@nginx.com>
parents: 5905
diff changeset
3894 }
195561ef367f Upstream: moved header initializations to separate functions.
Roman Arutyunyan <arut@nginx.com>
parents: 5905
diff changeset
3895
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3896 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
3897 ngx_http_proxy_headers);
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3898 if (rc != NGX_OK) {
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3899 return NGX_CONF_ERROR;
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3900 }
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3901
5907
195561ef367f Upstream: moved header initializations to separate functions.
Roman Arutyunyan <arut@nginx.com>
parents: 5905
diff changeset
3902 #if (NGX_HTTP_CACHE)
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3903
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3904 if (conf->upstream.cache) {
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3905 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
3906 ngx_http_proxy_cache_headers);
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3907 if (rc != NGX_OK) {
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3908 return NGX_CONF_ERROR;
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3909 }
5907
195561ef367f Upstream: moved header initializations to separate functions.
Roman Arutyunyan <arut@nginx.com>
parents: 5905
diff changeset
3910 }
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3911
5907
195561ef367f Upstream: moved header initializations to separate functions.
Roman Arutyunyan <arut@nginx.com>
parents: 5905
diff changeset
3912 #endif
195561ef367f Upstream: moved header initializations to separate functions.
Roman Arutyunyan <arut@nginx.com>
parents: 5905
diff changeset
3913
6747
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6746
diff changeset
3914 /*
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6746
diff changeset
3915 * 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
3916 * 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
3917 */
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6746
diff changeset
3918
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6746
diff changeset
3919 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
3920 && 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
3921 {
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6746
diff changeset
3922 prev->headers = conf->headers;
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6746
diff changeset
3923 #if (NGX_HTTP_CACHE)
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6746
diff changeset
3924 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
3925 #endif
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6746
diff changeset
3926 }
20eb4587225b Upstream: handling of proxy_set_header at http level.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6746
diff changeset
3927
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3928 return NGX_CONF_OK;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3929 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3930
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3931
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3932 static ngx_int_t
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3933 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
3934 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
3935 {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3936 u_char *p;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3937 size_t size;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3938 uintptr_t *code;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3939 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
3940 ngx_array_t headers_names, headers_merged;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3941 ngx_keyval_t *src, *s, *h;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3942 ngx_hash_key_t *hk;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3943 ngx_hash_init_t hash;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3944 ngx_http_script_compile_t sc;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3945 ngx_http_script_copy_code_t *copy;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3946
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3947 if (headers->hash.buckets) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3948 return NGX_OK;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3949 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3950
3561
20708cffd6dc use local headers_names array instead of stored in configuration
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3951 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
3952 != NGX_OK)
20708cffd6dc use local headers_names array instead of stored in configuration
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
3953 {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3954 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3955 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3956
4274
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
3957 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
3958 != NGX_OK)
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
3959 {
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
3960 return NGX_ERROR;
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
3961 }
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
3962
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3963 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
3964 if (headers->lengths == NULL) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3965 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3966 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3967
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
3968 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
3969 if (headers->values == NULL) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
3970 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3971 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3972
6746
63991ab67b3a Proxy: do not create conf->headers_source when not needed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6591
diff changeset
3973 if (conf->headers_source) {
63991ab67b3a Proxy: do not create conf->headers_source when not needed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6591
diff changeset
3974
63991ab67b3a Proxy: do not create conf->headers_source when not needed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6591
diff changeset
3975 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
3976 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
3977
63991ab67b3a Proxy: do not create conf->headers_source when not needed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6591
diff changeset
3978 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
3979 if (s == NULL) {
63991ab67b3a Proxy: do not create conf->headers_source when not needed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6591
diff changeset
3980 return NGX_ERROR;
63991ab67b3a Proxy: do not create conf->headers_source when not needed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6591
diff changeset
3981 }
63991ab67b3a Proxy: do not create conf->headers_source when not needed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6591
diff changeset
3982
63991ab67b3a Proxy: do not create conf->headers_source when not needed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6591
diff changeset
3983 *s = src[i];
4274
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
3984 }
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
3985 }
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
3986
5909
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3987 h = default_headers;
8d0cf26ce071 Upstream: different header lists for cached and uncached requests.
Roman Arutyunyan <arut@nginx.com>
parents: 5908
diff changeset
3988
2705
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
3989 while (h->key.len) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3990
4274
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
3991 src = headers_merged.elts;
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
3992 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
3993 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
3994 goto next;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3995 }
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
4274
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
3998 s = ngx_array_push(&headers_merged);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3999 if (s == 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 *s = *h;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4004
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4005 next:
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4006
2705
d040c3786239 do not pass if-... headers for cacheable responses
Igor Sysoev <igor@sysoev.ru>
parents: 2672
diff changeset
4007 h++;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4008 }
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4009
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
4010
4274
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
4011 src = headers_merged.elts;
595560d9dcbf Fixed proxy_set_header inheritance with proxy_cache (ticket #45).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4205
diff changeset
4012 for (i = 0; i < headers_merged.nelts; i++) {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4013
3561
20708cffd6dc use local headers_names array instead of stored in configuration
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
4014 hk = ngx_array_push(&headers_names);
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
4015 if (hk == NULL) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4016 return NGX_ERROR;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4017 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4018
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
4019 hk->key = src[i].key;
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
4020 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
4021 hk->value = (void *) 1;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4022
519
12234c998d83 nginx-0.1.34-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
4023 if (src[i].value.len == 0) {
12234c998d83 nginx-0.1.34-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
4024 continue;
12234c998d83 nginx-0.1.34-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
4025 }
12234c998d83 nginx-0.1.34-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 517
diff changeset
4026
7047
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
4027 copy = ngx_array_push_n(headers->lengths,
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
4028 sizeof(ngx_http_script_copy_code_t));
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
4029 if (copy == NULL) {
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
4030 return NGX_ERROR;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
4031 }
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
4032
7271
9e25a5380a21 Silenced -Wcast-function-type warnings (closes #1546).
Sergey Kandaurov <pluknet@nginx.com>
parents: 7238
diff changeset
4033 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
4034 ngx_http_script_copy_len_code;
7047
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
4035 copy->len = src[i].key.len;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
4036
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
4037 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
4038 + 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
4039 & ~(sizeof(uintptr_t) - 1);
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
4040
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
4041 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
4042 if (copy == NULL) {
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
4043 return NGX_ERROR;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
4044 }
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
4045
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
4046 copy->code = ngx_http_script_copy_code;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
4047 copy->len = src[i].key.len;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
4048
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
4049 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
4050 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
4051
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
4052 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
4053
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
4054 sc.cf = cf;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
4055 sc.source = &src[i].value;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
4056 sc.flushes = &headers->flushes;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
4057 sc.lengths = &headers->lengths;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
4058 sc.values = &headers->values;
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
4059
3fef8c5caa75 Proxy: split configured header names and values.
Piotr Sikora <piotrsikora@google.com>
parents: 7001
diff changeset
4060 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
4061 return NGX_ERROR;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4062 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4063
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
4064 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
4065 if (code == NULL) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4066 return NGX_ERROR;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4067 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4068
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4069 *code = (uintptr_t) NULL;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4070
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
4071 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
4072 if (code == NULL) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4073 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4074 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4075
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4076 *code = (uintptr_t) NULL;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4077 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4078
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
4079 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
4080 if (code == NULL) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4081 return NGX_ERROR;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4082 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4083
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4084 *code = (uintptr_t) NULL;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4085
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4086
5908
f8e80f8c7fc7 Upstream: moved header lists to separate structures.
Roman Arutyunyan <arut@nginx.com>
parents: 5907
diff changeset
4087 hash.hash = &headers->hash;
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
4088 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
4089 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
4090 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
4091 hash.name = "proxy_headers_hash";
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
4092 hash.pool = cf->pool;
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
4093 hash.temp_pool = NULL;
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
4094
3561
20708cffd6dc use local headers_names array instead of stored in configuration
Igor Sysoev <igor@sysoev.ru>
parents: 3526
diff changeset
4095 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
4096 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4097
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4098
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4099 static char *
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4100 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
4101 {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4102 ngx_http_proxy_loc_conf_t *plcf = conf;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4103
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4104 size_t add;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4105 u_short port;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4106 ngx_str_t *value, *url;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4107 ngx_url_t u;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4108 ngx_uint_t n;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4109 ngx_http_core_loc_conf_t *clcf;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4110 ngx_http_script_compile_t sc;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4111
2391
d88e757cc7d8 delete surplus upstream.schema field
Igor Sysoev <igor@sysoev.ru>
parents: 2285
diff changeset
4112 if (plcf->upstream.upstream || plcf->proxy_lengths) {
555
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
4113 return "is duplicate";
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
4114 }
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
4115
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4116 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
4117
2989
dff9764eaca2 do auto redirect for proxy_pass/fastcgi_pass with variables
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
4118 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
4119
7321
45e513c3540d Fixed invalid access to location defined as an empty string.
Ruslan Ermilov <ru@nginx.com>
parents: 7320
diff changeset
4120 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
4121 clcf->auto_redirect = 1;
dff9764eaca2 do auto redirect for proxy_pass/fastcgi_pass with variables
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
4122 }
dff9764eaca2 do auto redirect for proxy_pass/fastcgi_pass with variables
Igor Sysoev <igor@sysoev.ru>
parents: 2949
diff changeset
4123
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4124 value = cf->args->elts;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4125
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4126 url = &value[1];
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4127
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4128 n = ngx_http_script_variables_count(url);
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4129
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4130 if (n) {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4131
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4132 ngx_memzero(&sc, sizeof(ngx_http_script_compile_t));
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4133
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4134 sc.cf = cf;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4135 sc.source = url;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4136 sc.lengths = &plcf->proxy_lengths;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4137 sc.values = &plcf->proxy_values;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4138 sc.variables = n;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4139 sc.complete_lengths = 1;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4140 sc.complete_values = 1;
1679
ca317d9b5c09 style fix: remove trailing spaces
Igor Sysoev <igor@sysoev.ru>
parents: 1671
diff changeset
4141
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4142 if (ngx_http_script_compile(&sc) != NGX_OK) {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4143 return NGX_CONF_ERROR;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4144 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4145
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4146 #if (NGX_HTTP_SSL)
5385
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
4147 plcf->ssl = 1;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4148 #endif
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4149
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4150 return NGX_CONF_OK;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4151 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4152
1107
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 969
diff changeset
4153 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
4154 add = 7;
591
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
4155 port = 80;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
4156
1107
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 969
diff changeset
4157 } 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
4158
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
4159 #if (NGX_HTTP_SSL)
5385
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
4160 plcf->ssl = 1;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
4161
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
4162 add = 8;
591
8c0cdd81580e nginx-0.3.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
4163 port = 443;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
4164 #else
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
4165 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
4166 "https protocol requires SSL support");
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
4167 return NGX_CONF_ERROR;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
4168 #endif
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
4169
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
4170 } else {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4171 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
4172 return NGX_CONF_ERROR;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4173 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4174
651
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4175 ngx_memzero(&u, sizeof(ngx_url_t));
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4176
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4177 u.url.len = url->len - add;
39b7d7b33c91 nginx-0.3.47-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 649
diff changeset
4178 u.url.data = url->data + add;
906
a0310ac2814f rewritten upstream
Igor Sysoev <igor@sysoev.ru>
parents: 896
diff changeset
4179 u.default_port = port;
a0310ac2814f rewritten upstream
Igor Sysoev <igor@sysoev.ru>
parents: 896
diff changeset
4180 u.uri_part = 1;
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 843
diff changeset
4181 u.no_resolve = 1;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 843
diff changeset
4182
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 843
diff changeset
4183 plcf->upstream.upstream = ngx_http_upstream_add(cf, &u, 0);
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 843
diff changeset
4184 if (plcf->upstream.upstream == NULL) {
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4185 return NGX_CONF_ERROR;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4186 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4187
2391
d88e757cc7d8 delete surplus upstream.schema field
Igor Sysoev <igor@sysoev.ru>
parents: 2285
diff changeset
4188 plcf->vars.schema.len = add;
d88e757cc7d8 delete surplus upstream.schema field
Igor Sysoev <igor@sysoev.ru>
parents: 2285
diff changeset
4189 plcf->vars.schema.data = url->data;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4190 plcf->vars.key_start = plcf->vars.schema;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4191
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4192 ngx_http_proxy_set_vars(&u, &plcf->vars);
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4193
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4194 plcf->location = clcf->name;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4195
1353
7443fbe0b013 named location
Igor Sysoev <igor@sysoev.ru>
parents: 1339
diff changeset
4196 if (clcf->named
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4197 #if (NGX_PCRE)
1353
7443fbe0b013 named location
Igor Sysoev <igor@sysoev.ru>
parents: 1339
diff changeset
4198 || clcf->regex
7443fbe0b013 named location
Igor Sysoev <igor@sysoev.ru>
parents: 1339
diff changeset
4199 #endif
7443fbe0b013 named location
Igor Sysoev <igor@sysoev.ru>
parents: 1339
diff changeset
4200 || clcf->noname)
7443fbe0b013 named location
Igor Sysoev <igor@sysoev.ru>
parents: 1339
diff changeset
4201 {
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4202 if (plcf->vars.uri.len) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
4203 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
4204 "\"proxy_pass\" cannot have URI part in "
843
ebab9490204c allow proxy_pass inside limit_except
Igor Sysoev <igor@sysoev.ru>
parents: 812
diff changeset
4205 "location given by regular expression, "
1353
7443fbe0b013 named location
Igor Sysoev <igor@sysoev.ru>
parents: 1339
diff changeset
4206 "or inside named location, "
4593
834049edae24 Fixed grammar in error messages.
Ruslan Ermilov <ru@nginx.com>
parents: 4529
diff changeset
4207 "or inside \"if\" statement, "
834049edae24 Fixed grammar in error messages.
Ruslan Ermilov <ru@nginx.com>
parents: 4529
diff changeset
4208 "or inside \"limit_except\" block");
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
4209 return NGX_CONF_ERROR;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
4210 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
4211
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4212 plcf->location.len = 0;
555
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
4213 }
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 551
diff changeset
4214
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4215 plcf->url = *url;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4216
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4217 return NGX_CONF_OK;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4218 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4219
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4220
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4221 static char *
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4222 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
4223 {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4224 ngx_http_proxy_loc_conf_t *plcf = conf;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4225
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4226 u_char *p;
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4227 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
4228 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
4229 ngx_http_compile_complex_value_t ccv;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4230
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4231 if (plcf->redirect == 0) {
7714
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4232 return "is duplicate";
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4233 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4234
4422
b1a9d725ab69 Fixed proxy_redirect off inheritance.
Valentin Bartenev <vbart@nginx.com>
parents: 4412
diff changeset
4235 plcf->redirect = 1;
b1a9d725ab69 Fixed proxy_redirect off inheritance.
Valentin Bartenev <vbart@nginx.com>
parents: 4412
diff changeset
4236
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4237 value = cf->args->elts;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4238
2784
c2230102df6f *) check a proxy_redirect single parameter
Igor Sysoev <igor@sysoev.ru>
parents: 2753
diff changeset
4239 if (cf->args->nelts == 2) {
c2230102df6f *) check a proxy_redirect single parameter
Igor Sysoev <igor@sysoev.ru>
parents: 2753
diff changeset
4240 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
4241
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4242 if (plcf->redirects) {
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4243 return "is duplicate";
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4244 }
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4245
2784
c2230102df6f *) check a proxy_redirect single parameter
Igor Sysoev <igor@sysoev.ru>
parents: 2753
diff changeset
4246 plcf->redirect = 0;
c2230102df6f *) check a proxy_redirect single parameter
Igor Sysoev <igor@sysoev.ru>
parents: 2753
diff changeset
4247 return NGX_CONF_OK;
c2230102df6f *) check a proxy_redirect single parameter
Igor Sysoev <igor@sysoev.ru>
parents: 2753
diff changeset
4248 }
c2230102df6f *) check a proxy_redirect single parameter
Igor Sysoev <igor@sysoev.ru>
parents: 2753
diff changeset
4249
c2230102df6f *) check a proxy_redirect single parameter
Igor Sysoev <igor@sysoev.ru>
parents: 2753
diff changeset
4250 if (ngx_strcmp(value[1].data, "default") != 0) {
c2230102df6f *) check a proxy_redirect single parameter
Igor Sysoev <igor@sysoev.ru>
parents: 2753
diff changeset
4251 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
4252 "invalid parameter \"%V\"", &value[1]);
c2230102df6f *) check a proxy_redirect single parameter
Igor Sysoev <igor@sysoev.ru>
parents: 2753
diff changeset
4253 return NGX_CONF_ERROR;
c2230102df6f *) check a proxy_redirect single parameter
Igor Sysoev <igor@sysoev.ru>
parents: 2753
diff changeset
4254 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4255 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4256
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4257 if (plcf->redirects == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4258 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
4259 sizeof(ngx_http_proxy_rewrite_t));
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4260 if (plcf->redirects == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4261 return NGX_CONF_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4262 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4263 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4264
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4265 pr = ngx_array_push(plcf->redirects);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4266 if (pr == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4267 return NGX_CONF_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4268 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4269
7714
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4270 if (cf->args->nelts == 2
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4271 && ngx_strcmp(value[1].data, "default") == 0)
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4272 {
3471
d8c56e7851b8 "proxy_redirect default" may not be used if a proxy_pass uses variables
Igor Sysoev <igor@sysoev.ru>
parents: 3470
diff changeset
4273 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
4274 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
4275 "\"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
4276 "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
4277 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
4278 }
d8c56e7851b8 "proxy_redirect default" may not be used if a proxy_pass uses variables
Igor Sysoev <igor@sysoev.ru>
parents: 3470
diff changeset
4279
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4280 if (plcf->url.data == NULL) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4281 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
4282 "\"proxy_redirect default\" should be placed "
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4283 "after the \"proxy_pass\" directive");
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4284 return NGX_CONF_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4285 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4286
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
4287 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
4288
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
4289 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
4290
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4291 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
4292
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4293 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
4294 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
4295 pr->replacement.value = plcf->location;
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
4296
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
4297 } else {
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
4298 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
4299
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
4300 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
4301 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
4302 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
4303 }
f4c49c9e4bb5 always test proxy_redirect with slash, this fixes a case when nginx uses
Igor Sysoev <igor@sysoev.ru>
parents: 3734
diff changeset
4304
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
4305 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
4306
f4c49c9e4bb5 always test proxy_redirect with slash, this fixes a case when nginx uses
Igor Sysoev <igor@sysoev.ru>
parents: 3734
diff changeset
4307 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
4308 *p = '/';
f4c49c9e4bb5 always test proxy_redirect with slash, this fixes a case when nginx uses
Igor Sysoev <igor@sysoev.ru>
parents: 3734
diff changeset
4309
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4310 ngx_str_set(&pr->replacement.value, "/");
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
4311 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4312
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4313 return NGX_CONF_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4314 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4315
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4316
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4317 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
4318 value[1].len--;
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4319 value[1].data++;
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4320
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4321 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
4322 value[1].len--;
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4323 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
4324
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4325 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
4326 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
4327 }
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4328
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4329 } else {
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4330 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
4331 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
4332 }
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4333 }
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4334
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4335 } else {
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4337 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
4338
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4339 ccv.cf = cf;
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4340 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
4341 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
4342
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4343 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
4344 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
4345 }
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4346
4461
103587c7ae5f Proxy: renamed some "proxy_redirect" related declarations to a more general and
Valentin Bartenev <vbart@nginx.com>
parents: 4422
diff changeset
4347 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
4348 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4349
4336
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4350
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4351 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
4352
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4353 ccv.cf = cf;
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4354 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
4355 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
4356
99437094e86f Proxy: added variables and regexp support to the first parameter of
Valentin Bartenev <vbart@nginx.com>
parents: 4276
diff changeset
4357 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
4358 return NGX_CONF_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4359 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
4360
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4361 return NGX_CONF_OK;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4362 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4363
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4364
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4365 static char *
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4366 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
4367 {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4368 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
4369
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4370 ngx_str_t *value;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4371 ngx_http_proxy_rewrite_t *pr;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4372 ngx_http_compile_complex_value_t ccv;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4373
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4374 if (plcf->cookie_domains == NULL) {
7714
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4375 return "is duplicate";
4465
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
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4378 value = cf->args->elts;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4379
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4380 if (cf->args->nelts == 2) {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4381
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4382 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
4383
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4384 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
4385 return "is duplicate";
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4386 }
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4387
4465
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4388 plcf->cookie_domains = NULL;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4389 return NGX_CONF_OK;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4390 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4391
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4392 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
4393 "invalid parameter \"%V\"", &value[1]);
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4394 return NGX_CONF_ERROR;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4395 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4396
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4397 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
4398 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
4399 sizeof(ngx_http_proxy_rewrite_t));
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4400 if (plcf->cookie_domains == NULL) {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4401 return NGX_CONF_ERROR;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4402 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4403 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4404
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4405 pr = ngx_array_push(plcf->cookie_domains);
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4406 if (pr == NULL) {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4407 return NGX_CONF_ERROR;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4408 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4409
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4410 if (value[1].data[0] == '~') {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4411 value[1].len--;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4412 value[1].data++;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4413
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4414 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
4415 return NGX_CONF_ERROR;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4416 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4417
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4418 } else {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4419
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4420 if (value[1].data[0] == '.') {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4421 value[1].len--;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4422 value[1].data++;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4423 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4424
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4425 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
4426
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4427 ccv.cf = cf;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4428 ccv.value = &value[1];
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4429 ccv.complex_value = &pr->pattern.complex;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4430
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4431 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
4432 return NGX_CONF_ERROR;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4433 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4434
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4435 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
4436
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4437 if (value[2].data[0] == '.') {
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4438 value[2].len--;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4439 value[2].data++;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4440 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4441 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4442
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4443 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
4444
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4445 ccv.cf = cf;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4446 ccv.value = &value[2];
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4447 ccv.complex_value = &pr->replacement;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4448
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4449 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
4450 return NGX_CONF_ERROR;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4451 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4452
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4453 return NGX_CONF_OK;
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4454 }
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4455
8293fc2d802b Proxy: added the "proxy_cookie_domain" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4463
diff changeset
4456
4466
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4457 static char *
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4458 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
4459 {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4460 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
4461
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4462 ngx_str_t *value;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4463 ngx_http_proxy_rewrite_t *pr;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4464 ngx_http_compile_complex_value_t ccv;
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 if (plcf->cookie_paths == NULL) {
7714
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4467 return "is duplicate";
4466
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
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4470 value = cf->args->elts;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4471
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4472 if (cf->args->nelts == 2) {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4473
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4474 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
4475
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4476 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
4477 return "is duplicate";
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4478 }
8dbc9ee97998 Proxy: strengthen syntax checking for some directives.
Ruslan Ermilov <ru@nginx.com>
parents: 7677
diff changeset
4479
4466
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4480 plcf->cookie_paths = NULL;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4481 return NGX_CONF_OK;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4482 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4483
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4484 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
4485 "invalid parameter \"%V\"", &value[1]);
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4486 return NGX_CONF_ERROR;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4487 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4488
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4489 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
4490 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
4491 sizeof(ngx_http_proxy_rewrite_t));
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4492 if (plcf->cookie_paths == NULL) {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4493 return NGX_CONF_ERROR;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4494 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4495 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4496
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4497 pr = ngx_array_push(plcf->cookie_paths);
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4498 if (pr == NULL) {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4499 return NGX_CONF_ERROR;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4500 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4501
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4502 if (value[1].data[0] == '~') {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4503 value[1].len--;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4504 value[1].data++;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4505
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4506 if (value[1].data[0] == '*') {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4507 value[1].len--;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4508 value[1].data++;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4509
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4510 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
4511 return NGX_CONF_ERROR;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4512 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4513
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4514 } else {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4515 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
4516 return NGX_CONF_ERROR;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4517 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4518 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4519
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4520 } else {
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4521
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4522 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
4523
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4524 ccv.cf = cf;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4525 ccv.value = &value[1];
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4526 ccv.complex_value = &pr->pattern.complex;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4527
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4528 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
4529 return NGX_CONF_ERROR;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4530 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4531
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4532 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
4533 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4534
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4535 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
4536
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4537 ccv.cf = cf;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4538 ccv.value = &value[2];
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4539 ccv.complex_value = &pr->replacement;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4540
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4541 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
4542 return NGX_CONF_ERROR;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4543 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4544
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4545 return NGX_CONF_OK;
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4546 }
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4547
b404f34b5cb8 Proxy: added the "proxy_cookie_path" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4465
diff changeset
4548
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4549 static char *
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4550 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
4551 {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4552 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
4553
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4554 ngx_str_t *value;
7786
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
4555 ngx_uint_t i;
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
4556 ngx_http_complex_value_t *cv;
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4557 ngx_http_proxy_cookie_flags_t *pcf;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4558 ngx_http_compile_complex_value_t ccv;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4559 #if (NGX_PCRE)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4560 ngx_regex_compile_t rc;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4561 u_char errstr[NGX_MAX_CONF_ERRSTR];
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4562 #endif
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4563
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4564 if (plcf->cookie_flags == NULL) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4565 return "is duplicate";
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4566 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4567
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4568 value = cf->args->elts;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4569
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4570 if (cf->args->nelts == 2) {
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 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
4573
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4574 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
4575 return "is duplicate";
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
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4578 plcf->cookie_flags = NULL;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4579 return NGX_CONF_OK;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4580 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4581
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4582 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
4583 "invalid parameter \"%V\"", &value[1]);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4584 return NGX_CONF_ERROR;
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
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4587 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
4588 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
4589 sizeof(ngx_http_proxy_cookie_flags_t));
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4590 if (plcf->cookie_flags == NULL) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4591 return NGX_CONF_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4592 }
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
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4595 pcf = ngx_array_push(plcf->cookie_flags);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4596 if (pcf == NULL) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4597 return NGX_CONF_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4598 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4599
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4600 pcf->regex = 0;
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 if (value[1].data[0] == '~') {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4603 value[1].len--;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4604 value[1].data++;
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 #if (NGX_PCRE)
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4607 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
4608
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4609 rc.pattern = value[1];
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4610 rc.err.len = NGX_MAX_CONF_ERRSTR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4611 rc.err.data = errstr;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4612 rc.options = NGX_REGEX_CASELESS;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4613
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4614 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
4615 if (pcf->cookie.regex == NULL) {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4616 return NGX_CONF_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4617 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4618
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4619 pcf->regex = 1;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4620 #else
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4621 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
4622 "using regex \"%V\" requires PCRE library",
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4623 &value[1]);
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4624 return NGX_CONF_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4625 #endif
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4626
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4627 } else {
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4628
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4629 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
4630
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4631 ccv.cf = cf;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4632 ccv.value = &value[1];
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4633 ccv.complex_value = &pcf->cookie.complex;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4634
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4635 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
4636 return NGX_CONF_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4637 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4638 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4639
7786
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
4640 if (ngx_array_init(&pcf->flags_values, cf->pool, cf->args->nelts - 2,
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
4641 sizeof(ngx_http_complex_value_t))
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
4642 != NGX_OK)
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
4643 {
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
4644 return NGX_CONF_ERROR;
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
4645 }
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4646
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4647 for (i = 2; i < cf->args->nelts; i++) {
7786
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
4648
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
4649 cv = ngx_array_push(&pcf->flags_values);
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
4650 if (cv == NULL) {
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
4651 return NGX_CONF_ERROR;
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4652 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4653
7786
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
4654 ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
4655
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
4656 ccv.cf = cf;
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
4657 ccv.value = &value[i];
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
4658 ccv.complex_value = cv;
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
4659
529b73f75d19 Proxy: variables support in "proxy_cookie_flags" flags.
Ruslan Ermilov <ru@nginx.com>
parents: 7760
diff changeset
4660 if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
7716
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4661 return NGX_CONF_ERROR;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4662 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4663 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4664
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4665 return NGX_CONF_OK;
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4666 }
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4667
d6a5e14aa3e4 Proxy: added the "proxy_cookie_flags" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 7715
diff changeset
4668
4463
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4669 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
4670 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
4671 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
4672 {
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4673 #if (NGX_PCRE)
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4674 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
4675 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
4676
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4677 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
4678
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4679 rc.pattern = *regex;
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4680 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
4681 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
4682
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4683 if (caseless) {
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4684 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
4685 }
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4686
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4687 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
4688 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
4689 return NGX_ERROR;
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4690 }
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4691
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4692 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
4693
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4694 return NGX_OK;
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4695
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4696 #else
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4697
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4698 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
4699 "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
4700 return NGX_ERROR;
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4701
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4702 #endif
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4703 }
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4704
a068ec122f17 Proxy: generic regex related code from the "proxy_redirect" directive moved
Valentin Bartenev <vbart@nginx.com>
parents: 4462
diff changeset
4705
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4706 static char *
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4707 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
4708 {
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4709 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
4710
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4711 ngx_str_t *value;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4712 ngx_http_script_compile_t sc;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4713
5947
d9025ea1f5a5 Upstream: simplified proxy_store and friends configuration code.
Valentin Bartenev <vbart@nginx.com>
parents: 5940
diff changeset
4714 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
4715 return "is duplicate";
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4716 }
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4717
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4718 value = cf->args->elts;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4719
2895
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
4720 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
4721 plcf->upstream.store = 0;
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4722 return NGX_CONF_OK;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4723 }
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4724
2895
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
4725 #if (NGX_HTTP_CACHE)
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
4726 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
4727 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
4728 }
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
4729 #endif
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
4730
5947
d9025ea1f5a5 Upstream: simplified proxy_store and friends configuration code.
Valentin Bartenev <vbart@nginx.com>
parents: 5940
diff changeset
4731 plcf->upstream.store = 1;
d9025ea1f5a5 Upstream: simplified proxy_store and friends configuration code.
Valentin Bartenev <vbart@nginx.com>
parents: 5940
diff changeset
4732
2895
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
4733 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
4734 return NGX_CONF_OK;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4735 }
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4736
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4737 /* include the terminating '\0' into script */
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4738 value[1].len++;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4739
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4740 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
4741
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4742 sc.cf = cf;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4743 sc.source = &value[1];
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4744 sc.lengths = &plcf->upstream.store_lengths;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4745 sc.values = &plcf->upstream.store_values;
1563
022ec9420f80 style fix: remove double semicolons
Igor Sysoev <igor@sysoev.ru>
parents: 1488
diff changeset
4746 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
4747 sc.complete_lengths = 1;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4748 sc.complete_values = 1;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4749
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4750 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
4751 return NGX_CONF_ERROR;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4752 }
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4753
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4754 return NGX_CONF_OK;
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4755 }
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4756
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4757
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4758 #if (NGX_HTTP_CACHE)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4759
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4760 static char *
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4761 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
4762 {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4763 ngx_http_proxy_loc_conf_t *plcf = conf;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4764
5951
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4765 ngx_str_t *value;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4766 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
4767 ngx_http_compile_complex_value_t ccv;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4768
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4769 value = cf->args->elts;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4770
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
4771 if (plcf->upstream.cache != NGX_CONF_UNSET) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4772 return "is duplicate";
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4773 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4774
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4775 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
4776 plcf->upstream.cache = 0;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4777 return NGX_CONF_OK;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4778 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4779
5947
d9025ea1f5a5 Upstream: simplified proxy_store and friends configuration code.
Valentin Bartenev <vbart@nginx.com>
parents: 5940
diff changeset
4780 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
4781 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
4782 }
d65e58a8d3a4 report about proxy/fastcgi_store and proxy/fastcgi_cache incompatibility
Igor Sysoev <igor@sysoev.ru>
parents: 2894
diff changeset
4783
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
4784 plcf->upstream.cache = 1;
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
4785
5951
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4786 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
4787
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4788 ccv.cf = cf;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4789 ccv.value = &value[1];
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4790 ccv.complex_value = &cv;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4791
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4792 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
4793 return NGX_CONF_ERROR;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4794 }
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4795
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4796 if (cv.lengths != NULL) {
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4797
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4798 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
4799 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
4800 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
4801 return NGX_CONF_ERROR;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4802 }
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4803
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4804 *plcf->upstream.cache_value = cv;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4805
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4806 return NGX_CONF_OK;
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4807 }
610832763648 Upstream: added variables support to proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5949
diff changeset
4808
5949
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
4809 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
4810 &ngx_http_proxy_module);
634da79665d3 Upstream: refactored proxy_cache and friends.
Valentin Bartenev <vbart@nginx.com>
parents: 5948
diff changeset
4811 if (plcf->upstream.cache_zone == NULL) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4812 return NGX_CONF_ERROR;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4813 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4814
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4815 return NGX_CONF_OK;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4816 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4817
2672
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4818
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4819 static char *
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4820 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
4821 {
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4822 ngx_http_proxy_loc_conf_t *plcf = conf;
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4823
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4824 ngx_str_t *value;
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4825 ngx_http_compile_complex_value_t ccv;
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4826
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4827 value = cf->args->elts;
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4828
4947
4251e72b8bb4 Allow the complex value to be defined as an empty string.
Ruslan Ermilov <ru@nginx.com>
parents: 4927
diff changeset
4829 if (plcf->cache_key.value.data) {
2672
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4830 return "is duplicate";
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4831 }
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4832
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4833 ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4834
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4835 ccv.cf = cf;
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4836 ccv.value = &value[1];
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4837 ccv.complex_value = &plcf->cache_key;
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4838
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4839 if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4840 return NGX_CONF_ERROR;
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4841 }
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4842
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4843 return NGX_CONF_OK;
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4844 }
b212066acf50 proxy_cache_key
Igor Sysoev <igor@sysoev.ru>
parents: 2601
diff changeset
4845
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4846 #endif
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4847
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
4848
5900
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4849 #if (NGX_HTTP_SSL)
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4850
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4851 static char *
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4852 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
4853 {
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4854 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
4855
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4856 ngx_str_t *value;
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4857
7833
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
4858 if (plcf->upstream.ssl_passwords != NGX_CONF_UNSET_PTR) {
5900
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4859 return "is duplicate";
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4860 }
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4861
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4862 value = cf->args->elts;
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4863
7833
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
4864 plcf->upstream.ssl_passwords = ngx_ssl_read_password_file(cf, &value[1]);
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
4865
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
4866 if (plcf->upstream.ssl_passwords == NULL) {
5900
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4867 return NGX_CONF_ERROR;
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4868 }
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4869
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4870 return NGX_CONF_OK;
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4871 }
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4872
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4873 #endif
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
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
4876 static char *
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4877 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
4878 {
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4879 #if (NGX_FREEBSD)
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4880 ssize_t *np = data;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4881
673
b80f94fa2197 nginx-0.3.58-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
4882 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
4883 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4884 "\"proxy_send_lowat\" must be less than %d "
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4885 "(sysctl net.inet.tcp.sendspace)",
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4886 ngx_freebsd_net_inet_tcp_sendspace);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4887
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4888 return NGX_CONF_ERROR;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4889 }
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4890
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4891 #elif !(NGX_HAVE_SO_SNDLOWAT)
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4892 ssize_t *np = data;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4893
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4894 ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4895 "\"proxy_send_lowat\" is not supported, ignored");
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4896
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4897 *np = 0;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4898
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4899 #endif
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4900
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4901 return NGX_CONF_OK;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4902 }
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 843
diff changeset
4903
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 843
diff changeset
4904
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4905 #if (NGX_HTTP_SSL)
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4906
7730
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
4907 static char *
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
4908 ngx_http_proxy_ssl_conf_command_check(ngx_conf_t *cf, void *post, void *data)
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
4909 {
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
4910 #ifndef SSL_CONF_FLAG_FILE
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
4911 return "is not supported on this platform";
7787
7ce28b4cc57e SSL: fixed build by Sun C with old OpenSSL versions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7786
diff changeset
4912 #else
7ce28b4cc57e SSL: fixed build by Sun C with old OpenSSL versions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7786
diff changeset
4913 return NGX_CONF_OK;
7730
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
4914 #endif
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
4915 }
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
4916
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
4917
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4918 static ngx_int_t
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4919 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
4920 {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4921 ngx_pool_cleanup_t *cln;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4922
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4923 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
4924 if (plcf->upstream.ssl == NULL) {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4925 return NGX_ERROR;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4926 }
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 plcf->upstream.ssl->log = cf->log;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4929
5385
7c1f4977d8a0 Proxy: added the "proxy_ssl_protocols" directive.
Andrei Belov <defan@nginx.com>
parents: 5359
diff changeset
4930 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
4931 != NGX_OK)
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4932 {
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4933 return NGX_ERROR;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4934 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
4935
5659
3fb6615bb87f Upstream: plugged potential memory leak on reload.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5575
diff changeset
4936 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
4937 if (cln == NULL) {
7473
8981dbb12254 SSL: fixed potential leak on memory allocation errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7371
diff changeset
4938 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
4939 return NGX_ERROR;
3fb6615bb87f Upstream: plugged potential memory leak on reload.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5575
diff changeset
4940 }
3fb6615bb87f Upstream: plugged potential memory leak on reload.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5575
diff changeset
4941
3fb6615bb87f Upstream: plugged potential memory leak on reload.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5575
diff changeset
4942 cln->handler = ngx_ssl_cleanup_ctx;
3fb6615bb87f Upstream: plugged potential memory leak on reload.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5575
diff changeset
4943 cln->data = plcf->upstream.ssl;
3fb6615bb87f Upstream: plugged potential memory leak on reload.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5575
diff changeset
4944
7833
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
4945 if (plcf->upstream.ssl_certificate) {
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
4946
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
4947 if (plcf->upstream.ssl_certificate_key == NULL) {
5900
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4948 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
4949 "no \"proxy_ssl_certificate_key\" is defined "
7833
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
4950 "for certificate \"%V\"",
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
4951 &plcf->upstream.ssl_certificate->value);
5900
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4952 return NGX_ERROR;
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4953 }
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4954
7833
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
4955 if (plcf->upstream.ssl_certificate->lengths
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
4956 || plcf->upstream.ssl_certificate_key->lengths)
5900
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4957 {
7833
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
4958 plcf->upstream.ssl_passwords =
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
4959 ngx_ssl_preserve_passwords(cf, plcf->upstream.ssl_passwords);
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
4960 if (plcf->upstream.ssl_passwords == NULL) {
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
4961 return NGX_ERROR;
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
4962 }
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
4963
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
4964 } else {
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
4965 if (ngx_ssl_certificate(cf, plcf->upstream.ssl,
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
4966 &plcf->upstream.ssl_certificate->value,
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
4967 &plcf->upstream.ssl_certificate_key->value,
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
4968 plcf->upstream.ssl_passwords)
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
4969 != NGX_OK)
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
4970 {
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
4971 return NGX_ERROR;
3ab8e1e2f0f7 Upstream: variables support in certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7831
diff changeset
4972 }
5900
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4973 }
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4974 }
20d966ad5e89 Upstream: add "proxy_ssl_certificate" and friends.
Piotr Sikora <piotr@cloudflare.com>
parents: 5883
diff changeset
4975
6591
04d8d1f85649 SSL: ngx_ssl_ciphers() to set list of ciphers.
Tim Taubert <tim@timtaubert.de>
parents: 6530
diff changeset
4976 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
4977 != NGX_OK)
5390
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
4978 {
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
4979 return NGX_ERROR;
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
4980 }
919d230ecdbe Proxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora <piotr@cloudflare.com>
parents: 5385
diff changeset
4981
5661
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4982 if (plcf->upstream.ssl_verify) {
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4983 if (plcf->ssl_trusted_certificate.len == 0) {
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4984 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
4985 "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
4986 return NGX_ERROR;
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4987 }
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4988
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4989 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
4990 &plcf->ssl_trusted_certificate,
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4991 plcf->ssl_verify_depth)
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4992 != NGX_OK)
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4993 {
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4994 return NGX_ERROR;
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4995 }
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4996
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4997 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
4998 return NGX_ERROR;
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
4999 }
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
5000 }
060c2e692b96 Upstream: proxy_ssl_verify and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5660
diff changeset
5001
7320
696df3ac27ac SSL: save sessions for upstream peers using a callback function.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7271
diff changeset
5002 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
5003 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
5004 != NGX_OK)
696df3ac27ac SSL: save sessions for upstream peers using a callback function.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7271
diff changeset
5005 {
696df3ac27ac SSL: save sessions for upstream peers using a callback function.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7271
diff changeset
5006 return NGX_ERROR;
696df3ac27ac SSL: save sessions for upstream peers using a callback function.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7271
diff changeset
5007 }
696df3ac27ac SSL: save sessions for upstream peers using a callback function.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7271
diff changeset
5008
7730
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
5009 if (ngx_ssl_conf_commands(cf, plcf->upstream.ssl, plcf->ssl_conf_commands)
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
5010 != NGX_OK)
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
5011 {
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
5012 return NGX_ERROR;
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
5013 }
1a719ee45526 Upstream: proxy_ssl_conf_command and friends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7728
diff changeset
5014
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
5015 return NGX_OK;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
5016 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
5017
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
5018 #endif
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
5019
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
5020
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
5021 static void
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
5022 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
5023 {
2203
8e5bf1bc87e2 *) refactor ngx_parse_inet_url()
Igor Sysoev <igor@sysoev.ru>
parents: 2184
diff changeset
5024 if (u->family != AF_UNIX) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
5025
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
5026 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
5027
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
5028 v->host_header = u->host;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
5029
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
5030 if (u->default_port == 80) {
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3477
diff changeset
5031 ngx_str_set(&v->port, "80");
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
5032
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
5033 } else {
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3477
diff changeset
5034 ngx_str_set(&v->port, "443");
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
5035 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
5036
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
5037 } 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
5038 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
5039 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
5040 v->port = u->port_text;
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
5041 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
5042
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
5043 v->key_start.len += v->host_header.len;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
5044
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
5045 } else {
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3477
diff changeset
5046 ngx_str_set(&v->host_header, "localhost");
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3477
diff changeset
5047 ngx_str_null(&v->port);
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2430
diff changeset
5048 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
5049 }
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
5050
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
5051 v->uri = u->uri;
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1616
diff changeset
5052 }