Condition in upstream

Hi guys,

I’m studying about in the use of upstream in the nginx. And I have a
question about the condition of use it.

Now, I have the following environment in production:
Internet – > Nginx → Varnish → Apache

I would like of set in upstream a backup’s server, for example:
upstream backend {
ip_hash;
server 192.168.1.5:6081; # varnish server
server 192.168.1.7:80 backup; # apache server
}

But in the case the configuration of the “location /” will change
according
with the server.

Is there some parameter of condition that I can used?

Best regards,
Thiago Gomes

Posted at Nginx Forum:

Just to complete the information, in my case I have two configuration
according with the web server, so:

TO VARNISH

location / {
proxy_redirect off; # Do not redirect this proxy - It needs to be
pass-through
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_set_header X-Server-Address $server_addr;
proxy_connect_timeout 5s;
proxy_read_timeout 300s;
proxy_pass_header Set-Cookie;
proxy_pass http://localhost:6081; # Pass all traffic through to
Varnish
}

TO APACHE
location / {
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 32k;
proxy_buffers 8 16k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_connect_timeout 30s;
proxy_redirect http://domain.com:8081 http://domain.com;
proxy_redirect http://www.domain.com:8081 http://www.domain.com;

proxy_pass http://192.168.1.7:8081/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

In the case varnish server not response, the request will forward to
apache
server.

Att,
Thiago Gomes

Posted at Nginx Forum:

On Sep 13, 2012, at 1:04 , thigomes wrote:

proxy_set_header X-Server-Address $server_addr;
proxy_send_timeout 90;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

In the case varnish server not response, the request will forward to apache
server.

Backup servers are not supported with ip_hash upstream.
You should use something like this:

upstream backend {
server 192.168.1.5:6081; # varnish server
server 192.168.1.7:80 backup; # apache server
}

server {
location / {
proxy_pass http://backend;

}
}

However, you can omit varnish at all and use nginx built-in cache:

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=CACHE:10m;

server {
location / {
proxy_pass http://192.168.1.7;
proxy_cache CACHE;

}
}


Igor S.