nginxtra 1.2.4.7 → 1.2.5.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/bin/nginxtra CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  require "rubygems"
3
- gem "nginxtra", "= 1.2.4.7"
3
+ gem "nginxtra", "= 1.2.5.7"
4
4
  gem "thor", "~> 0.16.0"
5
5
  require "nginxtra"
6
6
  Nginxtra::CLI.start
data/bin/nginxtra_rails CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  require "rubygems"
3
- gem "nginxtra", "= 1.2.4.7"
3
+ gem "nginxtra", "= 1.2.5.7"
4
4
  gem "thor", "~> 0.16.0"
5
5
  require "nginxtra"
6
6
  Nginxtra::Rails::CLI.start
@@ -1,8 +1,12 @@
1
1
  module Nginxtra
2
2
  class Version
3
3
  class << self
4
+ def to_a
5
+ to_s.split(".").map &:to_i
6
+ end
7
+
4
8
  def to_s
5
- "1.2.4.7"
9
+ "1.2.5.7"
6
10
  end
7
11
  end
8
12
  end
data/vendor/nginx/CHANGES CHANGED
@@ -1,4 +1,24 @@
1
1
 
2
+ Changes with nginx 1.2.5 13 Nov 2012
3
+
4
+ *) Feature: the "optional_no_ca" parameter of the "ssl_verify_client"
5
+ directive.
6
+ Thanks to Mike Kazantsev and Eric O'Connor.
7
+
8
+ *) Feature: the $bytes_sent, $connection, and $connection_requests
9
+ variables can now be used not only in the "log_format" directive.
10
+ Thanks to Benjamin Grössing.
11
+
12
+ *) Feature: resolver now randomly rotates addresses returned from cache.
13
+ Thanks to Anton Jouline.
14
+
15
+ *) Feature: the "auto" parameter of the "worker_processes" directive.
16
+
17
+ *) Bugfix: "cache file ... has md5 collision" alert.
18
+
19
+ *) Bugfix: OpenSSL 0.9.7 compatibility.
20
+
21
+
2
22
  Changes with nginx 1.2.4 25 Sep 2012
3
23
 
4
24
  *) Bugfix: in the "limit_req" directive; the bug had appeared in 1.1.14.
@@ -1,4 +1,25 @@
1
1
 
2
+ Изменения в nginx 1.2.5 13.11.2012
3
+
4
+ *) Добавление: параметр optional_no_ca директивы ssl_verify_client.
5
+ Спасибо Михаилу Казанцеву и Eric O'Connor.
6
+
7
+ *) Добавление: переменные $bytes_sent, $connection и
8
+ $connection_requests теперь можно использовать не только в директиве
9
+ log_format.
10
+ Спасибо Benjamin Grössing.
11
+
12
+ *) Добавление: теперь resolver случайным образом меняет порядок
13
+ возвращаемых закэшированных адресов.
14
+ Спасибо Антону Жулину.
15
+
16
+ *) Добавление: параметр auto директивы worker_processes.
17
+
18
+ *) Исправление: сообщения "cache file ... has md5 collision".
19
+
20
+ *) Исправление: совместимость с OpenSSL 0.9.7.
21
+
22
+
2
23
  Изменения в nginx 1.2.4 25.09.2012
3
24
 
4
25
  *) Исправление: в директиве "limit_req"; ошибка появилась в 1.1.14.
@@ -12,7 +12,7 @@ NGX_PERL_VER=`$NGX_PERL -v 2>&1 | grep '^This is perl' 2>&1 \
12
12
  if test -n "$NGX_PERL_VER"; then
13
13
  echo " + perl version: $NGX_PERL_VER"
14
14
 
15
- if [ "`echo 'use 5.006001; print "OK"' | $NGX_PERL 2>&1`" != OK ]; then
15
+ if [ "`$NGX_PERL -e 'use 5.006001; print "OK"'`" != "OK" ]; then
16
16
  echo
17
17
  echo "$0: error: perl 5.6.1 or higher is required"
18
18
  echo
@@ -20,6 +20,14 @@ if test -n "$NGX_PERL_VER"; then
20
20
  exit 1;
21
21
  fi
22
22
 
23
+ if [ "`$NGX_PERL -MExtUtils::Embed -e 'print "OK"'`" != "OK" ]; then
24
+ echo
25
+ echo "$0: error: perl module ExtUtils::Embed is required"
26
+ echo
27
+
28
+ exit 1;
29
+ fi
30
+
23
31
  NGX_PERL_CFLAGS="$CFLAGS `$NGX_PERL -MExtUtils::Embed -e ccopts`"
24
32
  NGX_PM_CFLAGS=`$NGX_PERL -MExtUtils::Embed -e ccopts`
25
33
 
@@ -49,7 +49,7 @@ END
49
49
  ngx_all_srcs="$CORE_SRCS"
50
50
 
51
51
 
52
- # the core dependences and include pathes
52
+ # the core dependences and include paths
53
53
 
54
54
  ngx_deps=`echo $CORE_DEPS $NGX_AUTO_CONFIG_H $NGX_PCH \
55
55
  | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \
@@ -69,7 +69,7 @@ CORE_INCS = $ngx_include_opt$ngx_incs
69
69
  END
70
70
 
71
71
 
72
- # the http dependences and include pathes
72
+ # the http dependences and include paths
73
73
 
74
74
  if [ $HTTP = YES ]; then
75
75
 
@@ -95,7 +95,7 @@ END
95
95
  fi
96
96
 
97
97
 
98
- # the mail dependences and include pathes
98
+ # the mail dependences and include paths
99
99
 
100
100
  if [ $MAIL = YES ]; then
101
101
 
@@ -385,6 +385,10 @@ cat << END
385
385
  --without-http_browser_module disable ngx_http_browser_module
386
386
  --without-http_upstream_ip_hash_module
387
387
  disable ngx_http_upstream_ip_hash_module
388
+ --without-http_upstream_least_conn_module
389
+ disable ngx_http_upstream_least_conn_module
390
+ --without-http_upstream_keepalive_module
391
+ disable ngx_http_upstream_keepalive_module
388
392
 
389
393
  --with-http_perl_module enable ngx_http_perl_module
390
394
  --with-perl_modules_path=PATH set Perl modules path
@@ -21,6 +21,8 @@ static char *ngx_set_env(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
21
21
  static char *ngx_set_priority(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
22
22
  static char *ngx_set_cpu_affinity(ngx_conf_t *cf, ngx_command_t *cmd,
23
23
  void *conf);
24
+ static char *ngx_set_worker_processes(ngx_conf_t *cf, ngx_command_t *cmd,
25
+ void *conf);
24
26
 
25
27
 
26
28
  static ngx_conf_enum_t ngx_debug_points[] = {
@@ -69,9 +71,9 @@ static ngx_command_t ngx_core_commands[] = {
69
71
 
70
72
  { ngx_string("worker_processes"),
71
73
  NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
72
- ngx_conf_set_num_slot,
74
+ ngx_set_worker_processes,
75
+ 0,
73
76
  0,
74
- offsetof(ngx_core_conf_t, worker_processes),
75
77
  NULL },
76
78
 
77
79
  { ngx_string("debug_points"),
@@ -1329,3 +1331,32 @@ ngx_get_cpu_affinity(ngx_uint_t n)
1329
1331
 
1330
1332
  return ccf->cpu_affinity[ccf->cpu_affinity_n - 1];
1331
1333
  }
1334
+
1335
+
1336
+ static char *
1337
+ ngx_set_worker_processes(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
1338
+ {
1339
+ ngx_str_t *value;
1340
+ ngx_core_conf_t *ccf;
1341
+
1342
+ ccf = (ngx_core_conf_t *) conf;
1343
+
1344
+ if (ccf->worker_processes != NGX_CONF_UNSET) {
1345
+ return "is duplicate";
1346
+ }
1347
+
1348
+ value = (ngx_str_t *) cf->args->elts;
1349
+
1350
+ if (ngx_strcmp(value[1].data, "auto") == 0) {
1351
+ ccf->worker_processes = ngx_ncpu;
1352
+ return NGX_CONF_OK;
1353
+ }
1354
+
1355
+ ccf->worker_processes = ngx_atoi(value[1].data, value[1].len);
1356
+
1357
+ if (ccf->worker_processes == NGX_ERROR) {
1358
+ return "invalid value";
1359
+ }
1360
+
1361
+ return NGX_CONF_OK;
1362
+ }
@@ -9,8 +9,8 @@
9
9
  #define _NGINX_H_INCLUDED_
10
10
 
11
11
 
12
- #define nginx_version 1002004
13
- #define NGINX_VERSION "1.2.4"
12
+ #define nginx_version 1002005
13
+ #define NGINX_VERSION "1.2.5"
14
14
  #define NGINX_VER "nginx/" NGINX_VERSION
15
15
 
16
16
  #define NGINX_VAR "NGINX"
@@ -118,18 +118,18 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
118
118
  }
119
119
 
120
120
 
121
- n = old_cycle->pathes.nelts ? old_cycle->pathes.nelts : 10;
121
+ n = old_cycle->paths.nelts ? old_cycle->paths.nelts : 10;
122
122
 
123
- cycle->pathes.elts = ngx_pcalloc(pool, n * sizeof(ngx_path_t *));
124
- if (cycle->pathes.elts == NULL) {
123
+ cycle->paths.elts = ngx_pcalloc(pool, n * sizeof(ngx_path_t *));
124
+ if (cycle->paths.elts == NULL) {
125
125
  ngx_destroy_pool(pool);
126
126
  return NULL;
127
127
  }
128
128
 
129
- cycle->pathes.nelts = 0;
130
- cycle->pathes.size = sizeof(ngx_path_t *);
131
- cycle->pathes.nalloc = n;
132
- cycle->pathes.pool = pool;
129
+ cycle->paths.nelts = 0;
130
+ cycle->paths.size = sizeof(ngx_path_t *);
131
+ cycle->paths.nalloc = n;
132
+ cycle->paths.pool = pool;
133
133
 
134
134
 
135
135
  if (old_cycle->open_files.part.nelts) {
@@ -334,7 +334,7 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
334
334
  }
335
335
 
336
336
 
337
- if (ngx_create_pathes(cycle, ccf->user) != NGX_OK) {
337
+ if (ngx_create_paths(cycle, ccf->user) != NGX_OK) {
338
338
  goto failed;
339
339
  }
340
340
 
@@ -1038,6 +1038,8 @@ ngx_signal_process(ngx_cycle_t *cycle, char *sig)
1038
1038
 
1039
1039
  ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
1040
1040
 
1041
+ ngx_memzero(&file, sizeof(ngx_file_t));
1042
+
1041
1043
  file.name = ccf->pid;
1042
1044
  file.log = cycle->log;
1043
1045
 
@@ -48,7 +48,7 @@ struct ngx_cycle_s {
48
48
  ngx_queue_t reusable_connections_queue;
49
49
 
50
50
  ngx_array_t listening;
51
- ngx_array_t pathes;
51
+ ngx_array_t paths;
52
52
  ngx_list_t open_files;
53
53
  ngx_list_t shared_memory;
54
54
 
@@ -412,8 +412,8 @@ ngx_add_path(ngx_conf_t *cf, ngx_path_t **slot)
412
412
 
413
413
  path = *slot;
414
414
 
415
- p = cf->cycle->pathes.elts;
416
- for (i = 0; i < cf->cycle->pathes.nelts; i++) {
415
+ p = cf->cycle->paths.elts;
416
+ for (i = 0; i < cf->cycle->paths.nelts; i++) {
417
417
  if (p[i]->name.len == path->name.len
418
418
  && ngx_strcmp(p[i]->name.data, path->name.data) == 0)
419
419
  {
@@ -457,7 +457,7 @@ ngx_add_path(ngx_conf_t *cf, ngx_path_t **slot)
457
457
  }
458
458
  }
459
459
 
460
- p = ngx_array_push(&cf->cycle->pathes);
460
+ p = ngx_array_push(&cf->cycle->paths);
461
461
  if (p == NULL) {
462
462
  return NGX_ERROR;
463
463
  }
@@ -469,14 +469,14 @@ ngx_add_path(ngx_conf_t *cf, ngx_path_t **slot)
469
469
 
470
470
 
471
471
  ngx_int_t
472
- ngx_create_pathes(ngx_cycle_t *cycle, ngx_uid_t user)
472
+ ngx_create_paths(ngx_cycle_t *cycle, ngx_uid_t user)
473
473
  {
474
474
  ngx_err_t err;
475
475
  ngx_uint_t i;
476
476
  ngx_path_t **path;
477
477
 
478
- path = cycle->pathes.elts;
479
- for (i = 0; i < cycle->pathes.nelts; i++) {
478
+ path = cycle->paths.elts;
479
+ for (i = 0; i < cycle->paths.nelts; i++) {
480
480
 
481
481
  if (ngx_create_dir(path[i]->name.data, 0700) == NGX_FILE_ERROR) {
482
482
  err = ngx_errno;
@@ -130,7 +130,7 @@ void ngx_create_hashed_filename(ngx_path_t *path, u_char *file, size_t len);
130
130
  ngx_int_t ngx_create_path(ngx_file_t *file, ngx_path_t *path);
131
131
  ngx_err_t ngx_create_full_path(u_char *dir, ngx_uint_t access);
132
132
  ngx_int_t ngx_add_path(ngx_conf_t *cf, ngx_path_t **slot);
133
- ngx_int_t ngx_create_pathes(ngx_cycle_t *cycle, ngx_uid_t user);
133
+ ngx_int_t ngx_create_paths(ngx_cycle_t *cycle, ngx_uid_t user);
134
134
  ngx_int_t ngx_ext_rename_file(ngx_str_t *src, ngx_str_t *to,
135
135
  ngx_ext_rename_file_t *ext);
136
136
  ngx_int_t ngx_copy_file(u_char *from, u_char *to, ngx_copy_file_t *cf);
@@ -88,6 +88,8 @@ static void *ngx_resolver_calloc(ngx_resolver_t *r, size_t size);
88
88
  static void ngx_resolver_free(ngx_resolver_t *r, void *p);
89
89
  static void ngx_resolver_free_locked(ngx_resolver_t *r, void *p);
90
90
  static void *ngx_resolver_dup(ngx_resolver_t *r, void *src, size_t size);
91
+ static in_addr_t *ngx_resolver_rotate(ngx_resolver_t *r, in_addr_t *src,
92
+ ngx_uint_t n);
91
93
  static u_char *ngx_resolver_log_error(ngx_log_t *log, u_char *buf, size_t len);
92
94
 
93
95
 
@@ -445,8 +447,7 @@ ngx_resolve_name_locked(ngx_resolver_t *r, ngx_resolver_ctx_t *ctx)
445
447
 
446
448
  if (naddrs != 1) {
447
449
  addr = 0;
448
- addrs = ngx_resolver_dup(r, rn->u.addrs,
449
- naddrs * sizeof(in_addr_t));
450
+ addrs = ngx_resolver_rotate(r, rn->u.addrs, naddrs);
450
451
  if (addrs == NULL) {
451
452
  return NGX_ERROR;
452
453
  }
@@ -2135,6 +2136,32 @@ ngx_resolver_dup(ngx_resolver_t *r, void *src, size_t size)
2135
2136
  }
2136
2137
 
2137
2138
 
2139
+ static in_addr_t *
2140
+ ngx_resolver_rotate(ngx_resolver_t *r, in_addr_t *src, ngx_uint_t n)
2141
+ {
2142
+ void *dst, *p;
2143
+ ngx_uint_t j;
2144
+
2145
+ dst = ngx_resolver_alloc(r, n * sizeof(in_addr_t));
2146
+
2147
+ if (dst == NULL) {
2148
+ return dst;
2149
+ }
2150
+
2151
+ j = ngx_random() % n;
2152
+
2153
+ if (j == 0) {
2154
+ ngx_memcpy(dst, src, n * sizeof(in_addr_t));
2155
+ return dst;
2156
+ }
2157
+
2158
+ p = ngx_cpymem(dst, &src[j], (n - j) * sizeof(in_addr_t));
2159
+ ngx_memcpy(p, src, j * sizeof(in_addr_t));
2160
+
2161
+ return dst;
2162
+ }
2163
+
2164
+
2138
2165
  char *
2139
2166
  ngx_resolver_strerror(ngx_int_t err)
2140
2167
  {
@@ -94,22 +94,24 @@ ngx_ssl_init(ngx_log_t *log)
94
94
 
95
95
  OpenSSL_add_all_algorithms();
96
96
 
97
+ #if OPENSSL_VERSION_NUMBER >= 0x0090800fL
97
98
  #ifndef SSL_OP_NO_COMPRESSION
98
99
  {
99
100
  /*
100
101
  * Disable gzip compression in OpenSSL prior to 1.0.0 version,
101
102
  * this saves about 522K per connection.
102
103
  */
103
- int i, n;
104
+ int n;
104
105
  STACK_OF(SSL_COMP) *ssl_comp_methods;
105
106
 
106
107
  ssl_comp_methods = SSL_COMP_get_compression_methods();
107
108
  n = sk_SSL_COMP_num(ssl_comp_methods);
108
109
 
109
- for (i = 0; i < n; i++) {
110
- (void) sk_SSL_COMP_delete(ssl_comp_methods, i);
110
+ while (n--) {
111
+ (void) sk_SSL_COMP_pop(ssl_comp_methods);
111
112
  }
112
113
  }
114
+ #endif
113
115
  #endif
114
116
 
115
117
  ngx_ssl_connection_index = SSL_get_ex_new_index(0, NULL, NULL, NULL, NULL);
@@ -120,6 +120,13 @@ ngx_int_t ngx_ssl_set_session(ngx_connection_t *c, ngx_ssl_session_t *session);
120
120
  #define ngx_ssl_get_server_conf(ssl_ctx) \
121
121
  SSL_CTX_get_ex_data(ssl_ctx, ngx_ssl_server_conf_index)
122
122
 
123
+ #define ngx_ssl_verify_error_optional(n) \
124
+ (n == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT \
125
+ || n == X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN \
126
+ || n == X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY \
127
+ || n == X509_V_ERR_CERT_UNTRUSTED \
128
+ || n == X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE)
129
+
123
130
 
124
131
  ngx_int_t ngx_ssl_get_protocol(ngx_connection_t *c, ngx_pool_t *pool,
125
132
  ngx_str_t *s);
@@ -946,8 +946,15 @@ ngx_event_pipe_add_free_buf(ngx_event_pipe_t *p, ngx_buf_t *b)
946
946
  return NGX_ERROR;
947
947
  }
948
948
 
949
- b->pos = b->start;
950
- b->last = b->start;
949
+ if (p->buf_to_file && b->start == p->buf_to_file->start) {
950
+ b->pos = p->buf_to_file->last;
951
+ b->last = p->buf_to_file->last;
952
+
953
+ } else {
954
+ b->pos = b->start;
955
+ b->last = b->start;
956
+ }
957
+
951
958
  b->shadow = NULL;
952
959
 
953
960
  cl->buf = b;
@@ -78,10 +78,6 @@ static void ngx_http_log_write(ngx_http_request_t *r, ngx_http_log_t *log,
78
78
  static ssize_t ngx_http_log_script_write(ngx_http_request_t *r,
79
79
  ngx_http_log_script_t *script, u_char **name, u_char *buf, size_t len);
80
80
 
81
- static u_char *ngx_http_log_connection(ngx_http_request_t *r, u_char *buf,
82
- ngx_http_log_op_t *op);
83
- static u_char *ngx_http_log_connection_requests(ngx_http_request_t *r,
84
- u_char *buf, ngx_http_log_op_t *op);
85
81
  static u_char *ngx_http_log_pipe(ngx_http_request_t *r, u_char *buf,
86
82
  ngx_http_log_op_t *op);
87
83
  static u_char *ngx_http_log_time(ngx_http_request_t *r, u_char *buf,
@@ -194,9 +190,6 @@ static ngx_str_t ngx_http_combined_fmt =
194
190
 
195
191
 
196
192
  static ngx_http_log_var_t ngx_http_log_vars[] = {
197
- { ngx_string("connection"), NGX_ATOMIC_T_LEN, ngx_http_log_connection },
198
- { ngx_string("connection_requests"), NGX_INT_T_LEN,
199
- ngx_http_log_connection_requests },
200
193
  { ngx_string("pipe"), 1, ngx_http_log_pipe },
201
194
  { ngx_string("time_local"), sizeof("28/Sep/1970:12:00:00 +0600") - 1,
202
195
  ngx_http_log_time },
@@ -209,8 +202,6 @@ static ngx_http_log_var_t ngx_http_log_vars[] = {
209
202
  { ngx_string("bytes_sent"), NGX_OFF_T_LEN, ngx_http_log_bytes_sent },
210
203
  { ngx_string("body_bytes_sent"), NGX_OFF_T_LEN,
211
204
  ngx_http_log_body_bytes_sent },
212
- { ngx_string("apache_bytes_sent"), NGX_OFF_T_LEN,
213
- ngx_http_log_body_bytes_sent },
214
205
  { ngx_string("request_length"), NGX_SIZE_T_LEN,
215
206
  ngx_http_log_request_length },
216
207
 
@@ -501,22 +492,6 @@ ngx_http_log_copy_long(ngx_http_request_t *r, u_char *buf,
501
492
  }
502
493
 
503
494
 
504
- static u_char *
505
- ngx_http_log_connection(ngx_http_request_t *r, u_char *buf,
506
- ngx_http_log_op_t *op)
507
- {
508
- return ngx_sprintf(buf, "%uA", r->connection->number);
509
- }
510
-
511
-
512
- static u_char *
513
- ngx_http_log_connection_requests(ngx_http_request_t *r, u_char *buf,
514
- ngx_http_log_op_t *op)
515
- {
516
- return ngx_sprintf(buf, "%ui", r->connection->requests);
517
- }
518
-
519
-
520
495
  static u_char *
521
496
  ngx_http_log_pipe(ngx_http_request_t *r, u_char *buf, ngx_http_log_op_t *op)
522
497
  {
@@ -1143,12 +1118,6 @@ ngx_http_log_compile_format(ngx_conf_t *cf, ngx_array_t *flushes,
1143
1118
  goto invalid;
1144
1119
  }
1145
1120
 
1146
- if (ngx_strncmp(var.data, "apache_bytes_sent", 17) == 0) {
1147
- ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
1148
- "use \"$body_bytes_sent\" instead of "
1149
- "\"$apache_bytes_sent\"");
1150
- }
1151
-
1152
1121
  for (v = ngx_http_log_vars; v->name.len; v++) {
1153
1122
 
1154
1123
  if (v->name.len == var.len
@@ -48,6 +48,7 @@ static ngx_conf_enum_t ngx_http_ssl_verify[] = {
48
48
  { ngx_string("off"), 0 },
49
49
  { ngx_string("on"), 1 },
50
50
  { ngx_string("optional"), 2 },
51
+ { ngx_string("optional_no_ca"), 3 },
51
52
  { ngx_null_string, 0 }
52
53
  };
53
54
 
@@ -466,7 +467,7 @@ ngx_http_ssl_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child)
466
467
 
467
468
  if (conf->verify) {
468
469
 
469
- if (conf->client_certificate.len == 0) {
470
+ if (conf->client_certificate.len == 0 && conf->verify != 3) {
470
471
  ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
471
472
  "no ssl_client_certificate for ssl_client_verify");
472
473
  return NGX_CONF_ERROR;
@@ -50,7 +50,7 @@ our @EXPORT = qw(
50
50
  HTTP_INSUFFICIENT_STORAGE
51
51
  );
52
52
 
53
- our $VERSION = '1.2.4';
53
+ our $VERSION = '1.2.5';
54
54
 
55
55
  require XSLoader;
56
56
  XSLoader::load('nginx', $VERSION);
@@ -1634,7 +1634,9 @@ ngx_http_process_request(ngx_http_request_t *r)
1634
1634
  if (sscf->verify) {
1635
1635
  rc = SSL_get_verify_result(c->ssl->connection);
1636
1636
 
1637
- if (rc != X509_V_OK) {
1637
+ if (rc != X509_V_OK
1638
+ && (sscf->verify != 3 || !ngx_ssl_verify_error_optional(rc)))
1639
+ {
1638
1640
  ngx_log_error(NGX_LOG_INFO, c->log, 0,
1639
1641
  "client SSL certificate verify error: (%l:%s)",
1640
1642
  rc, X509_verify_cert_error_string(rc));
@@ -2743,6 +2745,20 @@ ngx_http_keepalive_handler(ngx_event_t *rev)
2743
2745
  ngx_http_close_connection(c);
2744
2746
  }
2745
2747
 
2748
+ /*
2749
+ * Like ngx_http_set_keepalive() we are trying to not hold
2750
+ * c->buffer's memory for a keepalive connection.
2751
+ */
2752
+
2753
+ if (ngx_pfree(c->pool, b->start) == NGX_OK) {
2754
+
2755
+ /*
2756
+ * the special note that c->buffer's memory was freed
2757
+ */
2758
+
2759
+ b->pos = NULL;
2760
+ }
2761
+
2746
2762
  return;
2747
2763
  }
2748
2764
 
@@ -2287,6 +2287,7 @@ ngx_http_upstream_send_response(ngx_http_request_t *r, ngx_http_upstream_t *u)
2287
2287
  return;
2288
2288
  }
2289
2289
 
2290
+ p->buf_to_file->start = u->buffer.start;
2290
2291
  p->buf_to_file->pos = u->buffer.start;
2291
2292
  p->buf_to_file->last = u->buffer.pos;
2292
2293
  p->buf_to_file->temporary = 1;
@@ -69,6 +69,8 @@ static ngx_int_t ngx_http_variable_request_method(ngx_http_request_t *r,
69
69
  ngx_http_variable_value_t *v, uintptr_t data);
70
70
  static ngx_int_t ngx_http_variable_remote_user(ngx_http_request_t *r,
71
71
  ngx_http_variable_value_t *v, uintptr_t data);
72
+ static ngx_int_t ngx_http_variable_bytes_sent(ngx_http_request_t *r,
73
+ ngx_http_variable_value_t *v, uintptr_t data);
72
74
  static ngx_int_t ngx_http_variable_body_bytes_sent(ngx_http_request_t *r,
73
75
  ngx_http_variable_value_t *v, uintptr_t data);
74
76
  static ngx_int_t ngx_http_variable_request_completion(ngx_http_request_t *r,
@@ -95,6 +97,11 @@ static ngx_int_t ngx_http_variable_sent_keep_alive(ngx_http_request_t *r,
95
97
  static ngx_int_t ngx_http_variable_sent_transfer_encoding(ngx_http_request_t *r,
96
98
  ngx_http_variable_value_t *v, uintptr_t data);
97
99
 
100
+ static ngx_int_t ngx_http_variable_connection(ngx_http_request_t *r,
101
+ ngx_http_variable_value_t *v, uintptr_t data);
102
+ static ngx_int_t ngx_http_variable_connection_requests(ngx_http_request_t *r,
103
+ ngx_http_variable_value_t *v, uintptr_t data);
104
+
98
105
  static ngx_int_t ngx_http_variable_nginx_version(ngx_http_request_t *r,
99
106
  ngx_http_variable_value_t *v, uintptr_t data);
100
107
  static ngx_int_t ngx_http_variable_hostname(ngx_http_request_t *r,
@@ -212,6 +219,9 @@ static ngx_http_variable_t ngx_http_core_variables[] = {
212
219
 
213
220
  { ngx_string("remote_user"), NULL, ngx_http_variable_remote_user, 0, 0, 0 },
214
221
 
222
+ { ngx_string("bytes_sent"), NULL, ngx_http_variable_bytes_sent,
223
+ 0, 0, 0 },
224
+
215
225
  { ngx_string("body_bytes_sent"), NULL, ngx_http_variable_body_bytes_sent,
216
226
  0, 0, 0 },
217
227
 
@@ -260,6 +270,12 @@ static ngx_http_variable_t ngx_http_core_variables[] = {
260
270
  offsetof(ngx_http_request_t, limit_rate),
261
271
  NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
262
272
 
273
+ { ngx_string("connection"), NULL,
274
+ ngx_http_variable_connection, 0, 0, 0 },
275
+
276
+ { ngx_string("connection_requests"), NULL,
277
+ ngx_http_variable_connection_requests, 0, 0, 0 },
278
+
263
279
  { ngx_string("nginx_version"), NULL, ngx_http_variable_nginx_version,
264
280
  0, 0, 0 },
265
281
 
@@ -1433,6 +1449,27 @@ ngx_http_variable_remote_user(ngx_http_request_t *r,
1433
1449
  }
1434
1450
 
1435
1451
 
1452
+ static ngx_int_t
1453
+ ngx_http_variable_bytes_sent(ngx_http_request_t *r,
1454
+ ngx_http_variable_value_t *v, uintptr_t data)
1455
+ {
1456
+ u_char *p;
1457
+
1458
+ p = ngx_pnalloc(r->pool, NGX_OFF_T_LEN);
1459
+ if (p == NULL) {
1460
+ return NGX_ERROR;
1461
+ }
1462
+
1463
+ v->len = ngx_sprintf(p, "%O", r->connection->sent) - p;
1464
+ v->valid = 1;
1465
+ v->no_cacheable = 0;
1466
+ v->not_found = 0;
1467
+ v->data = p;
1468
+
1469
+ return NGX_OK;
1470
+ }
1471
+
1472
+
1436
1473
  static ngx_int_t
1437
1474
  ngx_http_variable_body_bytes_sent(ngx_http_request_t *r,
1438
1475
  ngx_http_variable_value_t *v, uintptr_t data)
@@ -1787,6 +1824,48 @@ ngx_http_variable_request_body_file(ngx_http_request_t *r,
1787
1824
  }
1788
1825
 
1789
1826
 
1827
+ static ngx_int_t
1828
+ ngx_http_variable_connection(ngx_http_request_t *r,
1829
+ ngx_http_variable_value_t *v, uintptr_t data)
1830
+ {
1831
+ u_char *p;
1832
+
1833
+ p = ngx_pnalloc(r->pool, NGX_ATOMIC_T_LEN);
1834
+ if (p == NULL) {
1835
+ return NGX_ERROR;
1836
+ }
1837
+
1838
+ v->len = ngx_sprintf(p, "%uA", r->connection->number) - p;
1839
+ v->valid = 1;
1840
+ v->no_cacheable = 0;
1841
+ v->not_found = 0;
1842
+ v->data = p;
1843
+
1844
+ return NGX_OK;
1845
+ }
1846
+
1847
+
1848
+ static ngx_int_t
1849
+ ngx_http_variable_connection_requests(ngx_http_request_t *r,
1850
+ ngx_http_variable_value_t *v, uintptr_t data)
1851
+ {
1852
+ u_char *p;
1853
+
1854
+ p = ngx_pnalloc(r->pool, NGX_INT_T_LEN);
1855
+ if (p == NULL) {
1856
+ return NGX_ERROR;
1857
+ }
1858
+
1859
+ v->len = ngx_sprintf(p, "%ui", r->connection->requests) - p;
1860
+ v->valid = 1;
1861
+ v->no_cacheable = 0;
1862
+ v->not_found = 0;
1863
+ v->data = p;
1864
+
1865
+ return NGX_OK;
1866
+ }
1867
+
1868
+
1790
1869
  static ngx_int_t
1791
1870
  ngx_http_variable_nginx_version(ngx_http_request_t *r,
1792
1871
  ngx_http_variable_value_t *v, uintptr_t data)
@@ -474,8 +474,6 @@ ngx_process_get_status(void)
474
474
  return;
475
475
  }
476
476
 
477
- #if (NGX_SOLARIS || NGX_FREEBSD)
478
-
479
477
  /*
480
478
  * Solaris always calls the signal handler for each exited process
481
479
  * despite waitpid() may be already called for this process.
@@ -491,8 +489,6 @@ ngx_process_get_status(void)
491
489
  return;
492
490
  }
493
491
 
494
- #endif
495
-
496
492
  ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, err,
497
493
  "waitpid() failed");
498
494
  return;
@@ -371,6 +371,8 @@ ngx_start_worker_processes(ngx_cycle_t *cycle, ngx_int_t n, ngx_int_t type)
371
371
 
372
372
  ngx_pass_open_channel(cycle, &ch);
373
373
  }
374
+
375
+ cpu_affinity = 0;
374
376
  }
375
377
 
376
378
 
@@ -384,8 +386,8 @@ ngx_start_cache_manager_processes(ngx_cycle_t *cycle, ngx_uint_t respawn)
384
386
  manager = 0;
385
387
  loader = 0;
386
388
 
387
- path = ngx_cycle->pathes.elts;
388
- for (i = 0; i < ngx_cycle->pathes.nelts; i++) {
389
+ path = ngx_cycle->paths.elts;
390
+ for (i = 0; i < ngx_cycle->paths.nelts; i++) {
389
391
 
390
392
  if (path[i]->manager) {
391
393
  manager = 1;
@@ -1339,8 +1341,8 @@ ngx_cache_manager_process_handler(ngx_event_t *ev)
1339
1341
 
1340
1342
  next = 60 * 60;
1341
1343
 
1342
- path = ngx_cycle->pathes.elts;
1343
- for (i = 0; i < ngx_cycle->pathes.nelts; i++) {
1344
+ path = ngx_cycle->paths.elts;
1345
+ for (i = 0; i < ngx_cycle->paths.nelts; i++) {
1344
1346
 
1345
1347
  if (path[i]->manager) {
1346
1348
  n = path[i]->manager(path[i]->data);
@@ -1368,8 +1370,8 @@ ngx_cache_loader_process_handler(ngx_event_t *ev)
1368
1370
 
1369
1371
  cycle = (ngx_cycle_t *) ngx_cycle;
1370
1372
 
1371
- path = cycle->pathes.elts;
1372
- for (i = 0; i < cycle->pathes.nelts; i++) {
1373
+ path = cycle->paths.elts;
1374
+ for (i = 0; i < cycle->paths.nelts; i++) {
1373
1375
 
1374
1376
  if (ngx_terminate || ngx_quit) {
1375
1377
  break;
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nginxtra
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.4.7
4
+ version: 1.2.5.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-25 00:00:00.000000000 Z
12
+ date: 2012-11-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
16
- requirement: &22194120 !ruby/object:Gem::Requirement
16
+ requirement: &19031520 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: 0.16.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *22194120
24
+ version_requirements: *19031520
25
25
  description: This gem is intended to provide an easy to use configuration file that
26
26
  will automatically be used to compile nginx and configure the configuration.
27
27
  email: reasonnumber@gmail.com