在我的 dockerized 应用程序中使用 nginx 服务时,我遇到了静态文件问题。
堆栈:Ruby + Hanami + Postgres + Puma + nginx
静态文件:图片、字体、js文件和css。
我希望 nginx 提供静态文件而不是 Hanami。我在 hanami_project/public 文件夹中准备好所有静态文件,结构如下:
hanami_project/public
-general asset
-general asset 1
- hanami_app
- hanami_app_assets
- hanami_app_2
- hanami_app_2 assets
hanami_project/public 文件夹是 nginx 服务的卷。
这是我的 docker_compose.yml:
version: '3'
services:
postgres:
image: postgres
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
ports:
- 5432:5432
volumes:
- postgres:/var/lib/postgresql/data
web:
build: .
command: >
bash -c "bundle exec hanami db migrate
&& bundle exec rake initial_settings:add_default_language
&& bundle exec rake initial_settings:add_session_validity
&& bundle exec rake import_user:create
&& bundle exec rake super_admin:create
&& bundle exec hanami assets precompile
&& bundle exec hanami server"
expose:
- 2300
volumes:
- ./hanami_log/hanami_app.log:/usr/src/app/hanami_log/hanami_app.log
links:
- postgres
depends_on:
- postgres
nginx:
image: nginx:alpine
restart: unless-stopped
tty: true
ports:
- "1337:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./nginx_log:/var/log/nginx
- ./public/assets:/www/static/assets
depends_on:
- web
volumes:
postgres:
web:
nginx:
这是我的 nginx.conf 文件:
user nginx;
events {}
http {
upstream tsr {
server web:2300;
}
server {
listen 80;
access_log /var/log/nginx/tsr.access.log;
error_log /var/log/nginx/tsr.error.log;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://tsr;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /assets {
root /www/static;
}
location /assets/hanami_app_2 {
root /www/static;
}
}
}
编辑1---
我已将其更改root
为alias
:
location /assets/ {
alias /www/static/assets/;
}
location /assets/hanami_app_2/ {
alias /www/static/assets/hanami_app_2/;
}
nginx 日志返回 200 的文件:
"GET /assets/hanami_app_2/dataTables.fixedHeader.min-dfe62a6df19664362cdead540196ed66.js HTTP/1.1" 200 8148 "http://localhost:8091/hanami_app_2/login"
但是,页面仍然被剥离。
编辑1---
据我从 nginx 访问和错误日志中可以看出,此设置为文件提供服务,但除了图像之外什么都没有加载。没有加载我的意思是整个页面似乎完全剥离了图像除外。
有没有办法查明问题?
最好的,塞巴斯蒂安