Proxy - 2nd apache process started

Igor Sysoev is at rambler-co.ru
Thu Apr 2 00:25:38 MSD 2009


On Wed, Apr 01, 2009 at 10:07:52PM +0200, mates007 at centrum.cz wrote:

> Hello nginx users!
> 
> I an running nginx/0.6.32 on Debian Lenny as a proxy server for Apache.
> 
> I have a script sleep.php which does nothing but sleeps for 120 seconds and then displays phpinfo.
> 
> When I call sleep.php bypassing nginx proxy, I can see output after 120 seconds. This is expected.
> 
> When I call sleep.php througt proxy, weird things happens:
> Apache process is in status Sending Reply for 90 seconds.
> In 90th second, another apache process is started, executing sleep.php
> In 120th second, 1st process finishes
> In 150th second 504 Gateway Time-out is sent to browser
> In 210th second, 2nd process finishes
> 
> Is there any explanation for this weird behaviour?
> Why 2nd process is started?

After 90s (proxy_read_timeout  90) nginx closes connection to the proxied
server issues 504 error. Since there is

         error_page   502 503 504  /50x.html;

nginx redirects internally the error to /50x.html. However, you have
no static location for /50x.html and the request is passed to Apache again:

         location / {
             proxy_pass         http://11.22.33.44:8080;

This is why another Apache process is started. After the second 90s
timeout (i.e., after 180s) nginx shows default 504 page (since
recursive_error_pages is off).


> Thanks,
> Martin
> 
> 
> 
> My nginx configuration:
> 
> nginx.conf:
> ----------
> 
> user  www-data www-data;
> worker_processes  1;
> 
> events {
>         worker_connections  1024;
>         use epoll;
> }
> 
> http {
>         root  /var/www/nginx-default/;
>         index index.html;
>         error_page   502 503 504  /50x.html;
>         error_log /var/log/nginx/error_log;
> 
>         server_names_hash_max_size 2048;
>         #server_names_hash_bucket_size 128;
> 
>         include         /etc/nginx/mime.types;
>         default_type    application/octet-stream;
> 
>         sendfile        on;
>         tcp_nopush      on;
>         tcp_nodelay     on;
> 
>         keepalive_timeout 10;
> 
>         log_format main
>         '$remote_addr - $remote_user [$time_local] '
>         '"$request" $status $bytes_sent '
>         '"$http_referer" "$http_user_agent" '
>         '"$gzip_ratio"';
> 
>         #gzipping all text content
>         gzip on;
>         gzip_min_length 1100;
>         gzip_buffers    4 32k;
>         gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
>         ignore_invalid_headers  on;
> 
>         client_header_timeout       3m;
>         client_body_timeout         3m;
>         send_timeout                3m;
>         connection_pool_size        256;
>         client_header_buffer_size   4k;
>         large_client_header_buffers 4 32k;
>         request_pool_size           4k;
>         output_buffers              4 32k;
>         postpone_output             1460;
> 
> 
>         server {
>                 listen 11.22.33.44:80;
> 
>                 location /nginx_status {
>                         stub_status on;
>                         allow 99.88.77.66;
>                         deny all;
>                 }
> 
>                 location /server-status {
>                         proxy_pass http://11.22.33.44:8080/server-status;
>                 }
> 
>                 #default proxy settings for each virtual host
>                 include /etc/nginx/proxy.conf;
> 
>         }
> 
>         #add fine-tuned virtual hosts
>         include /etc/nginx/sites-enabled/*.conf; #see below
> }
> 
> 
> proxy.conf:
> -----------
>                 location / {
>                   client_max_body_size       10m;
>                   client_body_buffer_size    128k;
> 
>                   proxy_send_timeout         90;
>                   proxy_read_timeout         90;
> 
>                   proxy_buffer_size          4k;
>                   proxy_buffers              16 32k;
>                   proxy_busy_buffers_size    64k;
>                   proxy_temp_file_write_size 64k;
> 
>                   proxy_connect_timeout      30s;
> 
>                   proxy_pass         http://11.22.33.44:8080;
>                   proxy_redirect     off;
> 
> 
>                   proxy_set_header   Host             $host;
>                   proxy_set_header   X-Real-IP        $remote_addr;
>                   proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
>                 }
> 
> 
> 
> One of the sites:
> -----------------
> 
> server {
>     listen 11.22.33.44:80;
>     server_name www.example.com;
> 
>     include /etc/nginx/proxy.conf;
> 
>     location ~* ^.+.(jpe?g|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|html?|txt|tar|mid|midi|wav|bmp|rtf|js|swf|avi|mp3)$ {
>         #forcing browser to cache locally static content for 30 days
>         expires 30d;
>         root /home/apache/example.com/www/htdocs;
> 
>         #graceful fallback in case if static content doesn't exist
>         include /etc/nginx/proxy_fallback.conf; #see below
>     }
> }
> 
> 
> proxy_fallback.conf:
> --------------------
> proxy_set_header   Host             $host;
> proxy_set_header   X-Real-IP        $remote_addr;
> proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
> if (!-f $request_filename) {
>   break;
>   proxy_pass http://11.22.33.44:8080;
> }
> 
> 

-- 
Igor Sysoev
http://sysoev.ru/en/





More information about the nginx mailing list