I have Nginx installed as a front end proxy for Apache, where Apache is servicing PHP and Nginx is servicing static files. I'm having a problem configuring Nginx to cache the output from PHP into a static file. I've tried with proxy_cache, but obviously I'm doing something wrong.
Here is my base configuration:
server { listen 80; root /var/www/web; index index.php index.html index.htm; server_name web.com; location / { try_files $uri $uri/ /index.php; } # cache static files location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 365d; access_log off; add_header Cache-Control public; } location ~ \.php$ { proxy_pass http://127.0.0.1:8080; # Set header to be what we requested proxy_set_header Host $host; # Set proxy_cache expiry time proxy_cache_valid 200 302 5m; proxy_cache_valid 404 1m; proxy_cache_valid 301 1h; # Need this for snooping with tcpdump (turns off upstream compression) proxy_set_header Accept-Encoding ""; # Set real IP header (needed for client IP detection in apache) proxy_set_header X-Real-IP $remote_addr; # Explicitly allow critical headers proxy_pass_header Set-Cookie; # Prevent 304 responses being returned from Apache and cached by nginx proxy_set_header If-None-Match ""; } location ~ /\.ht { deny all; } }