Skip to content

Commit

Permalink
nginx-0.1.43-RELEASE import
Browse files Browse the repository at this point in the history
    *) Feature: the listen(2) backlog in the "listen" directive can be
       changed using the -HUP signal.

    *) Feature: the geo2nginx.pl script was added to contrib.

    *) Change: the FastCGI parameters with the empty values now are passed
       to a server.

    *) Bugfix: the segmentation fault occurred or the worker process may
       got caught in an endless loop if the proxied or FastCGI server sent
       the "Cache-Control" header line and the "expires" directive was
       used; in the proxied mode the the bug had appeared in 0.1.29.
  • Loading branch information
igorsysoev committed Aug 30, 2005
1 parent e3c2cf8 commit e503539
Show file tree
Hide file tree
Showing 19 changed files with 266 additions and 90 deletions.
23 changes: 23 additions & 0 deletions conf/fastcgi_params
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@

fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;

fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;

fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;

fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
6 changes: 6 additions & 0 deletions contrib/README
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

geo2nginx.pl by Andrei Nigmatulin

The perl script to convert CSV geoip database (free download
at http://www.maxmind.com/app/geoip_country) to format, suitable
for use with ngx_http_geo_module.
58 changes: 58 additions & 0 deletions contrib/geo2nginx.pl
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
#!/usr/bin/perl -w

# (c) Andrei Nigmatulin, 2005
#
# this script provided "as is", without any warranties. use it at your own risk.
#
# special thanx to Andrew Sitnikov for perl port
#
# this script converts CSV geoip database (free download at http://www.maxmind.com/app/geoip_country)
# to format, suitable for use with nginx_http_geo module (http://sysoev.ru/nginx)
#
# for example, line with ip range
#
# "62.16.68.0","62.16.127.255","1041253376","1041268735","RU","Russian Federation"
#
# will be converted to four subnetworks:
#
# 62.16.68.0/22 RU;
# 62.16.72.0/21 RU;
# 62.16.80.0/20 RU;
# 62.16.96.0/19 RU;


use warnings;
use strict;

while( <STDIN> ){
if (/"[^"]+","[^"]+","([^"]+)","([^"]+)","([^"]+)"/){
print_subnets($1, $2, $3);
}
}

sub print_subnets {
my ($a1, $a2, $c) = @_;
my $l;
while ($a1 <= $a2) {
for ($l = 0; ($a1 & (1 << $l)) == 0 && ($a1 + ((1 << ($l + 1)) - 1)) <= $a2; $l++){};
print long2ip($a1) . "/" . (32 - $l) . " " . $c . ";\n";
$a1 += (1 << $l);
}
}

sub long2ip {
my $ip = shift;

my $str = 0;

$str = ($ip & 255);

$ip >>= 8;
$str = ($ip & 255).".$str";

$ip >>= 8;
$str = ($ip & 255).".$str";

$ip >>= 8;
$str = ($ip & 255).".$str";
}
65 changes: 65 additions & 0 deletions docs/xml/nginx/changes.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,71 @@
<title lang="en">nginx changelog</title>


<changes ver="0.1.43" date="30.08.2005">

<change type="feature">
<para lang="ru">
listen(2) backlog × ÄÉÒÅËÔÉ×Å listen ÍÏÖÎÏ ÍÅÎÑÔØ ÐÏ ÓÉÇÎÁÌÕ -HUP.
</para>
<para lang="en">
the listen(2) backlog in the "listen" directive
can be changed using the -HUP signal.
</para>
</change>

<change type="feature">
<para lang="ru">
ÓËÒÉÐÔ geo2nginx.pl ÄÏÂÁ×ÌÅÎ × contrib.
</para>
<para lang="en">
the geo2nginx.pl script was added to contrib.
</para>
</change>

<change type="change">
<para lang="ru">
ÐÁÒÁÍÅÔÒÙ FastCGI, Ó ÐÕÓÔÙÍ ÚÎÁÞÅÎÉÑÍÉ, ÔÅÐÅÒØ ÐÅÒÅÄÁÀÔÓÑ ÓÅÒ×ÅÒÕ.
</para>
<para lang="en">
the FastCGI parameters with the empty values now are passed to a server.
</para>
</change>

<!--
<change type="bugfix">
<para lang="ru">
ÐÒÉ ÏÛÉÂËÁÈ × ÒÁÂÏÔÅ Ó ÐÒÏËÓÉÒÏ×ÁÎÎÙÍ ÓÅÒ×ÅÒÏÍ ÉÌÉ FastCGI ÓÅÒ×ÅÒÏÍ
ÍÏÇ ÐÒÏÉÚÏÊÔÉ segmentation fault;
× ÒÅÖÉÍÅ ÐÒÏËÓÉ ÏÛÉÂËÁ ÐÏÑ×ÉÌÁÓØ × 0.1.29.
</para>
<para lang="en">
the segmentation fault may occurred if there were errors while
working with proxied or FastCGI server;
in the proxied mode the bug appeared in 0.1.29.
</para>
</change>
-->

