Nginx:/ 用于静态内容和代理应用程序

Nginx:/ 用于静态内容和代理应用程序
  • http://example.com: 我的网站
  • http://example.net:代理后端

我正在尝试将 nginx 服务器块设置为静态内容服务器和反向代理。Nginx 应首先检查静态文件,然后如果不存在文件则重定向到代理应用程序。它的配置如下:

location @backend {
    proxy_pass http://example.net;
}

location / {
    try_files $uri $uri/ @backend;
}

但是,在这样的配置下,访问http://example.com会返回403 Forbidden:似乎 nginx 尝试提供静态文件夹,但找不到index.html,因此在没有代理的情况下失败example.net。然后我必须明确添加一条路由/

location = / {
    proxy_pass http://example.net;
}

这种方式http://example.com/可以正确代理http://example.net。但这样的配置感觉很奇怪:有没有更好的方式代理/

答案1

正是这一$uri/条款导致了问题出现。

如果不需要/在代表静态目录的 URI 中添加尾随,则可以使用:

location / {
    try_files $uri @backend;
}

或者,您现有的解决方案也可以使用,try_files而不是重复的proxy_pass

location = / {
    try_files $uri @backend;
}

这个文件了解更多信息。

相关内容