如何将Digital Ocean主机中Golang项目的图片路径映射到网站?
解决静态图片访问问题
不需要连接Spaces Object Storage,本地目录就能搞定,问题出在Caddy的配置上,直接按下面的方法调整:
之前配置的问题
- 路径错误:你写的
root * /assets是绝对路径,但实际assets目录在用户家目录下(比如/home/x/assets),Caddy无法识别这个相对用户目录的路径,必须用完整的绝对路径。 - 请求处理顺序错了:原配置里
reverse_proxy放在前面,所有请求会先转发给Go服务,后面的file_server根本不会生效——而你的Go服务里没有这些动态上传的图片,自然访问失败。 - 冗余配置:单独写route指定单个文件完全没必要,直接匹配路径前缀即可覆盖所有同类请求。
正确的Caddy配置
替换成下面的配置,注意把/home/x/assets改成你实际的assets目录绝对路径(可以在assets目录下执行pwd获取完整路径):
x.ru { # 优先处理静态图片请求 handle_path /static/img/* { root * /home/x/assets file_server } # 其余请求转发给Go服务 reverse_proxy localhost:4000 }
配置说明
handle_path会匹配所有以/static/img/开头的请求,自动去掉前缀后去assets目录查找文件(比如请求/static/img/catalog/2/1708864387803037959.webp,Caddy会去/home/x/assets/static/img/catalog/2/1708864387803037959.webp读取,完全匹配你的文件结构)。- 非静态图片的请求(比如后台管理、接口调用)仍会正常转发给Go服务,不影响原有功能。
改完配置后重启Caddy服务(比如执行systemctl restart caddy),再访问图片路径就能正常打开了。
内容的提问来源于stack exchange,提问作者Eugene Dark
相关产品推荐
相关产品推荐

