Nginx traffic is going to wrong upsteam when mixing named servers and default servers

Posted by Morgan on Server Fault See other posts from Server Fault or by Morgan
Published on 2011-06-24T06:11:27Z Indexed on 2011/06/24 8:24 UTC
Read the original article Hit count: 359

Filed under:
|

I have the below config file for nginx. The problem is all traffic is going to upstream clustera. How do I configure nginx to only send traffic for example.com to clustera and all the rest to clusterb?

user www-data;
worker_processes  1;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    log_format cache '\n*** $remote_addr [$time_local] '
             '[$upstream_cache_status] $upstream_response_time '
             '$host "$request" ($status) $body_bytes_sent '
             '"$http_referer"  "$http_user_agent" '
             'Cache-Control: $upstream_http_cache_control '
             'Expires: $upstream_http_expires '
             ;

    access_log  /var/log/nginx/access.log cache;
    sendfile        on;
    keepalive_timeout  65;


    gzip    on;
    gzip_vary       on;
    gzip_comp_level 6;
    gzip_proxied    any;

    gzip_disable    "MSIE [1-6]\.(?!.*SV1)";
    gzip_buffers    16 8k;

    include /etc/nginx/conf.d/*.conf;

    proxy_cache_key "$scheme$host$request_uri";
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=main:10m max_size=1g inactive=30m;


    upstream clustera {
        ip_hash;
        server  a.example.com:80;
    }
    upstream clusterb {
        ip_hash;
        server  b.example.com:80;
    }


    client_max_body_size    20m;
    client_body_buffer_size 128k;
    proxy_connect_timeout      300;
    proxy_send_timeout         300;
    proxy_read_timeout         300;

    # host for example.com should send traffic to clustera
    server {
        listen 80;
        server_name example.com;

        location ~*(png|jpeg|jpg|gif|ico|css|js)$ {
            proxy_pass      http://clustera;
            proxy_set_header        Host             $host;
            proxy_set_header        X-Real-IP        $remote_addr;
            proxy_set_header        X-Forwarded-For  $proxy_add_x_forwarded_for;

            proxy_cache     main;
            proxy_cache_valid       200 5m;
            proxy_cache_valid       302 1m;
        }

        location / {
            proxy_pass http://clustera;
            proxy_set_header        Host             $host;
            proxy_set_header        X-Real-IP        $remote_addr;
            proxy_set_header        X-Forwarded-For  $proxy_add_x_forwarded_for;
        }

    }
    # host for everyone else. traffic goes to clusterb
    server {
        listen 80;
        server_name _;

        if ( $http_user_agent ~* (spider|crawler|slurp) ) {
             return 503;
        }

        set $slow 0;
        if ( $http_user_agent ~* (bot) ) {
             set $slow 1;
        }

        if ( $slow ) {
           set $limit_rate 1k;
        }

        location ~*(png|jpeg|jpg|gif|ico|css|js)$ {
            proxy_pass      http://clusterb;

            proxy_set_header        Host             $host;
            proxy_set_header        X-Real-IP        $remote_addr;
            proxy_set_header        X-Forwarded-For  $proxy_add_x_forwarded_for;


            proxy_cache     main;
            proxy_cache_valid       200 5m;
            proxy_cache_valid       302 1m;
        }

        location /images {
            proxy_pass      http://clisterb;

            proxy_set_header        Host             $host;
            proxy_set_header        X-Real-IP        $remote_addr;
            proxy_set_header        X-Forwarded-For  $proxy_add_x_forwarded_for;

            proxy_cache     main;
            proxy_cache_valid       200 5m;
            proxy_cache_valid       302 1m;
        }

        location / {
            proxy_pass http://clusterb;

            proxy_set_header        Host             $host;
            proxy_set_header        X-Real-IP        $remote_addr;
            proxy_set_header        X-Forwarded-For  $proxy_add_x_forwarded_for;
        }

    }
}

© Server Fault or respective owner

Related posts about nginx

Related posts about upstart