annotate src/http/modules/ngx_http_random_index_module.c @ 4034:e2c075e774b6

Cache size accounting fix: actual cache size on disk was less than needed by sum of sizes of files loaded by worker processes themselves while cache loader was running. The bug has been introduced in r3900.
author Igor Sysoev <igor@sysoev.ru>
date Thu, 25 Aug 2011 17:29:34 +0000
parents 84905c7b2aa7
children d620f497c50f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2235
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2 /*
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4 */
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7 #include <ngx_config.h>
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_core.h>
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_http.h>
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12 typedef struct {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13 ngx_flag_t enable;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14 } ngx_http_random_index_loc_conf_t;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
16
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
17 #define NGX_HTTP_RANDOM_INDEX_PREALLOCATE 50
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
18
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
19
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
20 static ngx_int_t ngx_http_random_index_error(ngx_http_request_t *r,
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
21 ngx_dir_t *dir, ngx_str_t *name);
2266
6223d5a9e87f back out $random_index variable
Igor Sysoev <igor@sysoev.ru>
parents: 2258
diff changeset
22 static ngx_int_t ngx_http_random_index_init(ngx_conf_t *cf);
2235
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
23 static void *ngx_http_random_index_create_loc_conf(ngx_conf_t *cf);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
24 static char *ngx_http_random_index_merge_loc_conf(ngx_conf_t *cf,
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
25 void *parent, void *child);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
26
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
27
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
28 static ngx_command_t ngx_http_random_index_commands[] = {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
29
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
30 { ngx_string("random_index"),
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
31 NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
32 ngx_conf_set_flag_slot,
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
33 NGX_HTTP_LOC_CONF_OFFSET,
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
34 offsetof(ngx_http_random_index_loc_conf_t, enable),
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
35 NULL },
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
36
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
37 ngx_null_command
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
38 };
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
39
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
40
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
41 static ngx_http_module_t ngx_http_random_index_module_ctx = {
2266
6223d5a9e87f back out $random_index variable
Igor Sysoev <igor@sysoev.ru>
parents: 2258
diff changeset
42 NULL, /* preconfiguration */
2235
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
43 ngx_http_random_index_init, /* postconfiguration */
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
44
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
45 NULL, /* create main configuration */
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
46 NULL, /* init main configuration */
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
47
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
48 NULL, /* create server configuration */
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
49 NULL, /* merge server configuration */
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
50
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
51 ngx_http_random_index_create_loc_conf, /* create location configration */
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
52 ngx_http_random_index_merge_loc_conf /* merge location configration */
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
53 };
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
54
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
55
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
56 ngx_module_t ngx_http_random_index_module = {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
57 NGX_MODULE_V1,
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
58 &ngx_http_random_index_module_ctx, /* module context */
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
59 ngx_http_random_index_commands, /* module directives */
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
60 NGX_HTTP_MODULE, /* module type */
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
61 NULL, /* init master */
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
62 NULL, /* init module */
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
63 NULL, /* init process */
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
64 NULL, /* init thread */
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
65 NULL, /* exit thread */
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
66 NULL, /* exit process */
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
67 NULL, /* exit master */
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
68 NGX_MODULE_V1_PADDING
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
69 };
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
70
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
71
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
72 static ngx_int_t
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
73 ngx_http_random_index_handler(ngx_http_request_t *r)
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
74 {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
75 u_char *last, *filename;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
76 size_t len, allocated, root;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
77 ngx_err_t err;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
78 ngx_int_t rc;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
79 ngx_str_t path, uri, *name;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
80 ngx_dir_t dir;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
81 ngx_uint_t n, level;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
82 ngx_array_t names;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
83 ngx_http_random_index_loc_conf_t *rlcf;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
84
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
85 if (r->uri.data[r->uri.len - 1] != '/') {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
86 return NGX_DECLINED;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
87 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
88
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
89 if (!(r->method & (NGX_HTTP_GET|NGX_HTTP_HEAD|NGX_HTTP_POST))) {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
90 return NGX_DECLINED;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
91 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
92
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
93 rlcf = ngx_http_get_module_loc_conf(r, ngx_http_random_index_module);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
94
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
95 if (!rlcf->enable) {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
96 return NGX_DECLINED;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
97 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
98
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
99 #if (NGX_HAVE_D_TYPE)
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
100 len = NGX_DIR_MASK_LEN;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
101 #else
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
102 len = NGX_HTTP_RANDOM_INDEX_PREALLOCATE;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
103 #endif
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
104
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
105 last = ngx_http_map_uri_to_path(r, &path, &root, len);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
106 if (last == NULL) {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
107 return NGX_HTTP_INTERNAL_SERVER_ERROR;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
108 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
109
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
110 allocated = path.len;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
111
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
112 path.len = last - path.data - 1;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
113 path.data[path.len] = '\0';
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
114
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
115 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
116 "http random index: \"%s\"", path.data);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
117
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
118 if (ngx_open_dir(&path, &dir) == NGX_ERROR) {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
119 err = ngx_errno;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
120
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
121 if (err == NGX_ENOENT
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
122 || err == NGX_ENOTDIR
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
123 || err == NGX_ENAMETOOLONG)
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
124 {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
125 level = NGX_LOG_ERR;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
126 rc = NGX_HTTP_NOT_FOUND;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
127
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
128 } else if (err == NGX_EACCES) {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
129 level = NGX_LOG_ERR;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
130 rc = NGX_HTTP_FORBIDDEN;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
131
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
132 } else {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
133 level = NGX_LOG_CRIT;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
134 rc = NGX_HTTP_INTERNAL_SERVER_ERROR;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
135 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
136
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
137 ngx_log_error(level, r->connection->log, err,
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
138 ngx_open_dir_n " \"%s\" failed", path.data);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
139
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
140 return rc;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
141 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
142
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
143 if (ngx_array_init(&names, r->pool, 32, sizeof(ngx_str_t)) != NGX_OK) {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
144 return ngx_http_random_index_error(r, &dir, &path);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
145 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
146
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
147 filename = path.data;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
148 filename[path.len] = '/';
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
149
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
150 for ( ;; ) {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
151 ngx_set_errno(0);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
152
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
153 if (ngx_read_dir(&dir) == NGX_ERROR) {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
154 err = ngx_errno;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
155
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
156 if (err != NGX_ENOMOREFILES) {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
157 ngx_log_error(NGX_LOG_CRIT, r->connection->log, err,
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
158 ngx_read_dir_n " \"%V\" failed", &path);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
159 return ngx_http_random_index_error(r, &dir, &path);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
160 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
161
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
162 break;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
163 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
164
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
165 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
166 "http random index file: \"%s\"", ngx_de_name(&dir));
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
167
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
168 if (ngx_de_name(&dir)[0] == '.') {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
169 continue;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
170 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
171
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
172 len = ngx_de_namelen(&dir);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
173
3203
a56cccd588e6 update r3201: ngx_http_random_index_module should behave consistently
Igor Sysoev <igor@sysoev.ru>
parents: 3200
diff changeset
174 if (dir.type == 0 || ngx_de_is_link(&dir)) {
2235
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
175
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
176 /* 1 byte for '/' and 1 byte for terminating '\0' */
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
177
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
178 if (path.len + 1 + len + 1 > allocated) {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
179 allocated = path.len + 1 + len + 1
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
180 + NGX_HTTP_RANDOM_INDEX_PREALLOCATE;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
181
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
182 filename = ngx_pnalloc(r->pool, allocated);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
183 if (filename == NULL) {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
184 return ngx_http_random_index_error(r, &dir, &path);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
185 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
186
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
187 last = ngx_cpystrn(filename, path.data, path.len + 1);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
188 *last++ = '/';
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
189 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
190
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
191 ngx_cpystrn(last, ngx_de_name(&dir), len + 1);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
192
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
193 if (ngx_de_info(filename, &dir) == NGX_FILE_ERROR) {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
194 err = ngx_errno;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
195
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
196 if (err != NGX_ENOENT) {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
197 ngx_log_error(NGX_LOG_CRIT, r->connection->log, err,
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
198 ngx_de_info_n " \"%s\" failed", filename);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
199 return ngx_http_random_index_error(r, &dir, &path);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
200 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
201
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
202 if (ngx_de_link_info(filename, &dir) == NGX_FILE_ERROR) {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
203 ngx_log_error(NGX_LOG_CRIT, r->connection->log, ngx_errno,
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
204 ngx_de_link_info_n " \"%s\" failed",
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
205 filename);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
206 return ngx_http_random_index_error(r, &dir, &path);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
207 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
208 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
209 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
210
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
211 if (!ngx_de_is_file(&dir)) {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
212 continue;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
213 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
214
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
215 name = ngx_array_push(&names);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
216 if (name == NULL) {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
217 return ngx_http_random_index_error(r, &dir, &path);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
218 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
219
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
220 name->len = len;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
221
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
222 name->data = ngx_pnalloc(r->pool, len);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
223 if (name->data == NULL) {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
224 return ngx_http_random_index_error(r, &dir, &path);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
225 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
226
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
227 ngx_memcpy(name->data, ngx_de_name(&dir), len);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
228 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
229
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
230 if (ngx_close_dir(&dir) == NGX_ERROR) {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
231 ngx_log_error(NGX_LOG_ALERT, r->connection->log, ngx_errno,
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
232 ngx_close_dir_n " \"%s\" failed", &path);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
233 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
234
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
235 n = names.nelts;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
236
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
237 if (n == 0) {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
238 return NGX_DECLINED;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
239 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
240
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
241 name = names.elts;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
242
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
243 n = (ngx_uint_t) (((uint64_t) ngx_random() * n) / 0x80000000);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
244
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
245 uri.len = r->uri.len + name[n].len;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
246
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
247 uri.data = ngx_pnalloc(r->pool, uri.len);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
248 if (uri.data == NULL) {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
249 return NGX_HTTP_INTERNAL_SERVER_ERROR;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
250 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
251
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
252 last = ngx_copy(uri.data, r->uri.data, r->uri.len);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
253 ngx_memcpy(last, name[n].data, name[n].len);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
254
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
255 return ngx_http_internal_redirect(r, &uri, &r->args);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
256 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
257
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
258
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
259 static ngx_int_t
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
260 ngx_http_random_index_error(ngx_http_request_t *r, ngx_dir_t *dir,
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
261 ngx_str_t *name)
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
262 {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
263 if (ngx_close_dir(dir) == NGX_ERROR) {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
264 ngx_log_error(NGX_LOG_ALERT, r->connection->log, ngx_errno,
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
265 ngx_close_dir_n " \"%V\" failed", name);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
266 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
267
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
268 return NGX_HTTP_INTERNAL_SERVER_ERROR;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
269 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
270
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
271
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
272 static void *
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
273 ngx_http_random_index_create_loc_conf(ngx_conf_t *cf)
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
274 {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
275 ngx_http_random_index_loc_conf_t *conf;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
276
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
277 conf = ngx_palloc(cf->pool, sizeof(ngx_http_random_index_loc_conf_t));
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
278 if (conf == NULL) {
2912
c7d57b539248 return NULL instead of NGX_CONF_ERROR on a create conf failure
Igor Sysoev <igor@sysoev.ru>
parents: 2721
diff changeset
279 return NULL;
2235
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
280 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
281
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
282 conf->enable = NGX_CONF_UNSET;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
283
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
284 return conf;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
285 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
286
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
287
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
288 static char *
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
289 ngx_http_random_index_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
290 {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
291 ngx_http_random_index_loc_conf_t *prev = parent;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
292 ngx_http_random_index_loc_conf_t *conf = child;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
293
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
294 ngx_conf_merge_value(conf->enable, prev->enable, 0);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
295
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
296 return NGX_CONF_OK;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
297 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
298
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
299
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
300 static ngx_int_t
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
301 ngx_http_random_index_init(ngx_conf_t *cf)
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
302 {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
303 ngx_http_handler_pt *h;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
304 ngx_http_core_main_conf_t *cmcf;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
305
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
306 cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
307
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
308 h = ngx_array_push(&cmcf->phases[NGX_HTTP_CONTENT_PHASE].handlers);
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
309 if (h == NULL) {
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
310 return NGX_ERROR;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
311 }
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
312
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
313 *h = ngx_http_random_index_handler;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
314
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
315 return NGX_OK;
03180d4e5af2 ngx_http_random_index_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
316 }