Support for Nginx?
-
here you can read it more easily
# Server globals user www-data; worker_processes auto; worker_rlimit_nofile 65535; error_log /var/log/nginx/error.log; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; # Worker config events { worker_connections 1024; use epoll; multi_accept on; } http { # Main settings sendfile on; tcp_nopush on; tcp_nodelay on; client_header_timeout 180s; client_body_timeout 180s; client_header_buffer_size 2k; client_body_buffer_size 256k; client_max_body_size 256m; large_client_header_buffers 4 8k; send_timeout 60s; keepalive_timeout 30s; keepalive_requests 100000; reset_timedout_connection on; server_tokens off; server_name_in_redirect off; server_names_hash_max_size 512; server_names_hash_bucket_size 512; charset utf-8; # FastCGI settings fastcgi_buffers 8 256k; fastcgi_buffer_size 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_connect_timeout 30s; fastcgi_read_timeout 300s; fastcgi_send_timeout 180s; fastcgi_cache_lock on; fastcgi_cache_lock_timeout 5s; fastcgi_cache_background_update on; fastcgi_cache_revalidate on; # Proxy settings proxy_redirect off; 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_pass_header Set-Cookie; proxy_buffers 32 4k; proxy_buffer_size 8k; proxy_connect_timeout 30s; proxy_read_timeout 300s; proxy_send_timeout 180s; # Log format log_format main '$remote_addr - $remote_user [$time_local] $request ' '"$status" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; log_format bytes '$body_bytes_sent'; log_not_found off; access_log off; # Mime settings include /etc/nginx/mime.types; default_type application/octet-stream; # Compression gzip on; gzip_static on; gzip_vary on; gzip_comp_level 6; gzip_min_length 1024; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css text/javascript text/js text/xml application/json application/javascript application/x-javascript application/xml application/xml+rss application/x-font-ttf image/svg+xml font/opentype; gzip_proxied any; gzip_disable "MSIE [1-6]\."; # Cloudflare ips include /etc/nginx/conf.d/cloudflare.inc; # SSL PCI compliance ssl_session_cache shared:SSL:20m; ssl_session_timeout 60m; ssl_buffer_size 1400; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS"; ssl_dhparam /etc/ssl/dhparam.pem; ssl_ecdh_curve secp384r1; ssl_session_tickets off; resolver 62.149.132.4 62.149.128.4 valid=300s ipv6=off; resolver_timeout 5s; # Error pages error_page 403 /error/404.html; error_page 404 /error/404.html; error_page 410 /error/410.html; error_page 500 501 502 503 504 505 /error/50x.html; # Proxy cache proxy_cache_path /var/cache/nginx levels=2 keys_zone=cache:10m inactive=60m max_size=1024m; proxy_cache_key "$scheme$request_method$host$request_uri"; proxy_temp_path /var/cache/nginx/temp; proxy_ignore_headers Expires Cache-Control; proxy_cache_use_stale error timeout invalid_header http_502; proxy_cache_valid any 1d; # FastCGI cache fastcgi_cache_path /var/cache/nginx/micro levels=1:2 keys_zone=microcache:10m max_size=1024m inactive=30m; fastcgi_cache_key "$scheme$request_method$host$request_uri"; fastcgi_cache_methods GET HEAD; fastcgi_cache_use_stale updating error timeout invalid_header http_500 http_503; fastcgi_ignore_headers Cache-Control Expires Set-Cookie; add_header X-FastCGI-Cache $upstream_cache_status; # Cache bypass map $http_cookie $no_cache { default 0; ~SESS 1; ~wordpress_logged_in 1; } # ACCEPT WEBP IMAGE FORMAT map $http_accept $webp_suffix { default ""; "~*webp" ".webp"; } # File cache (static assets) open_file_cache max=10000 inactive=30s; open_file_cache_valid 60s; open_file_cache_min_uses 2; open_file_cache_errors off; # Wildcard include include /etc/nginx/conf.d/*.conf; include /etc/nginx/conf.d/domains/*.conf; }
Hi @stefacchio
I also have Hestiacp and it is working for me.
This is my /etc/nginx/nginx.conf
# Server globals user www-data; worker_processes auto; worker_rlimit_nofile 65535; error_log /var/log/nginx/error.log; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; # Worker config events { worker_connections 1024; use epoll; multi_accept on; } http { ## Webp + Avif Plugin config map $http_accept $webp { default ".nonexisting"; "~*image/webp" ".webp"; } map $http_accept $png { default ".png"; "~*image/webp" ""; } map $http_accept $avif { default ".nonexisting"; "~*image/avif" ".avif"; } ### end plugin webp + avif config # Main settings sendfile on; tcp_nopush on; tcp_nodelay on; client_header_timeout 180s; client_body_timeout 180s; client_header_buffer_size 2k; client_body_buffer_size 256k; client_max_body_size 256m; large_client_header_buffers 4 8k; send_timeout 60s; keepalive_timeout 30s; keepalive_requests 100000; reset_timedout_connection on; server_tokens off; server_name_in_redirect off; server_names_hash_max_size 512; server_names_hash_bucket_size 512; charset utf-8; # FastCGI settings fastcgi_buffers 8 256k; fastcgi_buffer_size 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_connect_timeout 30s; fastcgi_read_timeout 300s; fastcgi_send_timeout 180s; fastcgi_cache_lock on; fastcgi_cache_lock_timeout 5s; fastcgi_cache_background_update on; fastcgi_cache_revalidate on; # Proxy settings proxy_redirect off; 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_pass_header Set-Cookie; proxy_buffers 32 4k; proxy_buffer_size 8k; proxy_connect_timeout 30s; proxy_read_timeout 300s; proxy_send_timeout 180s; # Log format log_format main '$remote_addr - $remote_user [$time_local] $request ' '"$status" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; log_format bytes '$body_bytes_sent'; log_not_found off; access_log off; # Mime settings include /etc/nginx/mime.types; default_type application/octet-stream; # Compression gzip on; gzip_static on; gzip_vary on; gzip_comp_level 6; gzip_min_length 1024; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css text/javascript text/js text/xml application/json application/javascript application/x-javascript application/xml application/xml+rss application/x-font-ttf image/svg+xml font/opentype; gzip_proxied any; gzip_disable "MSIE [1-6]\."; # Cloudflare ips include /etc/nginx/conf.d/cloudflare.inc; # SSL PCI compliance ssl_session_cache shared:SSL:20m; ssl_session_timeout 60m; ssl_buffer_size 1400; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS"; ssl_dhparam /etc/ssl/dhparam.pem; ssl_ecdh_curve secp384r1; ssl_session_tickets off; resolver 127.0.0.53 valid=300s ipv6=off; resolver_timeout 5s; # Error pages error_page 403 /error/404.html; error_page 404 /error/404.html; error_page 410 /error/410.html; error_page 500 501 502 503 504 505 /error/50x.html; # Proxy cache proxy_cache_path /var/cache/nginx levels=2 keys_zone=cache:10m inactive=60m max_size=1024m; proxy_cache_key "$scheme$request_method$host$request_uri"; proxy_temp_path /var/cache/nginx/temp; proxy_ignore_headers Expires Cache-Control; proxy_cache_use_stale error timeout invalid_header http_502; proxy_cache_valid any 1d; # FastCGI cache fastcgi_cache_path /var/cache/nginx/micro levels=1:2 keys_zone=microcache:10m max_size=1024m inactive=30m; fastcgi_cache_key "$scheme$request_method$host$request_uri"; fastcgi_cache_methods GET HEAD; fastcgi_cache_use_stale updating error timeout invalid_header http_500 http_503; fastcgi_ignore_headers Cache-Control Expires Set-Cookie; add_header X-FastCGI-Cache $upstream_cache_status; # Cache bypass map $http_cookie $no_cache { default 0; ~SESS 1; ~wordpress_logged_in 1; } # File cache (static assets) open_file_cache max=10000 inactive=30s; open_file_cache_valid 60s; open_file_cache_min_uses 2; open_file_cache_errors off; # Wildcard include include /etc/nginx/conf.d/*.conf; include /etc/nginx/conf.d/domains/*.conf; }
And this is my modify template….wordpress_b_Webpavif.stpl
#=========================================================================# # Default Web Domain Template # # DO NOT MODIFY THIS FILE! CHANGES WILL BE LOST WHEN REBUILDING DOMAINS # # https://docs.hestiacp.com/admin_docs/web.html#how-do-web-templates-work # #=========================================================================# server { listen %ip%:%web_ssl_port% ssl http2; server_name %domain_idn% %alias_idn%; root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; ssl_stapling on; ssl_stapling_verify on; include %home%/%user%/conf/web/%domain%/nginx.hsts.conf*; location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } location ~ /\.(?!well-known\/) { deny all; return 404; } ## Plugin Webp + Avif location ~* wp\-content/(?!cache/fastware\-webpavif).+\.(jpe?g|png|gif|bmp|webp)$ { rewrite /wp\-content/(.+)$ /wp-content/cache/fastware-webpavif/$1; } location ~* cache/fastware\-webpavif.+\.(jpe?g|png|gif|bmp)$ { add_header Vary Accept; try_files $uri.pref$webp $uri.pref$avif $uri$webp $uri$avif $uri /?fw-webp-avif-ondemand=all; } location ~* cache/fastware\-webpavif.+\.webp$ { add_header Vary Accept; try_files $uri$png /?fw-webp-avif-ondemand=png; } ## End pluglin Webp +Avif location / { try_files $uri $uri/ /index.php?$args; ## location ~* ^.+\.(ogg|ogv|svg|svgz|swf|eot|otf|woff|woff2|mov|mp3|mp4|webm|flv|ttf|rss|atom|jpg|jpeg|gif|png|webp|ico|bmp|mid|midi|wav|rtf|css|js|jar)$ { location ~* ^.+\.(ogg|ogv|svg|svgz|swf|eot|otf|woff|woff2|mov|mp3|mp4|webm|flv|ttf|rss|atom|ico|bmp|mid|midi|wav|rtf|css|js|jar)$ { expires 30d; fastcgi_hide_header "Set-Cookie"; } location ~* /(?:uploads|files)/.*.php$ { deny all; return 404; } location ~ [^/]\.php(/|$) { fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; try_files $uri =404; fastcgi_pass %backend_lsnr%; fastcgi_index index.php; include /etc/nginx/fastcgi_params; include %home%/%user%/conf/web/%domain%/nginx.fastcgi_cache.conf*; if ($request_uri ~* "/wp-admin/|/wp-json/|wp-.*.php|xmlrpc.php|index.php|/store.*|/cart.*|/my-account.*|/checkout.*") { set $no_cache 1; } if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in|woocommerce_items_in_cart|woocommerce_cart_hash|PHPSESSID") { set $no_cache 1; } } } location /error/ { alias %home%/%user%/web/%domain%/document_errors/; } location /vstats/ { alias %home%/%user%/web/%domain%/stats/; include %home%/%user%/web/%domain%/stats/auth.conf*; } proxy_hide_header Upgrade; include /etc/nginx/conf.d/phpmyadmin.inc*; include /etc/nginx/conf.d/phppgadmin.inc*; include %home%/%user%/conf/web/%domain%/nginx.ssl.conf_*; }
It has two mod’s sections;
## Plugin Webp + Avif
location ~* wp\-content/(?!cache/fastware\-webpavif).+\.(jpe?g|png|gif|bmp|webp)$ { rewrite /wp\-content/(.+)$ /wp-content/cache/fastware-webpavif/$1; }
location ~* cache/fastware\-webpavif.+\.(jpe?g|png|gif|bmp)$ { add_header Vary Accept; try_files $uri.pref$webp $uri.pref$avif $uri$webp $uri$avif $uri /?fw-webp-avif-ondemand=all; }
location ~* cache/fastware\-webpavif.+\.webp$ { add_header Vary Accept; try_files $uri$png /?fw-webp-avif-ondemand=png; }
## End pluglin Webp +Avif
And after this, I change the line
location ~* ^.+.(ogg|ogv|svg|svgz|swf|eot|otf|woff|woff2|mov|mp3|mp4|webm|flv|ttf|rss|atom|jpg|jpeg|gif|png|webp|ico|bmp|mid|midi|wav|rtf|css|js|jar)$ {
With this other (Just remove the “|jpg|jpeg|gif|png|webp” and set a new header).
location ~* ^.+.(ogg|ogv|svg|svgz|swf|eot|otf|woff|woff2|mov|mp3|mp4|webm|flv|ttf|rss|atom|ico|bmp|mid|midi|wav|rtf|css|js|jar)$ {
expires 30d;
fastcgi_hide_header “Set-Cookie”;
}The template “wordpress_b_Webpavif.tpl” is this one, but I think it it not used (has a 301 redirect to https, in my case).
#=========================================================================# # Default Web Domain Template # # DO NOT MODIFY THIS FILE! CHANGES WILL BE LOST WHEN REBUILDING DOMAINS # # https://docs.hestiacp.com/admin_docs/web.html#how-do-web-templates-work # #=========================================================================# server { listen %ip%:%web_port%; server_name %domain_idn% %alias_idn%; root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; include %home%/%user%/conf/web/%domain%/nginx.forcessl.conf*; location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } location ~ /\.(?!well-known\/) { deny all; return 404; } ## Plugin Webp + Avif location ~* wp\-content/(?!cache/fastware\-webpavif).+\.(jpe?g|png|gif|bmp|webp)$ { rewrite /wp\-content/(.+)$ /wp-content/cache/fastware-webpavif/$1; } location ~* cache/fastware\-webpavif.+\.(jpe?g|png|gif|bmp)$ { add_header Vary Accept; try_files $uri.pref$webp $uri.pref$avif $uri$webp $uri$avif $uri /?fw-webp-avif-ondemand=all; } location ~* cache/fastware\-webpavif.+\.webp$ { add_header Vary Accept; try_files $uri$png /?fw-webp-avif-ondemand=png; } ## End pluglin Webp +Avif location / { try_files $uri $uri/ /index.php?$args; location ~* ^.+\.(ogg|ogv|svg|svgz|swf|eot|otf|woff|woff2|mov|mp3|mp4|webm|flv|ttf|rss|atom|jpg|jpeg|gif|png|webp|ico|bmp|mid|midi|wav|rtf|css|js|jar)$ { expires 30d; fastcgi_hide_header "Set-Cookie"; } location ~* /(?:uploads|files)/.*.php$ { deny all; return 404; } location ~ [^/]\.php(/|$) { fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; try_files $uri =404; fastcgi_pass %backend_lsnr%; fastcgi_index index.php; include /etc/nginx/fastcgi_params; include %home%/%user%/conf/web/%domain%/nginx.fastcgi_cache.conf*; if ($request_uri ~* "/wp-admin/|/wp-json/|wp-.*.php|xmlrpc.php|index.php|/store.*|/cart.*|/my-account.*|/checkout.*") { set $no_cache 1; } if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in|woocommerce_items_in_cart|woocommerce_cart_hash|PHPSESSID") { set $no_cache 1; } } } location /error/ { alias %home%/%user%/web/%domain%/document_errors/; } location /vstats/ { alias %home%/%user%/web/%domain%/stats/; include %home%/%user%/web/%domain%/stats/auth.conf*; } include /etc/nginx/conf.d/phpmyadmin.inc*; include /etc/nginx/conf.d/phppgadmin.inc*; include %home%/%user%/conf/web/%domain%/nginx.conf_*; }
I hope this can help you.
- This reply was modified 1 year, 4 months ago by tlozano.
Wonderful! now it works!
On the installation istruction there isn’t this step:And after this, I change the line
location ~* ^.+.(ogg|ogv|svg|svgz|swf|eot|otf|woff|woff2|mov|mp3|mp4|webm|flv|ttf|rss|atom|jpg|jpeg|gif|png|webp|ico|bmp|mid|midi|wav|rtf|css|js|jar)$ {
With this other (Just remove the “|jpg|jpeg|gif|png|webp” and set a new header).
location ~* ^.+.(ogg|ogv|svg|svgz|swf|eot|otf|woff|woff2|mov|mp3|mp4|webm|flv|ttf|rss|atom|ico|bmp|mid|midi|wav|rtf|css|js|jar)$ {
expires 30d;
fastcgi_hide_header “Set-Cookie”;
}Also I write edit exactly in your position inside line code.
Now how does the plugin work? how often it send a pull request? is it syncronized with wp cron?
Thank you much!
mmmh…Plugin works.. but when I load the webpage it serve always jpeg file…
Converted images 7 WebP images 1 AVIF images 2 PNG images Skipped images 0 WebP images 5 AVIF images Images are skipped when the converted size > original size OR when the conversion has failed. Queued images 5 images Cache size 0 MB
- This reply was modified 1 year, 4 months ago by Stefano.
@stefacchio How are you test it?
The served image always is the original name and extension, but the type and size must be changed.
You have to check it with development tools (Herramientas para desarrolladores en Espa?ol –> Control + MAyusculas + I)
Control+Shift+I
?(Windows, Linux, Chrome OS) then open the “Network” tab and then select “IMG”. Select “Disable cache” for testing. Do a web refresh (F5) and show the file type of images. It shoyld be jpeg, webp or Avif but the name can be .jpg. Sometink like this:Perfect, it works fine! Thanks for the explanation.
I have the last problem (I hope ?? ).. Plugin convert image only to webp.
AVIF it supported (there is the green check) but if I check avif file on server, there are all at 0 bytes… why?
I use hestiaCP on Debian 11.
Thanks- This reply was modified 1 year, 4 months ago by Stefano.
Pardon, my mistake! AVIF files to 0 byte have extension .skip so it’s correct.
Is there a log file to understand why the conversion fail?
Thanks
Yes, I hink this is correct. This is because the Avif file is bigger than the original file. You can try to down the target quality to… ?85?… And try it.
Ok, it’s already to 80%.. maybe is there some error on conversion?
Hi,
@tlozano thank you for your great support!
I’ll extend the plugin documentation for nginx.
>>Ok, it’s already to 80%.. maybe is there some error on conversion?
Your can try 30% to see when you want more AVIF conversions.
Whether AVIF format is smaller heavily depends on the images. With the default quality (100%) setting, the original format is still smaller in most cases, so the plugin still serves the original (or webp) format. But you can vary with the quality settings. In my experience, 50% is still a good balance between quality and size for AVIF (not for WebP).- This reply was modified 1 year, 4 months ago by Fastware.
I’m also having issues with “WebP/AVIF image request failed” in nginx and Hestia. Luckly, we all can compar config with one that @tlozano posted, and in my case they look exactly the same. Yes, in Hestia panel I’ve enabled correct template (stpl) for specific domain.
The strangest thing is that it worked fine (image below) until a week ago, when I updated Hestia to 1.8.x. Later I rechecked and added nginx conf needed for this plugin to work, but it simple didn’t work after that.
I’ll try with removing and installing plugin again, however, there’s a small chance that will fix it.
Any other advice that I can try?
- The topic ‘Support for Nginx?’ is closed to new replies.