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;
}
看这个文件了解更多信息。