<change type="bugfix">
<para lang="ru">
ÅÓÌÉ × ÏÔ×ÅÔÅ ÐÒÏËÓÉÒÏ×ÁÎÎÏÇÏ ÓÅÒ×ÅÒÁ ÉÌÉ FastCGI ÓÅÒ×ÅÒÁ ÂÙÌÁ ÓÔÒÏËÁ
"Cache-Control", ÔÏ ÐÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ ÄÉÒÅËÔÉ×Ù expires ÐÒÏÉÓÈÏÄÉÌ
segmentation fault ÉÌÉ ÒÁÂÏÞÉÊ ÐÒÏÃÅÓÓ ÍÏÇ ÚÁÃÉËÌÉÔÓÑ;
× ÒÅÖÉÍÅ ÐÒÏËÓÉ ÏÛÉÂËÁ ÐÏÑ×ÉÌÁÓØ × 0.1.29.
</para>
<para lang="en">
the segmentation fault occurred or the worker process may got caught
in an endless loop if the proxied or FastCGI server sent the "Cache-Control"
header line and the "expires" directive was used;
in the proxied mode the bug appeared in 0.1.29.
</para>
</change>

</changes>


<changes ver="0.1.42" date="23.08.2005">

<change type="bugfix">
Expand Down
6 changes: 3 additions & 3 deletions src/core/nginx.c
Original file line number Diff line number Diff line change
Expand Up @@ -288,9 +288,9 @@ ngx_add_inherited_sockets(ngx_cycle_t *cycle)
s = ngx_atoi(v, p - v);
if (s == NGX_ERROR) {
ngx_log_error(NGX_LOG_EMERG, cycle->log, 0,
"invalid socket number \"%s\" in "
NGINX_VAR " environment variable, "
"ignoring the rest of the variable", v);
"invalid socket number \"%s\" in " NGINX_VAR
" environment variable, ignoring the rest"
" of the variable", v);
break;
}

Expand Down
2 changes: 1 addition & 1 deletion src/core/nginx.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
#define _NGINX_H_INCLUDED_


#define NGINX_VER "nginx/0.1.42"
#define NGINX_VER "nginx/0.1.43"

#define NGINX_VAR "NGINX"
#define NGX_NEWPID_EXT ".newbin"
Expand Down
5 changes: 4 additions & 1 deletion src/core/ngx_connection.c
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,8 @@ ngx_set_inherited_sockets(ngx_cycle_t *cycle)
ntohs(sin->sin_port))
- ls[i].addr_text.data;

ls[i].backlog = -1;

#if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER)

ngx_memzero(&af, sizeof(struct accept_filter_arg));
Expand Down Expand Up @@ -467,7 +469,8 @@ ngx_connection_error(ngx_connection_t *c, ngx_err_t err, char *text)
return 0;
}

