Welcome! Log In Create A New Profile

Advanced

malloc() errors - (some type of redirect loop?)

September 12, 2010 10:56AM
Hi everyone,
I am new to the mailing list and have only been using Nginx a few months, so please bear with me.

We are currently getting MANY errors such as this:

2010/09/07 17:58:18 [emerg] 8851#0: *4086 malloc() 4294967295 bytes failed (12: Cannot allocate memory), client: 66.249.71.238, server: xxxx.net, request: "GET /robots.txt HTTP/1.1", host: "www.xxxxx.net"

These errors started occurring after changes to our site config.

We originally set up Nginx as only a reverse proxy, to forward to other machines, so [b]nginx.conf[/b] is as such:

[code]
server {
listen 80;
server_name _;

location / {
resolver 192.168.1.1;
proxy_pass http://$host$uri;
proxy_intercept_errors on;
}
[/code]
That was working VERY well (thanks to the Nginx developers for that!), so we decided to add a local config on the gateway machine to serve up some other stuff:

so this is the [b]rest of current nginx.conf[/b]:
[code]
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
#root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/httpd/html$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
[/code]

this is [b]fastcgi_params[/b]:
[code]
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/$nginx_version;

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;
[/code]

The site config then was as such:

[b]cat /etc/nginx/sites-enabled/xxxxxx.net[/b]
[code]
server {
listen 80;
server_name xxxxxx.net;

access_log /home/httpd/log/access.log;
error_log /home/httpd/log/error.log;


location / {
root /home/httpd/html/xxxxxxx.net;
index index.html;
}

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/httpd/html/xxxxxx.net/$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
[/code]

At this point everything was still working fine. (Thanks again Nginx developers!!)

But we are also running our Webmail, and a small download server, on the gateway. Url's such as:
[b]http://www.xxxxxxx.net/webmail[/b] and [b]http://www.xxxxxxxxxx.net/download[/b]
proved to be inconvenient for our users, as they were used to the previous url format such as:
[b]http://webmail.xxxxxxx.net.[/b]

We also wanted to group subdomains such as webmail and download into their own respective independent directories for maintenance and security reasons. We decided upon a directory hierarchy such as this:
[code]
/home/httpd/html
/home/httpd/html/xxxxx.net
/home/httpd/html/xxxxx.net/www
/home/httpd/html/xxxxx.net/webmail
/home/httpd/html/xxxxx.net/download
[/code]

Since Nginx can use regex to extract the subdomain, we decided to use a regex if statement in the domain config to set the root directory for each subdomain. That simplifies the config and makes adding subdomains a simple matter of adding content. So now our domain config is as such:
[b]cat /etc/nginx/sites-enabled/xxxxxx.net[/b]
[code]
server {

listen 80;
server_name xxxxxxxx.net www.xxxxxxx.net *.xxxxxx.net;

access_log /home/httpd/log/xxxxxxxxxx.net-access.log;
error_log /home/httpd/log/xxxxxxxxx.net-error.log;

# Extracts the subdomain to a variable
if ($host ~ "^(.*).xxxxxxxx.net") {
set $sub $1;
set $domain $2;
}

# If the directory doesn't exist then redirect to the main-page
if (!-d /home/httpd/html/xxxxxxx.net/$sub) {
rewrite . http://www.xxxxxxxxxx.net/ redirect;
}

location / {

root /home/httpd/html/xxxxxxxxx.net/$sub;
index index.html;

}

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/httpd/html/xxxxxxxxx.net/$sub$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
# redirect 404 server error pages to the static page
# error_page 404 notfound.htm;

}
[/code]

At this point is when we started getting the malloc() errors. Sometimes the pages will load properly. At other times random images will be missing on the page. Reloading the page will cause the missing images to randomly change. Other times a 500 error will occur. The byte size of the file in the malloc() error will depend upon the file creating the error, but the size will stay consistent per file and always be in the MB/GB size range. All files on which the errors occur, including images, are no more than 10kB. Also the error pages do not work, and that is why they are commented out.

Since the errors only started occurring only after we made the recent changes we suspect the problem is due to some type of error in our regex expressions. I have a hard time getting a good grip on those. So the regex code we are using was copied from other nginx configs posted on the Web.

Thanks in advance for any assistance.
Subject Author Posted

malloc() errors - (some type of redirect loop?)

gnexus September 12, 2010 10:56AM

Re: malloc() errors - (some type of redirect loop?)

Maxim Dounin September 12, 2010 05:50PM

Re: malloc() errors - (some type of redirect loop?)

gnexus September 13, 2010 08:32AM

Re: malloc() errors - (some type of redirect loop?)

gnexus September 13, 2010 09:00AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 225
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready