0

在我的 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---

我已将其更改rootalias

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 访问和错误日​​志中可以看出,此设置为文件提供服务,但除了图像之外什么都没有加载。没有加载我的意思是整个页面似乎完全剥离了图像除外。

有没有办法查明问题?

最好的,塞巴斯蒂安

4

0 回答 0