if (err == NGX_ECONNRESET
if (err == 0
|| err == NGX_ECONNRESET
#if !(NGX_WIN32)
|| err == NGX_EPIPE
#endif
Expand Down
1 change: 1 addition & 0 deletions src/core/ngx_connection.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ typedef struct {
unsigned bound:1; /* already bound */
unsigned inherited:1; /* inherited from previous process */
unsigned nonblocking_accept:1;
unsigned change_backlog:1;
unsigned nonblocking:1;
unsigned shared:1; /* shared between threads or processes */
unsigned addr_ntop:1;
Expand Down
19 changes: 16 additions & 3 deletions src/core/ngx_cycle.c
Original file line number Diff line number Diff line change
Expand Up @@ -339,6 +339,10 @@ ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle)
nls[n].remain = 1;
ls[i].remain = 1;

if (ls[n].backlog != nls[i].backlog) {
nls[n].change_backlog = 1;
}

#if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER)

/*
Expand Down Expand Up @@ -405,12 +409,21 @@ ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle)
failed = 1;
}

#if (NGX_HAVE_DEFERRED_ACCEPT)

if (!failed) {
ls = cycle->listening.elts;
for (i = 0; i < cycle->listening.nelts; i++) {

if (ls[i].change_backlog) {
if (listen(ls[i].fd, ls[i].backlog) == -1) {
ngx_log_error(NGX_LOG_ALERT, log, ngx_socket_errno,
"changing the listen() backlog to %d "
"for %V failed, ignored",
&ls[i].addr_text, ls[i].backlog);
}
}

#if (NGX_HAVE_DEFERRED_ACCEPT)

#ifdef SO_ACCEPTFILTER
if (ls[i].delete_deferred) {
if (setsockopt(ls[i].fd, SOL_SOCKET, SO_ACCEPTFILTER,
Expand Down Expand Up @@ -475,10 +488,10 @@ ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle)
if (ls[i].add_deferred) {
ls[i].deferred_accept = 1;
}
#endif
#endif
}
}
#endif
}
}

Expand Down
33 changes: 9 additions & 24 deletions src/http/modules/ngx_http_fastcgi_module.c
Original file line number Diff line number Diff line change
Expand Up @@ -144,15 +144,6 @@ static ngx_http_fastcgi_request_start_t ngx_http_fastcgi_request_start = {
};


#if 0
static ngx_str_t ngx_http_fastcgi_methods[] = {
ngx_string("GET"),
ngx_string("HEAD"),
ngx_string("POST")
};
#endif


static ngx_str_t ngx_http_fastcgi_script_name =
ngx_string("fastcgi_script_name");

Expand Down Expand Up @@ -428,9 +419,7 @@ ngx_http_fastcgi_create_request(ngx_http_request_t *r)
}
le.ip += sizeof(uintptr_t);

if (val_len) {
len += 1 + key_len + ((val_len > 127) ? 4 : 1) + val_len;
}
len += 1 + key_len + ((val_len > 127) ? 4 : 1) + val_len;
}
}

Expand Down Expand Up @@ -527,22 +516,18 @@ ngx_http_fastcgi_create_request(ngx_http_request_t *r)
}
le.ip += sizeof(uintptr_t);

if (val_len) {
*e.pos++ = (u_char) key_len;
*e.pos++ = (u_char) key_len;

if (val_len > 127) {
*e.pos++ = (u_char) (((val_len >> 24) & 0x7f) | 0x80);
*e.pos++ = (u_char) ((val_len >> 16) & 0xff);
*e.pos++ = (u_char) ((val_len >> 8) & 0xff);
*e.pos++ = (u_char) (val_len & 0xff);
if (val_len > 127) {
*e.pos++ = (u_char) (((val_len >> 24) & 0x7f) | 0x80);
*e.pos++ = (u_char) ((val_len >> 16) & 0xff);
*e.pos++ = (u_char) ((val_len >> 8) & 0xff);
*e.pos++ = (u_char) (val_len & 0xff);

} else {
*e.pos++ = (u_char) val_len;
}
} else {
*e.pos++ = (u_char) val_len;
}

e.skip = val_len ? 0 : 1;

while (*(uintptr_t *) e.ip) {
code = *(ngx_http_script_code_pt *) e.ip;
code((ngx_http_script_engine_t *) &e);
Expand Down
23 changes: 19 additions & 4 deletions src/http/modules/ngx_http_headers_filter_module.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ ngx_http_headers_filter(ngx_http_request_t *r)
{
size_t len;
ngx_uint_t i;
ngx_table_elt_t *expires, *cc;
ngx_table_elt_t *expires, *cc, **ccp;
ngx_http_headers_conf_t *conf;

if (r->headers_out.status != NGX_HTTP_OK || r->main) {
Expand Down Expand Up @@ -103,9 +103,20 @@ ngx_http_headers_filter(ngx_http_request_t *r)
len = sizeof("Mon, 28 Sep 1970 06:00:00 GMT");
expires->value.len = len - 1;

cc = r->headers_out.cache_control.elts;
ccp = r->headers_out.cache_control.elts;

if (cc == NULL) {
if (ccp == NULL) {

if (ngx_array_init(&r->headers_out.cache_control, r->pool,
1, sizeof(ngx_table_elt_t *)) != NGX_OK)
{
return NGX_ERROR;
}

ccp = ngx_array_push(&r->headers_out.cache_control);
if (ccp == NULL) {
return NGX_ERROR;
}

cc = ngx_list_push(&r->headers_out.headers);
if (cc == NULL) {
Expand All @@ -116,10 +127,14 @@ ngx_http_headers_filter(ngx_http_request_t *r)
cc->key.len = sizeof("Cache-Control") - 1;
cc->key.data = (u_char *) "Cache-Control";

*ccp = cc;

} else {
for (i = 1; i < r->headers_out.cache_control.nelts; i++) {
cc[i].hash = 0;
ccp[i]->hash = 0;
}

cc = ccp[0];
}

if (conf->expires == NGX_HTTP_EXPIRES_EPOCH) {
Expand Down
Loading

0 comments on commit e503539

Please sign in to comment.