我正在创建一个自定义 50x.html 页面,但似乎无法从我的usr/share/nginx/html
目录中加载资产。我认为问题出在我的应用程序的反向代理的上游设置上。如何摆脱upstream: "http://127.0.0.1:1234"
仅在提供我的 nginx 静态文件时usr/share/nginx/html
(即当反向代理关闭时)但在所有其他设置中使用上游(就像我现在已经设置的配置一样)?
Nginx 错误日志:
2016/07/22 16:10:06 [error] 24000#0: *94 connect() failed (111: Connection refused) while connecting to upstream, client: <<client-ip-here>>, server: foo.com, request: "GET /img-1024.png HTTP/1.1", upstream: "http://127.0.0.1:1234/img-1024.png", host: "foo.com", referrer: "https://foo.com/logo.png"
nginx.conf:
upstream api {
server 127.0.0.1:1234;
}
...
error_page 501 502 503 /500.html;
location = /500.html {
root /usr/share/nginx/html;
}
...
我尝试过使用 try_files:try_files $uri $uri/
或以某种方式尝试,但无济于事。
谢谢
答案1
一种方法是在前端提供静态文件,如果不存在则仅代理。您可以在此服务器上部署错误页面和资源。避免前端和后端之间的目录冲突。
例如:
root /usr/share/nginx/html;
location / {
try_files $uri @proxy;
}
location @proxy {
proxy_pass http://api;
}
看这个文件了解详情。
答案2
你是对的 - nginx 无法区分错误页面资产的请求和正常请求。
您应该将资产更改为使用可以进行位置匹配的唯一路径(可能类似于/500/logo.png
),或者使用外部服务来托管资产(S3 或类似),然后从那里加载它。
对于位置匹配,它可能看起来像
location /500 {
root /usr/share/nginx/html;
}