I installed the W3 Total Cache plugin which automatically configured my nginx configuration file. Unfortunately, no CSS or other static files are showing up for me. Everything 404s except for the themeless homepage.

This is the nginx configuration: http://pastie.org/2296620 I was hoping someone could point out what's the problem.

Thank you,


  • A few points - a) move your root and index directives out from the location block (to the top); b) most CMSes (including Wordpress) run well with try_files; c) I setup W3TC with nginx a while ago (before it was fully supported), you can take a look at my config here - my setup is not identical to yours so don't just copy and paste; d) for diagnostics, note (and post) the URL that throws a 404, and what the actual URL should have been (presuming it is incorrect); e) check your error.log – cyberx86 Jul 31 '11 at 4:56

The main problem I see is the WordPress rewrite.

In this section remove the root and index directives and put them right under listen 80 then change the if rewrite to try files.

To help keep things organized I would move the W3 Total Cache config to a separate file and use an include to add it.

Here is an example:

server {
    listen 80;

    server_name domain.com www.domain.com;

    root /srv/www/domain/public;

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

        client_max_body_size 8M;
        client_body_buffer_size 128k;
    location / { 
        #try_files $uri $uri/ /index.php;
                try_files $uri $uri/ /index.php?q=$uri&$args; 

    location /search { limit_req zone=one burst=3 nodelay; rewrite ^ /index.php; }

    fastcgi_intercept_errors off;

    location ~ \.php {
    try_files $uri =404;
    fastcgi_param  QUERY_STRING       $query_string;
    fastcgi_param  REQUEST_METHOD     $request_method;
    fastcgi_param  CONTENT_TYPE       $content_type;
    fastcgi_param  CONTENT_LENGTH     $content_length;

    fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
    fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param  REQUEST_URI        $request_uri;
    fastcgi_param  DOCUMENT_URI       $document_uri;
    fastcgi_param  DOCUMENT_ROOT      $document_root;
    fastcgi_param  SERVER_PROTOCOL    $server_protocol;

    fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
    fastcgi_param  SERVER_SOFTWARE    nginx;

    fastcgi_param  REMOTE_ADDR        $remote_addr;
    fastcgi_param  REMOTE_PORT        $remote_port;
    fastcgi_param  SERVER_ADDR        $server_addr;
    fastcgi_param  SERVER_PORT        $server_port;
    fastcgi_param  SERVER_NAME        $server_name;


    include w3-total-cache-config.conf;


I recently wrote a blog post on setting up Nginx with W3 Total Cache that you might also find helpful.


Well, I'd start simple -- take out all that W3TC cache guff and have a basic site config, and get that working first. Check your error log for why exactly the request is 404ing; chances are you've just made a mess of a link or something. Also, I see a great many pitfalls in your config that you might want to look into fixing.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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