0

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; } } 
1

1 Answer 1

0

set proxy_cache_path in your http{} - context and define your zone and parameters

http { ... proxy_cache_path /tmp/cache/blue blue:100m ...; proxy_cache_path /tmp/cache/white white:100m ...; ... } 

set proxy_cache zone/off in corresponding server/location-context and your options as well

e.g. define your cache pathes globally and activate/deactivate for each server/location

location /blue { proxy_cache blue; proxy_cache_... } location /white { proxy_cache white; proxy_cache_... } location /red { proxy_cache off; proxy_cache_... } 

beware, your cached files will be in binary format

7
  • I'm still not able to get the cache working..the cache directory is always empty. (I've checked users and permissions on the directory, everything is ok). Here is my configuration: gist.github.com/SvenAlHamad/6397956 Commented Aug 31, 2013 at 12:45
  • your config seems ok. do you have any entries in your error.log? /var/cache must be readable by www-data (chmod 755) and /var/cache/nginx must be writable by www-data (chown). Commented Aug 31, 2013 at 14:21
  • everything is fine there...but I noticed one strange thing. When I open mysite/index.php the cache is not created, so I decided to create a test file, text.php and inside I just wrote 'hello'. When I open mysite/test.php the cache file is created inside /var/cache/nginx Here are the headers imgur.com/Ei5ri6v imgur.com/4RgDUnn Commented Aug 31, 2013 at 15:40
  • does the cache-control-header comes from apache too? stackoverflow.com/a/6077195. oh, and could you please change your answer to "how to configure proxy_cache?" Commented Aug 31, 2013 at 15:54
  • i asked to change the title of your question, not answer :) Commented Aug 31, 2013 at 16:20

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.