我有一个golang webapp,我决定在它前面使用Nginx来提供静态文件,并将其用作我的webapp的反向代理。
Webapp的Dockerfile:
FROM golang:1.21.1
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download && go mod verify
COPY . ./
RUN go build -o ./bin/site ./cmd/site/main.go
CMD ["./bin/site"]
字符串
Docker Compose文件:
version: '3'
services:
nginx:
image: nginx:1.25.2
restart: always
ports:
- "80:80"
volumes:
- "./nginx.conf:/etc/nginx/nginx.conf:ro"
- "./site/assets/:/app/assets/"
site:
build: ./site
container_name: tmp-site
restart: always
volumes:
- "./site/views:/app/views"
型
Nginx配置:
events {
worker_connections 1024;
}
http {
server {
listen 80;
server_name tmp.loc www.tmp.loc;
location ~* \.(jpg|jpeg|png|gif|ico|css|js|html|svg)$ {
root /app/assets/;
expires max;
access_log off;
}
location / {
proxy_pass http://tmp-site:5555;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
型
在网页上我有两个图像,一个png和一个svg,css文件很简单,只包含background-color: lightblue
作为body标签,还有js文件,它只是控制台记录字符串“Loaded!"。在用docker compose启动我的容器后,我遇到了以下问题:
1.静态文件是随机提供的,例如png图像显示但svg没有,css样式不应用于页面,但JavaScript代码执行良好。有趣的是,根据浏览器的devtools网络选项卡,所有的静态文件都被成功获取,你可以检查其内容,是的,我试过在没有缓存的情况下重新加载页面,但没有用。这是什么魔法?
1.正如你在我的docker compose文件中看到的,我为nginx和webapp都设置了卷,在nginx的情况下,它工作得很好,每当我删除一些资产并重新加载页面而不缓存时,更改都会被应用,但当我改变模板中的文本时,它在页面上不可见,但如果我进入webapp的容器并检查模板的内容-它已经改变了,但在页面上它是不可见的,直到我用docker compose重新启动容器。这里有什么问题?
完整代码在这里-https://github.com/ivnku/tmp
1条答案
按热度按时间atmip9wb1#
Engine.Reload(true)
提供此功能:字符串
1.静态文件确实是由Nginx提供的,只是没有正确的mime类型。在nginx.conf的
http
部分包含mime类型可以解决这个问题:型