NGINX 加载 DOM 但对图片和资源返回 502

NGINX 加载 DOM 但对图片和资源返回 502

我正在创建一个自定义 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;
}

相关内容