Last active
January 31, 2022 18:19
-
-
Save rungta/e35bd486e9439da46d9796cd12faae1f to your computer and use it in GitHub Desktop.
Micro-caching in Nginx, sample config. https://speakerdeck.com/rungta/micro-caching-in-nginx-for-high-performance
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
# | |
# WARNING: This is not a complete NGINX configuration file | |
# It tries to highlight just the directives used to enable FastCGI microcaching | |
# as explained in my “Micro-caching in Nginx for High Performance” talk | |
# https://speakerdeck.com/rungta/micro-caching-in-nginx-for-high-performance | |
# Video: https://youtu.be/termdb4vepA?t=2199 | |
# | |
http { | |
#... | |
# Init cache | |
fastcgi_cache_path /var/run/fastcgicache_folder levels=1:2 keys_zone=zone_name:100m inactive=1d; | |
# Configure | |
fastcgi_cache_lock on; | |
fastcgi_cache_use_stale updating error timeout invalid_header http_500; | |
fastcgi_cache_background_update on; | |
fastcgi_cache_methods GET HEAD; | |
fastcgi_cache_key "$scheme$request_method$host$request_uri"; | |
# Detect mobile browsers | |
# from https://gist.github.com/dangayle/2919206 | |
# map $http_user_agent $is_mobile { | |
# default 0; | |
# "~*android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino" 1; | |
# "~*^(1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-)" 1; | |
# } | |
# fastcgi_cache_key "$is_mobile$scheme$request_method$host$request_uri"; | |
# Cache status (debug) | |
add_header X-Cache $upstream_cache_status; | |
fastcgi_pass_header X-Accel-Expires; | |
server { | |
#... | |
# Ensure admin / user-specific requests skip the cache | |
# using a custom location handler | |
location ^~ /admin { | |
try_files $uri $uri/ @phpfpm_nocache; | |
} | |
location ~ \.php$ { | |
# Enable cache | |
fastcgi_cache zone_name; | |
fastcgi_ignore_headers Cache-Control Expires; | |
fastcgi_cache_valid 200 301 302 404 1s; | |
fastcgi_cache_bypass $arg_token $cookie_session_cookie_name; | |
fastcgi_no_cache $arg_token $cookie_session_cookie_name; | |
# Regular PHP handling | |
# ... | |
} | |
location @phpfpm_nocache { | |
# No FastCGI Cache | |
fastcgi_cache_bypass 1; | |
fastcgi_no_cache 1; | |
# Regular PHP handling | |
# ... | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment