nginxtra 1.2.4.7 → 1.2.5.7

Sign up to get free protection for your applications and to get access to all the features.
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