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

the following is our current setup on the apps

but we would like to add nginx as a reverse proxy cache much like squid or varnish is it possible to edit this config to enable that caching behavior or do i need to add another nginx in front of this set up like i would do for squid or varnish

if this can be done without resorting to usage of squid and varnish it would be nice to have the complete setup in nginx

thanks a lot

upstream backend_appname{
     server fail_timeout=3s;
     server fail_timeout=3s;
     server fail_timeout=3s;
     server fail_timeout=3s;

server {
    listen 80;
    access_log   logs/access_appname.log;
    #error_log   logs/error_appname.log;

    location /nginx_status {
        stub_status on;
        access_log   off;

    location /static {
        root   /home/someuser/work/appname;
        expires max;
        add_header Cache-Control public,max-age=604800,post-check=604800,pre-check=1209600;
    location / {
        root   /home/someuser/work/appname;
        fastcgi_pass backend_appname;
      set  $addr  $remote_addr;

     if ($http_x_forwarded_for ~ "(?:^|,)\s*(\d+\.\d+\.\d+\.\d+)\s*$") {
           set  $addr  $1;

        fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
        fastcgi_param PATH_INFO       $fastcgi_script_name;
        fastcgi_param QUERY_STRING    $query_string;
        fastcgi_param CONTENT_TYPE    $content_type;
        fastcgi_param CONTENT_LENGTH  $content_length;
        fastcgi_param REQUEST_METHOD  $request_method;
        fastcgi_param REMOTE_ADDR     $addr;
        fastcgi_param REMOTE_PORT     $remote_port;
        fastcgi_param SERVER_PROTOCOL $server_protocol;
        fastcgi_param SERVER_ADDR     $server_addr;
        fastcgi_param SERVER_PORT     $server_port;
        fastcgi_param SERVER_NAME     $server_name;


share|improve this question

migrated from Sep 28 '10 at 12:58

This question came from our site for professional and enthusiast programmers.

I would suggest using Varnish instead as it is made to be a reverse proxy and can perform much faster than nginx in that capacity.

Varnish is tuned for performance. It does crazy stuff like compile its config files into C objects, which are then loaded into its memory. This might not seem like much, but it really makes a difference when you have some logic defined in the configs (via Varnish's own VCL language, which is cool in itself).

I see what you're getting at, bu nginx isn't meant to be a monolithic program that does everything (unlike apache). It's meant to do a few things, and do them well... if there's a better reverse proxy (Varnish), use that instead!

Just my thoughts :)

share|improve this answer
Any (publicly documented) test available to back your claim that Varnish is faster than Nginx? I am asking because I have never seen that happening... – Gil Apr 10 '12 at 10:46
I think it was accurate back in Dec 2010, but may not be accurate any more. No time to research this now. – incredimike Jul 17 '12 at 22:20
I have done some basic tests by putting nginx and varnish in front of my web servers. I always found that nginx had bit higher performance. Not a lot but enough to select nginx for few projects. – harry Jan 13 '15 at 14:07

Your Answer


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