Since I added the gzip block to my NGINX conf, the page returns a 404 for most static files (.js, .css, .png etc.) and was blocked because of a disallowed MIME type (“text/html”) for the vue build files while in server:80 block.
The files do have content-encoding: gzip response header
nginx.conf
server {
listen 80;
server_name *.domain.dev;
rewrite ^ https://$host$request_uri permanent;
}
server {
listen [::]:443 ssl http2;
listen 443 ssl http2;
server_name *.domain.dev;
location /static {
gzip on;
gzip_min_length 256;
gzip_buffers 4 32k;
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;
gzip_vary on;
gzip_comp_level 6;
alias /home/ubuntu/code/domain_test/static;
expires 1y;
}
//... rest of config
}
If I move the GZIP block to the server:443 config, it works. Is the gzip block supposed to be in the ssl block, because of the redirect?
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 am using the nginxinc/nginx-unprivileged:1.21-alpine Docker Image.
My config file looks like this:
server {
listen ${LISTEN_PORT};
server_name example.de www.example.de;
return 301 https://example.de$request_uri;
}
server {
listen ${LISTEN_PORT_HTTPS};
server_name www.example.de;
ssl_certificate *****;
ssl_certificate_key *****;
return 301 https://example.de$request_uri;
}
server {
server_name example.de;
listen ${LISTEN_PORT_HTTPS} ssl http2;
ssl_certificate *****;
ssl_certificate_key *****;
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css text/xml text/javascript application/javascript application/x-javascript application/xml;
gzip_disable "MSIE [1-6]\.";
location /static {
alias /vol/static;
add_header Cache-Control "public,max-age=31536000,immutable";
}
location / {
uwsgi_pass ${APP_HOST}:${APP_PORT};
include /etc/nginx/uwsgi_params;
client_max_body_size 10M;
}
}
The problem I have is that http and www redirect to https non-www but no matter what url it always redirects to the home page. it looks like $request_uri is empty
EDIT: Got it working with: rewrite (.*)$ https://example.de$1 permanent; but as far as im concerned it's not best practice
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?
This is my first sites-enabled file
server {
listen 80;
listen 443 ssl;
server_name www.cobanextwithzone.test;
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
text/plain
text/css
application/json
application/x-javascript
text/xml
application/xml
application/xml+rss
text/javascript
application/javascript
application/vnd.ms-fontobject
application/x-font-ttf
application/font-woff
font/opentype
image/svg+xml
image/x-icon;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
location / {
proxy_set_header Host $http_host;
proxy_pass http://localhost:3000;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
and this is the second
server {
listen 80;
listen 443 ssl;
server_name www.cobanextwithzone.test;
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
text/plain
text/css
application/json
application/x-javascript
text/xml
application/xml
application/xml+rss
text/javascript
application/javascript
application/vnd.ms-fontobject
application/x-font-ttf
application/font-woff
font/opentype
image/svg+xml
image/x-icon;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
location / {
proxy_set_header Host $http_host;
proxy_pass http://localhost:3000;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
those to file are using same server_name, because I wanted to do microfrontends, so the second app will be served on www.cobanextwithzone.test/thesecondapp/
the problem is when sudo service nginx restart or sudo service nginx reload it shows this on sudo nginx -t
nginx: [warn] conflicting server name "www.cobanextwithzone.test" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "www.cobanextwithzone.test" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "www.cobanextwithzone.test" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "www.cobanextwithzone.test" on 0.0.0.0:443, ignored
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Anyone know how to serve 2 app on same server_name?
Thanks!
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.