【发布时间】:2014-04-16 11:30:28
【问题描述】:
说明:
我想实现一个服务于静态文件的 http 服务器(使用 nginx)。
如果请求的文件不存在,nginx 将向服务(REST API)发送请求,该服务将创建文件并返回其路径。
之后,我希望 nginx 返回创建的静态文件。
问题:
创建文件后返回文件的最佳方式是什么?
到目前为止,我设法通过更改 REST API 以返回创建的文件路径以及 302 状态代码和位置标头作为重定向来做到这一点,但我不确定这是否是一件好事.是吗?
有 nginx 端的解决方案吗?我必须创建自定义模块吗?
配置文件:
http {
server {
listen 80;
location /files {
try_files $uri @rest;
}
location @rest {
rewrite ^(.*)$ /api/ break;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://localhost:8080;
}
}
}
【问题讨论】:
-
听起来你想要的实际上是 REST API 前面的缓存,这是 ngx_http_proxy_module 已经可以自己处理的东西......
-
@DaveRandom 我不确定缓存是否是答案。创建文件后,它应该可用作以下请求的静态内容(直接由 nginx 提供服务)。缓存只能提供临时内容吧?
-
如果您在 REST API 中设置标头以使文件缓存 10 年,那么 Nginx 将有效地静态服务该文件 10 年。这取决于您的目标是什么——如果您只是想避免在 API 中多次执行昂贵的任务,那么您真正需要的只是缓存。如果您确实特别希望文件存在(例如,因为其他一些本地进程需要它们),那么我想您唯一能做的就是创建一个自定义模块。下面的解决方案并不理想,因为您需要调整 REST API 响应。
标签: http rest nginx reverse-proxy