Created
February 14, 2013 09:08
-
-
Save marcusgreenwood/4951476 to your computer and use it in GitHub Desktop.
Nginx 1s microcaching config for Hatch.js.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
events { | |
worker_connections 1024; | |
} | |
http { | |
# Set cache dir | |
proxy_cache_path /var/cache/nginx levels=1:2 | |
keys_zone=microcache:5m max_size=1000m; | |
# Virtualhost/server configuration | |
server { | |
listen 80; | |
#server_name *; | |
# Define cached location (may not be whole site) | |
location / { | |
# Setup var defaults | |
set $no_cache ""; | |
# If non GET/HEAD, don't cache & mark user as uncacheable for 1 second via cookie | |
if ($request_method !~ ^(GET|HEAD)$) { | |
set $no_cache "1"; | |
} | |
# Drop no cache cookie if need be | |
# (for some reason, add_header fails if included in prior if-block) | |
if ($no_cache = "1") { | |
add_header Set-Cookie "_mcnc=1; Max-Age=2; Path=/"; | |
add_header X-Microcachable "0"; | |
} | |
# Bypass cache if no-cache cookie is set | |
if ($http_cookie ~* "hatch.nocache=1") { | |
set $no_cache "1"; | |
} | |
# Bypass cache if flag is set | |
proxy_no_cache $no_cache; | |
proxy_cache_bypass $no_cache; | |
# Point nginx to the real app/web server | |
#proxy_pass http://unix:/tmp/app.socket:; | |
proxy_pass http://localhost:3000; | |
# Set cache zone | |
proxy_cache microcache; | |
# Set cache key to include identifying components | |
proxy_cache_key $scheme$host$request_method$request_uri; | |
# Only cache valid HTTP 200 responses for 1 second | |
proxy_cache_valid 200 1s; | |
# Serve from cache if currently refreshing | |
proxy_cache_use_stale updating; | |
# Send appropriate headers through | |
# proxy_set_header Host $host; | |
proxy_set_header X-Real-IP $remote_addr; | |
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
proxy_set_header X-HOST $host; | |
proxy_set_header hatchhost $host; | |
# Set files larger than 1M to stream rather than cache | |
proxy_max_temp_file_size 1M; | |
# Custom logging | |
# log_format custom '$remote_addr - $remote_user [$time_local] ' | |
# '"$request" $status $body_bytes_sent ' | |
# '"$http_referer" "$http_user_agent" nocache:$no_cache'; | |
access_log /var/log/nginx/access.log; | |
error_log /var/log/nginx/error.log; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment