Hey reader,
Today I wanted to share with you an issue I recently resolved regarding configuring server blocks on a nginx web server.
Problem:
I wanted all of my non-www application url requests browsing to my custom index.html page. So I used the following server blocks configuration:
server { root /var/www/domain_name.docker.hub.registry/html; index index.html; listen 80; listen 443 ssl; server_name domain_name.docker.hub.registry domain_name.docker.hub.registry.domain_nameetc.com; location / { try_files $uri $uri/ =404; } #listen 443 ssl; ssl_certificate /etc/letsencrypt/live/domain_name.docker.hub.registry.domain_nameetc.com/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/domain_name.docker.hub.registry.domain_nameetc.com/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot return 301 https://www.domain_name.docker.hub.registry.domain_nameetc.com$request_uri; } server { root /var/www/domain_name.docker.hub.registry/html; index index.html index.htm; # listen to the standard http port 80 #listen 80; listen 443 ssl; server_name domain_name.docker.hub.registry www.domain_name.docker.hub.registry.domain_nameetc.com; location / { try_files $uri $uri/ =404; } ssl_certificate /etc/letsencrypt/live/www.domain_name.docker.hub.registry.domain_nameetc.com/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/www.domain_name.docker.hub.registry.domain_nameetc.com/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot }
As a result using the specific application urls and current server block configuration, produced the following results:
https://domain_name.docker.hub.registry.domain_nameetc.com -> browsed to the index.nginx-debian.html
https://www.domain_name.docker.hub.registiry.domain_nameetc.com -> browsed to the index.html page.
http://domain_name.docker.hub.registry.domain_nameetc.com -> browsed to the index.nginx-debian.html page
http://www.domain_name.docker.hub.registiry.domain_nameetc.com -> browsed to the index.html page.
Solution:
My solution was to create a server block for each application url. See below
server { root /var/www/<domain>.docker.hub.registry.<domain>.com/html; index index.html; server_name <domain>.docker.hub.registry.<domain>.com; listen 80; listen [::]:80; location / { try_files $uri $uri/ =404; } } server { root /var/www/<domain>.docker.hub.registry.<domain>.com/html; index index.html; server_name www.<domain>.docker.hub.registry.<domain>com; listen 80; listen [::]:80; location / { try_files $uri $uri/ =404; } } server { root /var/www/<domain>.docker.hub.registry.<domain>.com/html; index index.html; server_name <domain>.docker.hub.registry.<domain>.com; listen 443 ssl; listen [::]:443 ssl; ssl_certificate /etc/letsencrypt/live/<domain>.docker.hub.registry.<domain>.com/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/<domain>.docker.hub.registry.<domain>.com/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot location / { try_files $uri $uri/ =404; } } server { root /var/www/<domain>.docker.hub.registry.<domain>.com/html; index index.html; server_name www.<domain>.docker.hub.registry.<domain>.com; listen 443 ssl; listen [::]:443 ssl; ssl_certificate /etc/letsencrypt/live/<domain>.docker.hub.registry.<domain>.com/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/<domain>.docker.hub.registry.<domain>.com/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot location / { try_files $uri $uri/ =404; } }
Now we have all application urls now browsing to the index.html page that I wanted.
That's it. Since I'm new to nginx and configuring server blocks, please provide your feedback with any improvements.
The original question was posted on stackoverflow.
Thanks for reading :)
Top comments (0)