How to always redirect to index.html in Nginx Docker?
Comment the following line
# include /etc/nginx/conf.d/*.conf;
Why? Due to the line
include /etc/nginx/conf.d/*.conf;
The default.conf is loaded and your server config is ignored.
In addition, you need to include the root information in your server (which previously was provided by default.conf
How to reproduce
put the following 2 files in the same folder and execute
docker build -t test . && docker run --rm -p 8080:80 test
Dockerfile
FROM nginx:1.16.0-alpine# COPY ./build /usr/share/nginx/htmlCOPY nginx.conf /etc/nginx/nginx.confEXPOSE 80CMD ["nginx", "-g", "daemon off;"]
nginx.conf
user nginx; worker_processes auto;error_log /var/log/nginx/error.log warn; pid/var/run/nginx.pid;events { worker_connections 1024; }http { include /etc/nginx/mime.types; default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile on;#tcp_nopush on;keepalive_timeout 65;#gzip on;#include /etc/nginx/conf.d/*.conf; server { location / { root /usr/share/nginx/html; index index.html index.htm; try_files $uri $uri/ /index.html; } location ~ ^/$ { rewrite ^.*$ /index.html last; } listen 80; server_name localhost; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; }}}