【问题标题】:Serving NGINX Docker Container on NGINX Reverse Proxy how to redirect all routes to index.html在 NGINX 反向代理上服务 NGINX Docker 容器如何将所有路由重定向到 index.html
【发布时间】:2026-02-20 21:40:01
【问题描述】:

我有一个带有静态站点的简单 NGINX Docker 容器。 Dockerfile 看起来像这样:

FROM nginx
COPY . /usr/share/nginx/html

现在这个容器正在由我们的反向代理提供服务,其配置如下所示:

    server {
            listen 80;
            server_name domain.com;
            return 301 https://$host$request_uri;
    }
    
  #SSL stuff  
    
    
    server {
            listen 443;
            server_name domain.com;
    
            location / {
                    proxy_buffers           16 8K;
                    proxy_set_header        Host $host;
                    proxy_set_header        X-Real-IP $remote_addr;
                    proxy_pass              IP:PORT of container;
                    try_files $uri $uri/  base.html;
            }
    }

我尝试使用 try_files 将每条路由重定向到有效的 index.html 但由于某种原因我执行 /something/somthing 它不起作用,也没有加载 css。

我只需要所有请求都到容器的index.html

【问题讨论】:

    标签: docker nginx


    【解决方案1】:

    尝试添加一个新的location 块来服务静态文件,如果失败,它将回退到指定位置nodeapp

    注意:SSL 内容应该在服务器块内部而不是外部。

    server {
        listen 80;
        server_name domain.com;
        return 301 https://$host$request_uri;
    }
    
    server {
        listen 443;
        server_name domain.com;
    
        # BTW, ssl stuff should be here
    
        location / {
            root /path/to/your/static/files;
            try_files $uri @nodeapp;
        }
    
        location @nodeapp {
            proxy_buffers           16 8K;
            proxy_set_header        Host $host;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_pass              IP:PORT of container;
        }
    }
    

    【讨论】:

    • 我会试试这个,但有什么办法可以将网站上的文件与反向代理服务器分开放置在单独的服务器上
    • 是的,您只需要代理到分离的静态文件服务器。因此,我们不使用try_files,而是使用proxy_pass,并将404回退到@nodeapp,但我不推荐这种方式,一个好的做法是在分离的服务器中为子域创建一个新的服务器块,静态。 example.com 将负责提供您的静态文件。