Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have a very low traffic Nginx box that serves as a reverse proxy to an external service. I have Monit on the box to restart nginx if it crashes. Needless to say, nginx stops at least once a day on this machine, and monit has to restart it.

Here's my monit configuration:

check process nginx with pidfile /var/run/
    start program = "/etc/init.d/nginx start"
    stop program  = "/etc/init.d/nginx stop"
    if cpu > 60% for 2 cycles then alert
    if cpu > 80% for 25 cycles then restart
    if totalmem > 400.0 MB for 5 cycles then restart
    if children > 250 then restart
    if loadavg(5min) greater than 10 for 8 cycles then stop
    if failed host port 80 protocol http
       then restart
    if 3 restarts within 5 cycles then timeout

Here's my site config on nginx:

server {
    listen       80;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    location / {
        proxy_redirect     off;

        client_max_body_size       10m;
        client_body_buffer_size    128k;

        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;

        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
share|improve this question
"Needless to say"? There must be a reason for this. What do your logs show? – ceejayoz Jul 31 '13 at 16:19
Nginx shows a 499 in the logs for the monit tests, which according to wikipedia means: Used in Nginx logs to indicate when the connection has been closed by client while the server is still processing its request, making server unable to send a status code back. How do I get monit to not close the connection, and why is that happening? It doesn't happen all the time. – blefko Jul 31 '13 at 16:37
up vote 1 down vote accepted

Your issue could be due to monit not sending a 'Host:' header field. Try addressing this by setting up a location for monit to monitor that is not proxied:

location = /test_target.html {
    root /var/www/public;

(I found this answer by searching for nginx monit 499. It was the first result.)

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.