And*_*oll 6 static nginx docker
刚开始时,我已经看到了这一点。但是他/她使用build,而我使用image。
我有一个docker-compose文件,该文件将我之前制作的图像拖到服务器上。
app:
restart: always
image: some-app-image:latest
Run Code Online (Sandbox Code Playgroud)
Nginx配置
location /static/ {
root /data/app/web_interface; <--- this exists in some-app-image container
}
Run Code Online (Sandbox Code Playgroud)
通常,我会将一个挂载到包含静态文件的应用程序映像上。
但是,由于应用程序容器本身具有静态文件,因此这变得多余。
Nginx容器所需要做的就是将“对等”到应用容器中并提供这些静态文件。喜欢:
location /static/ {
root http://app:8000/web_interface;
}
Run Code Online (Sandbox Code Playgroud)
要么
location /static/ {
root app/web_interface;
}
Run Code Online (Sandbox Code Playgroud)
有机会从Nginx容器提供位于另一个容器中的静态文件的机会吗?
我过去的所有想法:
从应用程序到 nginx 共享 docker 卷
您可以在应用程序中创建一个卷Dockefile,并在容器运行时复制静态文件。然后使用 与 nginx 容器共享卷volumes_from。这有点丑陋,如果你的应用程序是 nginx,则根本不起作用depends_on。我想说这绝对是不行的,因为在扩展应用程序容器时它的效果非常糟糕。
将静态文件从主机映射到 nginx 容器的想法也不是最佳的。你将有一个额外奇怪的步骤来处理它们。
独立的静态容器
构建另一个 nginx 容器,仅在不同的虚拟主机上提供静态文件。static.foo.bar。
使用 CDN
有大量的 CDN 可供您放置静态文件,并且大多数框架都有用于处理该问题的插件。我有一些项目就是这样做的。效果很好。
使用uWSGI
您可以使用 uWSGI 提供静态文件--static-map。请参阅文档。这就是我最终所做的,因为它在扩展方面既便宜又简单......而且友好。那么你可能还需要使用http-socketuWSGI 来代替 http。
这是一个很晚的答案,但添加它以防其他人发现它。
也许您可以利用服务器缓存,以便 NGINX 在对被代理的应用程序发出第一个请求后,可以有效地从其文件系统提供静态文件。
您可以将非活动标志设置为很长一段时间,因为资产是静态的。
基于上述指南的基本示例:
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=30d use_temp_path=off;
server {
...
location /static {
proxy_cache my_cache;
proxy_pass http://app:8000/static; # <--- wherever static files are on app server
}
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3910 次 |
| 最近记录: |