My Nginx website config with gzip on:
server {
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /etc/letsencrypt/live/...
ssl_certificate_key /etc/letsencrypt/live/...
gzip on;
gzip_types text/plain application/xml text/css text/js text/xml application/javascript text/javascript application/json application/xml+rss;
root /home/devnote/www;
index index.php index.html;
access_log /var/log/nginx/devnote-ssl.access.log;
error_log /var/log/nginx/devnote-ssl.error.log info;
server_name ...
# Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
# Add trailing slash to */wp-admin requests.
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
# Rewrite for multi site files
rewrite /files/(.+)$ /wp-includes/ms-files.php?file=$1 last;
location ~* \.(jpg|jpeg|png|gif|css|js|ico)$ {
expires max;
}
location ~ \.php$ {
fastcgi_connect_timeout 60;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/www-devnote.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
}
OS: Ubuntu 16.04, Nginx version:
nginx -V
built with OpenSSL 1.0.2g 1 Mar 2016
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_v2_module --with-http_sub_module --with-http_xslt_module --with-stream --with-stream_ssl_module --with-mail --with-mail_ssl_module --with-threads
But I do not see Content-Encoding: gzip if I open a webpage with Developer Tools:
EDIT1
It does not compress application/javascript, but comresses text/html whille text/html is not listed in gzip_types:
actually adding/remoing gzip on; directive to the config does not have an effect.
Changing to this does not help:
gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css;
EDIT2
gzip_static on; from here does not help.
Nothing helps, it refuses to work, this does not help:
# output compression saves bandwidth
gzip on;
gzip_http_version 1.1;
gzip_vary on;
gzip_comp_level 6;
gzip_proxied any;
gzip_types text/plain text/html text/css application/json application/javascript application/x-javascript text/javascript text/xml application/xml application/rss+xml application/atom+xml application/rdf+x$
# make sure gzip does not lose large gzipped js or css files
# see http://blog.leetsoft.com/2007/07/25/nginx-gzip-ssl.html
gzip_buffers 16 8k;
# Disable gzip for certain browsers.
gzip_disable “MSIE [1-6].(?!.*SV1)”;
In my /etc/nginx/nginx.conf I have this:
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
In Chrome Dev Tools, ensure that "Disable cache" is checked when refreshing and testing.
You can also try testing on static URLs, and Nginx will return Content-Encoding: gzip when configured properly:
location ~ ^/test.js$ {
gzip_types application/javascript;
gzip on;
default_type application/javascript;
return 200 "/***** hello *****/";
}
$ curl --compressed -kIX GET https://example.com/test.js
HTTP/1.1 200 OK
Server: nginx
Date: Fri, 01 Dec 2021 00:00:00 GMT
Content-Type: application/javascript; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Content-Encoding: gzip
It is not Nginx, it is Google Chrome browser, pressing F5 does not actually reload the javascript (if Disable Cache is not checked).
Uncomment this in your /etc/nginx/nginx.conf:
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
Related
I have a Nginx server with follow parametrs `
server {
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /home/dev/main.crt;
ssl_certificate_key /home/dev/crt.private;
server_name dev;
root /home/dev/ui;
index index.html;
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_types
application/atom+xml
application/geo+json
application/javascript
application/x-javascript
application/json
application/ld+json
application/manifest+json
application/rdf+xml
application/rss+xml
application/xhtml+xml
application/xml
font/eot
font/otf
font/ttf
image/svg+xml
text/css
text/javascript
text/plain
text/xml;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:4000$request_uri;
}
location /images {
alias /home/dev/img;
expires 20d;
try_files $uri $uri/ =404;
}
}
`
And when I add
`
location ~* .(?:ico|css|js|gif|jpe?g|png|svg|woff)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
`
the server starts returning errors for all images inside /home/dev/img. Have you ever faced such problem? If Have no clue what is going on, because when I remove the code, everything works fine, and images, js files load with out any issue
I' ve got simple setup to deploy angular, springboot, mysql stack. I'am serving this through nginx, with this configuration
server {
listen 8081;
server_name _;
root /usr/share/nginx/html;
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 32;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript font/opentype image/svg+xml image/x-icon application/javascript application/x-font-ttf application/x-font-otf application/font-woff application/font-woff2 application/vnd.ms-fontobject application/octet-stream;
error_log stderr info;
access_log /dev/stdout main;
location /api {
proxy_pass http://backend:8080/;
}
location /app {
root /usr/share/nginx/html;
try_files $uri$args $uri$args/ $uri/ /index.html;
#index index.html index.htm;
}
}
app is served well, but when i try to get localhost:8081/api it ends with 404, and in logs i've see that nginx end with 404, without passing to backend. Am i doing something wrong?
I use DDEV v1.15.3 with Typo3 v9 environment. I created the Typo3 environment according to the Quick Guide with ddev config --project-type=typo3 --php-version 7.3 --docroot=public --create-docroot=true. So far everything works fine, but no SVGZ files are displayed.
A svgz file uploaded in the backend in the fileadmin is not displayed in the browser - like https://ddev-typo3v9.ddev.site:444/fileadmin/user_upload/meinen_jmd_vor_ort_finden.svgz. I get the following error message:
This page contains the following errors:
error on line 1 at column 1: Encoding error
Below is a rendering of the page up to the first error.
To enable compression with gzip in the nginx-container, I added the following lines to the file .ddev/nginx_full/nginx-site.conf
# Compression
gzip on;
gzip_proxied any;
gzip_comp_level 6; # Level of compression
gzip_http_version 1.1;
gzip_min_length 1100;
gzip_buffers 16 8k;
gzip_types
text/plain
text/css
text/xml
application/x-javascript
application/atom+xml
text/mathml
text/vnd.sun.j2me.app-descriptor
text/vnd.wap.wml
text/x-component
text/javascript
application/javascript
application/json
application/xml
application/rss+xml
font/truetype
font/opentype
application/vnd.ms-fontobject
image/svg+xml svg svgz;
gzip_static on;
gunzip on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6] \."; # Disable for IE < 6
# Add a vary header for downstream proxies to avoid sending
# cached gzipped files to IE6
gzip_vary on;
# ### Compression ###
# For CSS with compression
location ~* "\.css(\.|\.\d{10}\.)gzip$" {
rewrite ^(.+css)\.(\d+\.)gzip$ /$1.gzip;
add_header Content-Encoding gzip;
add_header Vary Accept-Encoding;
add_header Access-Control-Allow-Origin *;
gzip off;
types { text/css gzip; }
expires max;
log_not_found off;
}
# For JavaScript with compression
location ~* "\.js(\.|\.\d{10}\.)gzip$" {
rewrite ^(.+js)\.(\d+\.)gzip$ /$1.gzip;
add_header Content-Encoding gzip;
add_header Vary Accept-Encoding;
gzip off;
default_type application/javascript;
expires max;
log_not_found off;
}
# Compression for SVGZ
location ~* \.svgz$ {
add_header Content-Encoding gzip;
}
When I use ddev ssh to connect to the docker container, the nginx configuration also contains the above lines.
Thanks for your help.
Best greetings
-- Gerald
What you need in .ddev/nginx_full/nginx-site.conf is adding
location ~ \.svgz$ { add_header Content-Encoding gzip; }
I put my nginx-site.conf file at https://gist.github.com/rfay/5071ff19237ee7b83442cd8ad0311459
I used the file example.svgz from https://www.online-convert.com/file-format/svgz
This nginx issue explained what to do.
Here's what I see after 1) Uploading example.svgz with the file manager and then 2) Clicking the "show" icon.
If you think this is important to add to the default nginx configurations, please open an issue or a PR at https://github.com/drud/ddev/issues
I'm unsure as to why gzip it showing as failed on both webpagetest and gtmetrix when in my nginx config I have it enabled.
I'm currently running nginx version: nginx/1.10.1
Here is my current nginx config
# HTTPS
server {
listen 443 ssl http2 default_server;
root /home/www/youtstream;
server_name dev.yout.com
gzip_disable "msie6";
access_log off;
error_log off;
gzip_vary on;
gzip on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;
ssl on;
ssl_certificate /srv/dehydrated/certs/dev.yout.com/fullchain.pem;
ssl_certificate_key /srv/dehydrated/certs/dev.yout.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /static {
alias /home/www/youtstream/static/;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js|mp4|woff2)$ {
expires max;
}
Here is the results of webpagetest and gtmetrix
I want enable the gzip compression on my nginx server. The nginx.conf file is here:
http {
# Enable Gzip
server {
location ~* \.(?:ico|woff|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
location /api {
try_files $uri $uri/ /api/index.php;
}
location / { ##merge
gzip on;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_min_length 1100;
gzip_buffers 4 8k;
gzip_proxied any;
gzip_types
# text/html is always compressed by HttpGzipModule
text/css
text/javascript
text/xml
text/plain
text/x-component
application/javascript
application/json
application/xml
application/rss+xml
font/truetype
font/opentype
application/vnd.ms-fontobject
image/svg+xml;
gzip_static on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";
gzip_vary on;
try_files $uri $uri/ /index.php?q=$uri&$args;
}
location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { add_header "" ""; }
location ~ "^/ngx_pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon" { }
}
}
Unfortunately the gzip compression not working, Google Pagespeed and Gtmetrix not detect this.
Where can I place the gzip conf?
In The http{} server{} or location{} tag?
I already tried in the http and in the location tags too
You can put the gzip configuration anywhere, but if you want to apply it to all websites / files it is best to put it in the http section - this will then be the default for all server and location blocks. I would also "shorten" / change your config to the following:
http {
gzip on;
gzip_min_length 500;
gzip_proxied any;
gzip_comp_level 4;
gzip_types text/css text/javascript text/xml text/plain text/x-component application/javascript application/json application/xml application/rss+xml font/truetype font/opentype application/vnd.ms-fontobject image/svg+xml;
gzip_vary on;
gzip_disable "msie6";
... here come your server blocks / rest of your config
}
I use that configuration and it works fine for me - you can also test it in your browser first (for example with Firebug) before testing it with external services.
Using gzip_static only makes sense if you actually generate gzipped files for Nginx (as filename + .gz), so this has nothing to do with enabling gzip and should only be a possible second step.