# NginX Tuning & Cache #typ/Liste #skill/selfhosting you shall… - enable gzip or brotli - enable fastcgi Relevant files: ``` /etc/nginx/conf.d/{{YOUR_DOMAIN}}.conf /etc/nginx/nginx.conf ``` Test performance - <https://gtmetrix.com/> - <https://www.webpagetest.org/> ## wp super cache - tutorial: <https://easyengine.io/wordpress-nginx/tutorials/single-site/wp-super-cache/> - docs: <https://developer.wordpress.org/advanced-administration/server/web-server/nginx/#wp-super-cache-rules> in /etc/nginx/conf.d/domain.conf add in the `server{ }` blocks: ```nginx include /etc/nginx/conf.d/domain.d/super_cache.conf; ``` /etc/nginx/conf.d/domain.d/super_cache.conf: ```nginx set $cache_uri $request_uri; # POST requests and urls with a query string should always go to PHP if ($request_method = POST) { set $cache_uri 'null cache'; } if ($query_string != "") { set $cache_uri 'null cache'; } # Don't cache uris containing the following segments if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { set $cache_uri 'null cache'; } # Don't use the cache for logged in users or recent commenters if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") { set $cache_uri 'null cache'; } # Use cached or actual file if they exists, otherwise pass request to WordPress location / { try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php ; ## from wordpress config # Path to source alias /var/www/wordpress__2/; index index.php; if (!-e $request_filename) { rewrite ^(.+)$ /index.php?q=$1 last; } client_max_body_size 50m; location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; fastcgi_pass unix:/var/run/php/php8.4-fpm-wordpress__2.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $request_filename; } # Cache static files for as long as possible location ~* \.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ { expires max; log_not_found off; access_log off; } # Deny access to uploads that aren’t images, videos, music, etc. location ~* ^/wp-content/uploads/.*.(html|htm|shtml|php|js|swf)$ { deny all; } # Deny public access to wp-config.php location ~* wp-config.php { deny all; } } ## end wordpress config location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { log_not_found off; access_log off; } location ~ \.php$ { try_files $uri =404; include fastcgi_params; fastcgi_pass 127.0.0.1:9000; } ```