Created
April 5, 2022 13:47
-
-
Save amanjuman/cca3c0de2232ea18bd0c89bc407f931e to your computer and use it in GitHub Desktop.
Plesk Nginx-cache with WP-Rocket
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
gzip on; | |
gzip_comp_level 9; | |
gzip_http_version 1.0; | |
gzip_proxied any; | |
gzip_min_length 1100; | |
gzip_buffers 16 8k; | |
gzip_types text/plain text/html text/css application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon image/bmp image/svg+xml; | |
gzip_disable "MSIE [1-6].(?!.*SV1)"; | |
gzip_vary on; | |
################################################################################################### | |
# Rocket-Nginx | |
# | |
# Rocket-Nginx is a NGINX configuration to speedup your WordPress | |
# website with the cache plugin WP-Rocket (http://wp-rocket.me) | |
# | |
# Author: Maxime Jobin | |
# URL: https://github.com/maximejobin/rocket-nginx | |
# | |
# Tested with WP-Rocket version: 3.6.0.1 | |
# Tested with NGINX: 1.19 (mainline) | |
# | |
# Version 2.1.1 | |
# | |
################################################################################################### | |
# Add debug information into header | |
set $rocket_debug 1; | |
################################################################################################### | |
# Do not alter theses values | |
# | |
set $rocket_bypass 1; # Should NGINX bypass WordPress and call cache file directly ? | |
set $rocket_encryption ""; # Is GZIP accepted by client ? | |
set $rocket_file ""; # Filename to use | |
set $rocket_is_bypassed "No"; # Header text added to check if the bypass worked or not. Header: X-Rocket-Nginx-Serving-Static | |
set $rocket_reason ""; # Reason why cache file was not used. If cache file is used, what file was used | |
set $rocket_https_prefix ""; # HTTPS prefix to use when cached files are using HTTPS | |
set $rocket_hsts 0; # Is HSTS is off (0) by default. Will be turned on (1) if request is HTTPS | |
# HSTS value | |
set $rocket_hsts_value "max-age=31536000; includeSubDomains"; | |
################################################################################################### | |
# PAGE CACHE | |
# | |
# Is GZIP accepted by client ? | |
if ($http_accept_encoding ~ gzip) { | |
set $rocket_encryption "_gzip"; | |
} | |
# Is Brotli accepted by client ? | |
if ($http_accept_encoding ~ br) { | |
set $rocket_encryption ""; | |
} | |
# Is SSL request ? | |
if ($https = "on") { | |
set $rocket_https_prefix "-https"; | |
set $rocket_hsts 1; | |
} | |
# If HSTS is disabled, unset HSTS set for Rocket-Nginx configuration | |
if ($rocket_hsts = "0") { | |
set $rocket_hsts_value ""; | |
} | |
# File/URL to return IF we must bypass WordPress | |
# Desktop: index.html or index-https.html | |
# Mobile: index-mobile.html or index-mobile-https.html | |
set $rocket_end "/cache/wp-rocket/$http_host${request_uri}index$rocket_https_prefix.html$rocket_encryption"; | |
set $rocket_url "/wp-content$rocket_end"; | |
set $rocket_file "$document_root/wp-content$rocket_end"; | |
set $rocket_mobile_detection "$document_root/wp-content/cache/wp-rocket/$http_host${request_uri}.mobile-active"; | |
# Do not bypass if it's a POST request | |
if ($request_method = POST) { | |
set $rocket_bypass 0; | |
set $rocket_reason "POST request"; | |
} | |
# Do not bypass if arguments are found (e.g. ?page=2) | |
if ($is_args) { | |
set $rocket_bypass 0; | |
set $rocket_reason "Arguments found"; | |
} | |
# Do not bypass if the site is in maintenance mode | |
if (-f "$document_root/.maintenance") { | |
set $rocket_bypass 0; | |
set $rocket_reason "Maintenance mode"; | |
} | |
# Do not bypass if one of those cookie if found | |
# wordpress_logged_in_[hash] : When a user is logged in, this cookie is created (we'd rather let WP-Rocket handle that) | |
# wp-postpass_[hash] : When a protected post requires a password, this cookie is created. | |
if ($http_cookie ~* "(wp\-postpass_|woocommerce_items_in_cart|woocommerce_cart_hash|wptouch_switch_toogle|comment_author_|comment_author_email_)") { | |
set $rocket_bypass 0; | |
set $rocket_reason "Cookie"; | |
} | |
if (-f "$rocket_mobile_detection") { | |
set $rocket_bypass 0; | |
set $rocket_reason "Specific mobile cache activated"; | |
} | |
# Do not bypass if the cached file does not exist | |
if (!-f "$rocket_file") { | |
set $rocket_bypass 0; | |
set $rocket_reason "File not cached"; | |
} | |
# If the bypass token is still on, let's bypass WordPress with the cached URL | |
if ($rocket_bypass = 1) { | |
set $rocket_is_bypassed "Yes"; | |
set $rocket_reason "$rocket_url"; | |
} | |
# Clear variables if debug is not needed | |
if ($rocket_debug = 0) { | |
set $rocket_reason ""; | |
set $rocket_file ""; | |
} | |
# If the bypass token is still on, rewrite according to the file linked to the request | |
if ($rocket_bypass = 1) { | |
rewrite .* "$rocket_url" last; | |
} | |
# Add header to HTML cached files | |
location ~ /wp-content/cache/wp-rocket/.*html$ { | |
etag on; | |
add_header Vary "Accept-Encoding, Cookie"; | |
add_header Cache-Control "no-cache, no-store, must-revalidate"; | |
add_header X-Rocket-Nginx-Serving-Static $rocket_is_bypassed; | |
add_header X-Rocket-Nginx-Reason $rocket_reason; | |
add_header X-Rocket-Nginx-File $rocket_file; | |
add_header Strict-Transport-Security "$rocket_hsts_value"; | |
} | |
# Do not gzip cached files that are already gzipped | |
location ~ /wp-content/cache/wp-rocket/.*_gzip$ { | |
etag on; | |
gzip off; | |
types {} | |
default_type text/html; | |
add_header Content-Encoding gzip; | |
add_header Vary "Accept-Encoding, Cookie"; | |
add_header Cache-Control "no-cache, no-store, must-revalidate"; | |
add_header X-Rocket-Nginx-Serving-Static $rocket_is_bypassed; | |
add_header X-Rocket-Nginx-Reason $rocket_reason; | |
add_header X-Rocket-Nginx-File $rocket_file; | |
add_header Strict-Transport-Security "$rocket_hsts_value"; | |
} | |
# Debug header (when file is not cached) | |
add_header X-Rocket-Nginx-Serving-Static $rocket_is_bypassed; | |
add_header X-Rocket-Nginx-Reason $rocket_reason; | |
add_header X-Rocket-Nginx-File $rocket_file; | |
# No HSTS header added here. We suppose it's correctly added in the site configuration | |
################################################################################################### | |
# BROWSER CSS CACHE | |
# | |
location ~* \.css$ { | |
etag on; | |
gzip_vary on; | |
expires 30d; | |
} | |
################################################################################################### | |
# BROWSER JS CACHE | |
# | |
location ~* \.js$ { | |
etag on; | |
gzip_vary on; | |
expires 30d; | |
} | |
#### Imagify ######### | |
location ~* ^(/.+)\.(jpg|jpeg|jpe|png|gif)$ { | |
add_header Vary Accept; | |
etag on; | |
expires 30d; | |
if ($http_accept ~* "webp"){ | |
set $imwebp A; | |
} | |
if (-f $request_filename.webp) { | |
set $imwebp "${imwebp}B"; | |
} | |
if ($imwebp = AB) { | |
rewrite ^(.*) $1.webp; | |
} | |
} | |
################################################################################################### | |
# BROWSER MEDIA CACHE | |
# | |
location ~* \.(ico|svg|eot|otf|woff|woff2|ttf|ogg)$ { | |
etag on; | |
expires 30d; | |
} | |
location ~ / { | |
try_files $uri $uri/ /index.php ; | |
} | |
# WORDPRESS PERMALINKS | |
if (!-e $request_filename) { | |
rewrite ^(.+)$ /index.php last; | |
} | |
## Nginx cache key for Plesk | |
## $scheme$request_method$host$rocket_mobile_detection$request_uri |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment