Support » Plugin: W3 Total Cache » [Plugin: W3 Total Cache] W3TC Rules with NGINX Potentially Causing Interminent Infinite Loops

  • Frederick,

    We have three high traffic sites up right now running NGINX as a reverse proxy to Apache. Our W3TC rules are in NGINX.CONF and the only rules in Apache.Conf (Static config) are standard WordPress re-write rules. We used the default rules generated for W3TC. Our selections are page cache = disk enhanced, min = disk, no CDN, opcache = APC, Browser Cache on . All other settings within are default.

    From our point of view, performance and memory consumption is bad ass. However, Pingdom has started hiccuping about every 30 minutes with reports of infinite 301 redirection loops.

    We are working through our conf files to make sure we are not causing it but wanted to let you know in the event there was a bug with your NGINX support. Our conf starts with the following and then simply has your re-writes per your output

    server {
    listen 80;
    access_log /var/log/nginx/;
    root /var/www/;


    followed by

    location / {
    #root /var/www/;
    index index.html index.htm index.php;
    error_page 404 = @dynamic;

    location ~ \.php$ {
    proxy_pass http://localhost:8080;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    location @dynamic {

    location @dynamic {
    proxy_pass http://localhost:8080;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    location ~ /\.ht {
    deny all;

    Any insight you can provide is much appreciated.


Viewing 14 replies - 1 through 14 (of 14 total)
  • OK, we have reproduced the problem consistently and it appears to be an NGINX issue. Still, I’m going to post it out here in the event that it triggers a thought with the plugins author. Here are our notes from firing 10K requests at our site.

    1. A client requests /
    2. Nginx in 99% cases returnc cached page (prepared by W3TC).
    3. But in 1% nginx can’t find cached page and tries to handle one of suggested indexes (index.htm index.html index.php).
    4.The 1st two are absent, so nginx tries to handle /index.php . It passes this request to apache and apache returns 301 to / .
    5. Nginx passes this 301 to the client.

    In terms of step 4, we can turn off W3TC and Apache will handle the index.php just fine without throwing the 301.


    Have you tried to see if this happens when nginx passses to something other than Apache (e.g php-fpm)?

    Plugin Contributor Frederick Townes


    Any other news here?

    phasetransitions, sorry for missing your response. We were actually just going down the path of removing Apache from the mix. I’ll report back.

    Frederick, the other news here is that with WP 3.2, NGINX rewrite rules for (PageCache = Disk Enhanced, Min = Disk, PHP Cache = APC, and Browser Cache on) is causing text in TinyMCE to go white. I haven’t had time to trouble shoot that yet. Any ideas before I get started?

    (config is NGINX port 80 reverse to Apache on another port, rewrite rules at NGINX)

    Plugin Contributor Frederick Townes


    No top of mind ideas right now. Are there errors in the error logs?

    Hi Derrick,

    Did you get a solution for your setup with nginx php-fpm and w3tc? I’m having the same issues with setup nginx/php-fpm with WP 3.2.1 and w3tc . Somehow the nginx caching does not respond well to the w3tc setup and WPTouch PRO. When I start with mobile pages on e.g iPhone I do get mobile pages in the desktop browser by visiting the same page… and vice versa

    I’m very interested in your nginx configuration, how you got it working!! ?

    Can you help me out here?


    For production sites, we actually use NGINX as a reverse proxy so it listens on port 80 and hands requests off to Apache that is listening on another port. Our goal with this config was to have NGINX take ALL of initial traffic spikes including rewrite rules processing for minified and static files.

    Though we’ve played around quite a bit with nginx/php-fpm, we don’t run it in production. Interesting that you are seeing the same types of issues.

    I’m sure Frederick has his hands full but I’m hoping that he eventually is able to spare a little more time to further evolve the NGINX support.

    We run our rewrite rules in static config files in Apache and have no issues. W3TC is a great plugin, btw.

    Guys if your using Nginx as a reverse proxy all your minify redirects etc. will need to be handled by Apache or your going to have problems.

    The only advantage to this setup is having nginx serve direct requests for static files like your images, css and js. I would suggest using the Nginx proxy cache integrator plugin conf settings which makes use of the static file cache and is the fastest way to run the reverse proxy setup. Leave all your W3 Total rules in .htaccess.

    I run Nginx – Php5-fpm W3 Total Cache on numerous high traffic production sites without any issues.

    Implemented a good working solution helped with the solution suggessted in this post:

    My setup: nginx with php files to php-fpm instances with fast-cgi cache implemented and w3tc cache

    in my nginx setup different cache for mobile or desktop requests:

    fastcgi_cache_key $host$request_uri$request_method$iphone_request;

    and the $iphone_request set to 1 on mobile requests

    if ($http_user_agent ~* "(2\.0 MMP|240x320|400X240|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine\/3\.0|EudoraWeb|Googlebot-Mobile|hiptop|IEMobile|KYOCERA\/WX310K|LG\/U990|MIDP-2\.|MMEF20|MOT-V|NetFront|Newt|Nintendo Wii|Nitro|Nokia|Opera Mini|Palm|PlayStation Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|SHG-i900|Small|SonyEricsson|Symbian OS|SymbianOS|TS21i-10|UP\.Browser|UP\.Link|webOS|Windows CE|WinWAP|YahooSeeker\/M1A1-R2D2|NF-Browser|iPhone|iPad|iPod|Android|BlackBerry9530|G-TU915 Obigo|LGE VX|webOS|Nokia5800)" ) {
        set $iphone_request '1';

    The w3tc cache is enabled and the generated w3tc nginx rules are included in my nginx files for wordpress:

    include ../wordpress/nginx.conf;

    This setup is working after pruging all cache, restart of nginx. WPTOUCH PRO delivers the mobile version on mobile and desktop on desktop everytime!

    The only thing is I can not test all mobile devices ofcourse and the list of mobile devices might not be accurate or up to date. Any idea where a list of up to date mobile agents can be obtained? and checked regularly for new agents?

    christianebuddy, could I see your config file? I need to implement this almost exactly like you did for WPtouch Pro but I’m unclear as to where to add these entries.

    Plugin Contributor Frederick Townes


    Anyone have any W3TC bugs related to this topic?

    Frederick, mostly clear here. NGINX as reverse proxy all rules in .htaccess working fine. NGINX/PHP-FMP I do see intermittent false positives on plugin claiming that minify rewrites not working on 9.2.4 . They don’t occur with 9.2.3. I have a few sites I can repro this in if you want to have a look.



    How are you purging the cache? Each page will have 2 cache entries.

    Plugin Contributor Frederick Townes


    @derickschaefer thanks.

    @tcbarrett, W3TC would take care of this for you if you use varnish as your reverse proxy.

Viewing 14 replies - 1 through 14 (of 14 total)
  • The topic ‘[Plugin: W3 Total Cache] W3TC Rules with NGINX Potentially Causing Interminent Infinite Loops’ is closed to new replies.