我在docker中有两个服务后端和前端(nodejs),它们通过nginx(也在docker中)处理。
Nginx配置:
server {
listen 80;
listen 443 http2;
set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;
server_name example.com;
location /backend/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://backend-admin:2082/;
}
location ^~ / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://frontend-admin:8080;
}
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|pdf|ppt|txt|bmp|rtf|ttf|svg|js)$ {
expires 2d;
add_header Cache-Control public;
}
}
我使用nginx location/backend/
将所有请求代理给示例。com/backend/
到
示例。com:2082/
节点正在侦听。
主要问题是我的静态文件proxy_pass
backend-admin: 2082
nginx不想处理。
我的后端服务中有上载图像的路径
/uploads/events/1。jpg
如果我像http://example.com:2082/uploads/events/1.jpg
它可以工作。但是通过nginx它不会http://example.com/backend/uploads/events/1.jpg
。我认为在这里,nginx事件并没有试图通过proxy_pass访问image。
有什么想法吗?
静态文件的reqular表达式优先于/backend/
,因为它的匹配时间更长。位置~*^.\。(jpg | jpeg | gif | png | ico | css | pdf | ppt | txt | bmp | rtf | ttf | svg | js)$
表示匹配以所列后缀结尾的任何查询。是正则表达式的贪婪部分,它将匹配在到达后缀之前写入的任何内容。因此,任何具有列表中后缀的内容都将作为最长匹配进行匹配,并发送到本地文件读取,而不是将请求发送到“/backend/”。
有多种方法可以解决这个问题,这取决于你实际上想要实现什么。一种方法是为容器提供的静态文件添加另一个位置,如下所示:
location ~* ^/backend/.+\.(jpg|jpeg|gif|png|ico|css|pdf|ppt|txt|bmp|rtf|ttf|svg|js)$ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
rewrite ^/backend/(.*) /backend/$1 break;
proxy_pass http://backend-admin:2082;
expires 2d;
add_header Cache-Control public;
}
此修复程序将允许您仍缓存本地文件,但将所有具有/backend/
前缀的其他文件转移到容器中。
为了更好地理解匹配是如何完成的,您可以使用一些在线匹配模拟器。这是我使用的Nginx位置匹配测试仪
django.contrib.staticfiles 从你的应用(和其他你指定的地方)收集所有静态文件到同一个地方,这样产品就能很容易的被维护 看看这里 对于静态文件的应用和一些用法示例的介绍,请参阅管理静态文件(CSS,图像) . 如果你想知道如何部署静态文件, 请参阅 部署静态文件. 设置 查看staticfiles settings了解更多设置细节 STATIC_ROOT STATIC_UR
前面我们介绍了如何输出静态页面,但是我们的网页往往包含了很多的静态文件,包括图片、JS、CSS 等,刚才创建的应用里面就创建了如下目录: ├── static │ ├── css │ ├── img │ └── js beego 默认注册了 static 目录为静态处理的目录,注册样式:URL 前缀和映射的目录(在/main.go文件中beego.Run()之
我正在使用Spring-MVC4开发一个Web应用程序 ,我将我的调度程序服务器配置为处理所有对“/”的请求,如下所示(web.xml): 我的目录结构如下图所示:项目目录结构 我的jsp文件如下: 最后我的webapp配置是: 当我将我的http请求发送到服务器时,我可以在/资源/公共/菜单中加载jsp文件.jsp但我无法处理css文件!当我发送一个http请求来获取像这样的css文件 http
我的PHP Docker容器没有处理文件,而是返回了源代码。 正在返回而不是执行以下内容: 的输出,以显示两个my容器都在各自的端口上运行和侦听: Virtualhost配置,请注意将PHP传递到容器的指令。 Apache日志,显示文件由Apache提供服务。 编辑 我试图在不同的容器中运行Apache、PHP和MariaDB。我首先运行Apache,现在,我试图附加PHP。 最后,我想添加Nex
本文向大家介绍docker容器中布置静态网站的实现,包括了docker容器中布置静态网站的实现的使用技巧和注意事项,需要的朋友参考一下 服务器布置 这里推荐使用云服务器(阿里云、华为云、腾讯云)可以免费使用几天。在我们买了服务器后会遇到如下问题: 本地电脑ping服务器主机发现ping不通,请求超时 我们需要在管理服务器的界面找到安全组那一栏,然后在安全组出入都要加入icmp这个,建议直接一键添加
我现在尝试在启动Docker容器时分配静态IP172.17.0.1。 我使用端口2122作为该容器的ssh端口,以便让该容器侦听端口2122。 这个命令将运行一个带有随机IP的Docker容器,如172.17.0.5,但我需要为容器分配一个特定的IP。 下面的shell脚本是我在高级网络设置中引用Docker文档的部分。 此shell脚本将分配一个静态IP 172.17.0.1并链接到world