annotate src/http/modules/ngx_http_gzip_static_module.c @ 8124:f5515e727656

Fixed "zero size buf" alerts with subrequests. Since 4611:2b6cb7528409 responses from the gzip static, flv, and mp4 modules can be used with subrequests, though empty files were not properly handled. Empty gzipped, flv, and mp4 files thus resulted in "zero size buf in output" alerts. While valid corresponding files are not expected to be empty, such files shouldn't result in alerts. Fix is to set b->sync on such empty subrequest responses, similarly to what ngx_http_send_special() does. Additionally, the static module, the ngx_http_send_response() function, and file cache are modified to do the same instead of not sending the response body at all in such cases, since not sending the response body at all is believed to be at least questionable, and might break various filters which do not expect such behaviour.
author Maxim Dounin <mdounin@mdounin.ru>
date Sat, 28 Jan 2023 05:23:33 +0300
parents c7e103acb409
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 416
diff changeset
1
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 416
diff changeset
2 /*
444
42d11f017717 nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents: 441
diff changeset
3 * Copyright (C) Igor Sysoev
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 3527
diff changeset
4 * Copyright (C) Nginx, Inc.
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 416
diff changeset
5 */
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 416
diff changeset
6
1
d220029ac7f3 nginx-0.0.1-2002-08-15-21:20:26 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
d220029ac7f3 nginx-0.0.1-2002-08-15-21:20:26 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_config.h>
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 74
diff changeset
9 #include <ngx_core.h>
3
34a521b1a148 nginx-0.0.1-2002-08-20-18:48:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 1
diff changeset
10 #include <ngx_http.h>
34a521b1a148 nginx-0.0.1-2002-08-20-18:48:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 1
diff changeset
11
1
d220029ac7f3 nginx-0.0.1-2002-08-15-21:20:26 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12
4836
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
13 #define NGX_HTTP_GZIP_STATIC_OFF 0
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
14 #define NGX_HTTP_GZIP_STATIC_ON 1
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
15 #define NGX_HTTP_GZIP_STATIC_ALWAYS 2
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
16
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
17
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
18 typedef struct {
4836
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
19 ngx_uint_t enable;
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
20 } ngx_http_gzip_static_conf_t;
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
21
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
22
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
23 static ngx_int_t ngx_http_gzip_static_handler(ngx_http_request_t *r);
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
24 static void *ngx_http_gzip_static_create_conf(ngx_conf_t *cf);
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
25 static char *ngx_http_gzip_static_merge_conf(ngx_conf_t *cf, void *parent,
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
26 void *child);
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
27 static ngx_int_t ngx_http_gzip_static_init(ngx_conf_t *cf);
148
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
28
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
29
4836
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
30 static ngx_conf_enum_t ngx_http_gzip_static[] = {
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
31 { ngx_string("off"), NGX_HTTP_GZIP_STATIC_OFF },
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
32 { ngx_string("on"), NGX_HTTP_GZIP_STATIC_ON },
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
33 { ngx_string("always"), NGX_HTTP_GZIP_STATIC_ALWAYS },
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
34 { ngx_null_string, 0 }
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
35 };
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
36
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
37
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
38 static ngx_command_t ngx_http_gzip_static_commands[] = {
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
39
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
40 { ngx_string("gzip_static"),
5587
ceecde39853f Gzip static: fixed NGX_CONF_FLAG misuse.
Valentin Bartenev <vbart@nginx.com>
parents: 4836
diff changeset
41 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
4836
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
42 ngx_conf_set_enum_slot,
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
43 NGX_HTTP_LOC_CONF_OFFSET,
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
44 offsetof(ngx_http_gzip_static_conf_t, enable),
4836
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
45 &ngx_http_gzip_static },
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
46
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
47 ngx_null_command
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
48 };
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
49
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
50
6922
a72886067bbb Added missing static specifiers.
Eran Kornblau <erankor@gmail.com>
parents: 5698
diff changeset
51 static ngx_http_module_t ngx_http_gzip_static_module_ctx = {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
52 NULL, /* preconfiguration */
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
53 ngx_http_gzip_static_init, /* postconfiguration */
177
4db54fdbcbe7 nginx-0.0.1-2003-11-10-20:17:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 176
diff changeset
54
148
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
55 NULL, /* create main configuration */
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
56 NULL, /* init main configuration */
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
57
148
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
58 NULL, /* create server configuration */
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
59 NULL, /* merge server configuration */
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
60
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
61 ngx_http_gzip_static_create_conf, /* create location configuration */
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
62 ngx_http_gzip_static_merge_conf /* merge location configuration */
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
63 };
148
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
64
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
65
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
66 ngx_module_t ngx_http_gzip_static_module = {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
67 NGX_MODULE_V1,
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
68 &ngx_http_gzip_static_module_ctx, /* module context */
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
69 ngx_http_gzip_static_commands, /* module directives */
148
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
70 NGX_HTTP_MODULE, /* module type */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
71 NULL, /* init master */
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
72 NULL, /* init module */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
73 NULL, /* init process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
74 NULL, /* init thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
75 NULL, /* exit thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
76 NULL, /* exit process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
77 NULL, /* exit master */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
78 NGX_MODULE_V1_PADDING
148
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
79 };
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
80
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
81
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
82 static ngx_int_t
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
83 ngx_http_gzip_static_handler(ngx_http_request_t *r)
148
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
84 {
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
85 u_char *p;
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
86 size_t root;
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
87 ngx_str_t path;
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
88 ngx_int_t rc;
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
89 ngx_uint_t level;
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
90 ngx_log_t *log;
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
91 ngx_buf_t *b;
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
92 ngx_chain_t out;
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
93 ngx_table_elt_t *h;
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
94 ngx_open_file_info_t of;
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
95 ngx_http_core_loc_conf_t *clcf;
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
96 ngx_http_gzip_static_conf_t *gzcf;
201
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
97
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
98 if (!(r->method & (NGX_HTTP_GET|NGX_HTTP_HEAD))) {
1832
2547ef00c722 ngx_http_gzip_static_module should DECLINE request
Igor Sysoev <igor@sysoev.ru>
parents: 1799
diff changeset
99 return NGX_DECLINED;
639
715d24327080 nginx-0.3.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 603
diff changeset
100 }
715d24327080 nginx-0.3.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 603
diff changeset
101
201
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
102 if (r->uri.data[r->uri.len - 1] == '/') {
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
103 return NGX_DECLINED;
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
104 }
148
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
105
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
106 gzcf = ngx_http_get_module_loc_conf(r, ngx_http_gzip_static_module);
201
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
107
4836
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
108 if (gzcf->enable == NGX_HTTP_GZIP_STATIC_OFF) {
3135
784126370092 nginx always sent "Vary: Accept-Encoding",
Igor Sysoev <igor@sysoev.ru>
parents: 2912
diff changeset
109 return NGX_DECLINED;
784126370092 nginx always sent "Vary: Accept-Encoding",
Igor Sysoev <igor@sysoev.ru>
parents: 2912
diff changeset
110 }
784126370092 nginx always sent "Vary: Accept-Encoding",
Igor Sysoev <igor@sysoev.ru>
parents: 2912
diff changeset
111
4836
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
112 if (gzcf->enable == NGX_HTTP_GZIP_STATIC_ON) {
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
113 rc = ngx_http_gzip_ok(r);
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
114
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
115 } else {
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
116 /* always */
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
117 rc = NGX_OK;
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
118 }
3312
dddca6f42e7b nginx sent gzipped responses to clients those do not support gzip,
Igor Sysoev <igor@sysoev.ru>
parents: 3178
diff changeset
119
3135
784126370092 nginx always sent "Vary: Accept-Encoding",
Igor Sysoev <igor@sysoev.ru>
parents: 2912
diff changeset
120 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
784126370092 nginx always sent "Vary: Accept-Encoding",
Igor Sysoev <igor@sysoev.ru>
parents: 2912
diff changeset
121
3312
dddca6f42e7b nginx sent gzipped responses to clients those do not support gzip,
Igor Sysoev <igor@sysoev.ru>
parents: 3178
diff changeset
122 if (!clcf->gzip_vary && rc != NGX_OK) {
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
123 return NGX_DECLINED;
201
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
124 }
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
125
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
126 log = r->connection->log;
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
127
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
128 p = ngx_http_map_uri_to_path(r, &path, &root, sizeof(".gz") - 1);
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
129 if (p == NULL) {
557
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
130 return NGX_HTTP_INTERNAL_SERVER_ERROR;
400
69e851f83522 nginx-0.0.8-2004-07-26-20:21:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 396
diff changeset
131 }
148
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
132
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
133 *p++ = '.';
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
134 *p++ = 'g';
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
135 *p++ = 'z';
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
136 *p = '\0';
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
137
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
138 path.len = p - path.data;
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1374
diff changeset
139
201
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
140 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, log, 0,
557
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
141 "http filename: \"%s\"", path.data);
148
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
142
2068
75a8d34459c5 ngx_memzero() ngx_open_file_info_t
Igor Sysoev <igor@sysoev.ru>
parents: 2063
diff changeset
143 ngx_memzero(&of, sizeof(ngx_open_file_info_t));
75a8d34459c5 ngx_memzero() ngx_open_file_info_t
Igor Sysoev <igor@sysoev.ru>
parents: 2063
diff changeset
144
3178
975f0558aab3 read_ahead
Igor Sysoev <igor@sysoev.ru>
parents: 3135
diff changeset
145 of.read_ahead = clcf->read_ahead;
2129
25add486e7aa directio
Igor Sysoev <igor@sysoev.ru>
parents: 2087
diff changeset
146 of.directio = clcf->directio;
1767
c42431762903 open_file_cache_retest > open_file_cache_valid
Igor Sysoev <igor@sysoev.ru>
parents: 1696
diff changeset
147 of.valid = clcf->open_file_cache_valid;
1772
25c93614e6b9 open_file_cache_min_uses
Igor Sysoev <igor@sysoev.ru>
parents: 1767
diff changeset
148 of.min_uses = clcf->open_file_cache_min_uses;
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1374
diff changeset
149 of.errors = clcf->open_file_cache_errors;
1457
223e92651ca5 open_file_cache_events
Igor Sysoev <igor@sysoev.ru>
parents: 1454
diff changeset
150 of.events = clcf->open_file_cache_events;
4494
13e09cf11d4e Disable symlinks: initialization of the "disable_symlinks" field in
Valentin Bartenev <vbart@nginx.com>
parents: 4478
diff changeset
151
13e09cf11d4e Disable symlinks: initialization of the "disable_symlinks" field in
Valentin Bartenev <vbart@nginx.com>
parents: 4478
diff changeset
152 if (ngx_http_set_disable_symlinks(r, clcf, &path, &of) != NGX_OK) {
13e09cf11d4e Disable symlinks: initialization of the "disable_symlinks" field in
Valentin Bartenev <vbart@nginx.com>
parents: 4478
diff changeset
153 return NGX_HTTP_INTERNAL_SERVER_ERROR;
13e09cf11d4e Disable symlinks: initialization of the "disable_symlinks" field in
Valentin Bartenev <vbart@nginx.com>
parents: 4478
diff changeset
154 }
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1374
diff changeset
155
1799
0b5b94805d26 optimization
Igor Sysoev <igor@sysoev.ru>
parents: 1790
diff changeset
156 if (ngx_open_cached_file(clcf->open_file_cache, &path, &of, r->pool)
0b5b94805d26 optimization
Igor Sysoev <igor@sysoev.ru>
parents: 1790
diff changeset
157 != NGX_OK)
0b5b94805d26 optimization
Igor Sysoev <igor@sysoev.ru>
parents: 1790
diff changeset
158 {
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1374
diff changeset
159 switch (of.err) {
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1374
diff changeset
160
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1374
diff changeset
161 case 0:
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1374
diff changeset
162 return NGX_HTTP_INTERNAL_SERVER_ERROR;
148
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
163
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1374
diff changeset
164 case NGX_ENOENT:
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1374
diff changeset
165 case NGX_ENOTDIR:
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1374
diff changeset
166 case NGX_ENAMETOOLONG:
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1374
diff changeset
167
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
168 return NGX_DECLINED;
148
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
169
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1374
diff changeset
170 case NGX_EACCES:
4478
08713bac87fc Support for disable_symlinks in various modules.
Andrey Belov <defan@nginx.com>
parents: 4412
diff changeset
171 #if (NGX_HAVE_OPENAT)
08713bac87fc Support for disable_symlinks in various modules.
Andrey Belov <defan@nginx.com>
parents: 4412
diff changeset
172 case NGX_EMLINK:
08713bac87fc Support for disable_symlinks in various modules.
Andrey Belov <defan@nginx.com>
parents: 4412
diff changeset
173 case NGX_ELOOP:
08713bac87fc Support for disable_symlinks in various modules.
Andrey Belov <defan@nginx.com>
parents: 4412
diff changeset
174 #endif
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1374
diff changeset
175
170
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 165
diff changeset
176 level = NGX_LOG_ERR;
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1374
diff changeset
177 break;
148
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
178
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1374
diff changeset
179 default:
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1374
diff changeset
180
170
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 165
diff changeset
181 level = NGX_LOG_CRIT;
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1374
diff changeset
182 break;
148
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
183 }
170
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 165
diff changeset
184
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
185 ngx_log_error(level, log, of.err,
2756
09cab3f8d92e *) of.test_only to not open file if only stat() is enough
Igor Sysoev <igor@sysoev.ru>
parents: 2721
diff changeset
186 "%s \"%s\" failed", of.failed, path.data);
170
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 165
diff changeset
187
1799
0b5b94805d26 optimization
Igor Sysoev <igor@sysoev.ru>
parents: 1790
diff changeset
188 return NGX_DECLINED;
148
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
189 }
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
190
4836
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
191 if (gzcf->enable == NGX_HTTP_GZIP_STATIC_ON) {
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
192 r->gzip_vary = 1;
3313
118169a8ec92 refactor gzip_vary handling
Igor Sysoev <igor@sysoev.ru>
parents: 3312
diff changeset
193
4836
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
194 if (rc != NGX_OK) {
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
195 return NGX_DECLINED;
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
196 }
3312
dddca6f42e7b nginx sent gzipped responses to clients those do not support gzip,
Igor Sysoev <igor@sysoev.ru>
parents: 3178
diff changeset
197 }
dddca6f42e7b nginx sent gzipped responses to clients those do not support gzip,
Igor Sysoev <igor@sysoev.ru>
parents: 3178
diff changeset
198
1696
f5f124fbfa3b delete useless variable
Igor Sysoev <igor@sysoev.ru>
parents: 1457
diff changeset
199 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, log, 0, "http static fd: %d", of.fd);
148
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
200
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1374
diff changeset
201 if (of.is_dir) {
201
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
202 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, log, 0, "http dir");
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
203 return NGX_DECLINED;
148
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
204 }
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
205
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
206 #if !(NGX_WIN32) /* the not regular files are probably Unix specific */
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
207
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1374
diff changeset
208 if (!of.is_file) {
3498
9f20a6e758c3 do not log misleading errno in "not a regular file" error
Igor Sysoev <igor@sysoev.ru>
parents: 3313
diff changeset
209 ngx_log_error(NGX_LOG_CRIT, log, 0,
557
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
210 "\"%s\" is not a regular file", path.data);
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
211
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
212 return NGX_HTTP_NOT_FOUND;
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
213 }
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
214
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
215 #endif
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
216
2444
aee735f41627 set r->root_tested for non-error_page response only
Igor Sysoev <igor@sysoev.ru>
parents: 2231
diff changeset
217 r->root_tested = !r->error_page;
2087
c8039b26a949 always test root existence for access_log with variables
Igor Sysoev <igor@sysoev.ru>
parents: 2068
diff changeset
218
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
219 rc = ngx_http_discard_request_body(r);
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
220
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
221 if (rc != NGX_OK) {
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
222 return rc;
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
223 }
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
224
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
225 log->action = "sending response to client";
148
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
226
201
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
227 r->headers_out.status = NGX_HTTP_OK;
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1374
diff changeset
228 r->headers_out.content_length_n = of.size;
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1374
diff changeset
229 r->headers_out.last_modified_time = of.mtime;
201
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
230
4748
192f54280a7a Entity tags: set for static respones.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4611
diff changeset
231 if (ngx_http_set_etag(r) != NGX_OK) {
192f54280a7a Entity tags: set for static respones.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4611
diff changeset
232 return NGX_HTTP_INTERNAL_SERVER_ERROR;
192f54280a7a Entity tags: set for static respones.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4611
diff changeset
233 }
192f54280a7a Entity tags: set for static respones.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4611
diff changeset
234
201
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
235 if (ngx_http_set_content_type(r) != NGX_OK) {
200
abeaebe0a33c nginx-0.0.1-2003-11-28-20:41:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 199
diff changeset
236 return NGX_HTTP_INTERNAL_SERVER_ERROR;
abeaebe0a33c nginx-0.0.1-2003-11-28-20:41:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 199
diff changeset
237 }
abeaebe0a33c nginx-0.0.1-2003-11-28-20:41:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 199
diff changeset
238
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
239 h = ngx_list_push(&r->headers_out.headers);
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
240 if (h == NULL) {
6987
5116cfea1e9a Gzip static: use an appropriate error on memory allocation failure.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6973
diff changeset
241 return NGX_HTTP_INTERNAL_SERVER_ERROR;
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
242 }
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
243
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
244 h->hash = 1;
8031
d26db4f82d7d All known output headers can be linked lists now.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6987
diff changeset
245 h->next = NULL;
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3498
diff changeset
246 ngx_str_set(&h->key, "Content-Encoding");
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3498
diff changeset
247 ngx_str_set(&h->value, "gzip");
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3498
diff changeset
248 r->headers_out.content_encoding = h;
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
249
8120
c7e103acb409 Gzip static: ranges support (ticket #2349).
Maxim Dounin <mdounin@mdounin.ru>
parents: 8031
diff changeset
250 r->allow_ranges = 1;
c7e103acb409 Gzip static: ranges support (ticket #2349).
Maxim Dounin <mdounin@mdounin.ru>
parents: 8031
diff changeset
251
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
252 /* we need to allocate all before the header would be sent */
1
d220029ac7f3 nginx-0.0.1-2002-08-15-21:20:26 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
253
6973
99934aade555 Use ngx_calloc_buf() where appropriate.
Ruslan Ermilov <ru@nginx.com>
parents: 6922
diff changeset
254 b = ngx_calloc_buf(r->pool);
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
255 if (b == NULL) {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
256 return NGX_HTTP_INTERNAL_SERVER_ERROR;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
257 }
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
258
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
259 b->file = ngx_pcalloc(r->pool, sizeof(ngx_file_t));
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
260 if (b->file == NULL) {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
261 return NGX_HTTP_INTERNAL_SERVER_ERROR;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
262 }
403
ea3113b181d1 nginx-0.0.9-2004-07-28-23:21:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 400
diff changeset
263
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 89
diff changeset
264 rc = ngx_http_send_header(r);
143
5526213be452 nginx-0.0.1-2003-10-10-19:10:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 142
diff changeset
265
585
401de5a43ba5 nginx-0.3.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
266 if (rc == NGX_ERROR || rc > NGX_OK || r->header_only) {
143
5526213be452 nginx-0.0.1-2003-10-10-19:10:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 142
diff changeset
267 return rc;
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 96
diff changeset
268 }
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 89
diff changeset
269
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 334
diff changeset
270 b->file_pos = 0;
1454
f497ed7682a7 open_file_cache in HTTP
Igor Sysoev <igor@sysoev.ru>
parents: 1374
diff changeset
271 b->file_last = of.size;
1
d220029ac7f3 nginx-0.0.1-2002-08-15-21:20:26 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
272
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
273 b->in_file = b->file_last ? 1 : 0;
4611
2b6cb7528409 Allows particular modules to handle subrequests properly.
Andrey Belov <defan@nginx.com>
parents: 4494
diff changeset
274 b->last_buf = (r == r->main) ? 1 : 0;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
275 b->last_in_chain = 1;
8124
f5515e727656 Fixed "zero size buf" alerts with subrequests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8120
diff changeset
276 b->sync = (b->last_buf || b->in_file) ? 0 : 1;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
277
1696
f5f124fbfa3b delete useless variable
Igor Sysoev <igor@sysoev.ru>
parents: 1457
diff changeset
278 b->file->fd = of.fd;
557
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
279 b->file->name = path;
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 334
diff changeset
280 b->file->log = log;
2231
8564129d49b6 *) handle unaligned file part for directio
Igor Sysoev <igor@sysoev.ru>
parents: 2129
diff changeset
281 b->file->directio = of.is_directio;
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 334
diff changeset
282
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 334
diff changeset
283 out.buf = b;
153
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 148
diff changeset
284 out.next = NULL;
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 148
diff changeset
285
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 148
diff changeset
286 return ngx_http_output_filter(r, &out);
1
d220029ac7f3 nginx-0.0.1-2002-08-15-21:20:26 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
287 }
148
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
288
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
289
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
290 static void *
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
291 ngx_http_gzip_static_create_conf(ngx_conf_t *cf)
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
292 {
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
293 ngx_http_gzip_static_conf_t *conf;
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
294
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
295 conf = ngx_palloc(cf->pool, sizeof(ngx_http_gzip_static_conf_t));
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
296 if (conf == NULL) {
2912
c7d57b539248 return NULL instead of NGX_CONF_ERROR on a create conf failure
Igor Sysoev <igor@sysoev.ru>
parents: 2877
diff changeset
297 return NULL;
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
298 }
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
299
4836
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
300 conf->enable = NGX_CONF_UNSET_UINT;
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
301
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
302 return conf;
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
303 }
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
304
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
305
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
306 static char *
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
307 ngx_http_gzip_static_merge_conf(ngx_conf_t *cf, void *parent, void *child)
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
308 {
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
309 ngx_http_gzip_static_conf_t *prev = parent;
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
310 ngx_http_gzip_static_conf_t *conf = child;
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
311
4836
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
312 ngx_conf_merge_uint_value(conf->enable, prev->enable,
e368b822d034 Gzip static: "always" parameter in "gzip_static" directive.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4748
diff changeset
313 NGX_HTTP_GZIP_STATIC_OFF);
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
314
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
315 return NGX_CONF_OK;
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
316 }
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
317
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
318
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
319 static ngx_int_t
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
320 ngx_http_gzip_static_init(ngx_conf_t *cf)
148
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
321 {
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
322 ngx_http_handler_pt *h;
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
323 ngx_http_core_main_conf_t *cmcf;
396
6f3b20c1ac50 nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 346
diff changeset
324
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
325 cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
326
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
327 h = ngx_array_push(&cmcf->phases[NGX_HTTP_CONTENT_PHASE].handlers);
201
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
328 if (h == NULL) {
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
329 return NGX_ERROR;
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
330 }
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
331
1790
775edc46ee66 ngx_http_gzip_static_module and gzip_disable
Igor Sysoev <igor@sysoev.ru>
parents: 1772
diff changeset
332 *h = ngx_http_gzip_static_handler;
148
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
333
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
334 return NGX_OK;
5afee0074707 nginx-0.0.1-2003-10-17-00:19:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
335 }