【问题标题】:Ngnix and docker compose - not return static filesNginx 和 docker compose - 不返回静态文件
【发布时间】:2018-09-28 22:30:08
【问题描述】:

这是my docker-file.yml

version: '2'
services:

  nginx:
    image: nginx:latest
    ports:
      - '80:80'
      - '443:443'
    volumes:
      - ./conf.d:/etc/nginx/conf.d/
      - ./logs/nginx_access.log:/var/log/nginx_access.log
      - ./logs/nginx_error.log:/var/log/nginx_error.log
      - ./src/app/static:/flask-app/src/app/static
    depends_on:
      - web

  web:
    build: ./
    command: gunicorn manage:app --bind 0.0.0.0:8000 --access-logfile=logs/gunicorn_access_log.txt
    ports:
    - '8000:8000'
    volumes:
    - ./:/flask-app
    environment:
      DATABASE_URL: postgresql://postgres:pass@localhost/flask_deploy
      REDIS_HOST: redis
      SECRET_KEY: 'BbGd3qe$dsf1'
      CONFIG_NAME: 'prod'
    links:
      - postgres:postgres
      - redis:redis
    depends_on:
      - postgres
      - redis

  postgres:
    image: postgres:9.4
    volumes:
      - ./psql-data:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: 'pass'
      POSTGRES_DB: 'flask_deploy'
    ports:
      - '5432:5432'

  redis:
    image: "redis:3.0-alpine"
    command: redis-server
    ports:
      - '6379:6379'

这是我的ngnix 配置(web 是来自docker-compose 文件的名称):

server {
    listen 80;
    server_name web;

    # запись доступа и журналы ошибок в /var/log
    access_log /var/log/nginx_access.log;
    error_log /var/log/nginx_error.log;

    location / {
        # переадресация запросов приложений на сервер gunicorn
        proxy_pass http://web:8000;
    }

    location /static {
        # обрабатывать статические файлы напрямую, без пересылки в приложение
        autoindex on;
        alias /flask-app/src/app/static;
        expires 1d;
    }
}

我的网站可以在127.0.0.1 上使用(没有端口)。但是..我在处理静态文件时遇到了麻烦。 Flask url_for 生成 url 像:

http://web:8000/static/img/do.jpg

此链接不可用。

我可以试试这个:

http://127.0.0.1:8000/static/img/do.jpg

我看到了图片。但是这张图是gunicorn返回的,不是ngnix :(

我是 docker-compose 和 ngnix 的初学者。也许,一些关于我的配置的cmets?谢谢!

【问题讨论】:

  • 您需要使用volumes映射nginx容器内的static目录
  • @ConstantinGalbenu 嗯......也许,但它并没有解决我的主要问题。查看链接:http://web:8000/static/img/do.jpg。 PATH 正确,但 HOST 不正确。我尝试使用静态地图,现在我在http://127.0.0.1/static/img/do.jpg 上有 404 代码 :((((((
  • 因为web 仅在 docker-compose 创建的网络内部是已知的。网址应为http://localhost/static/img/do.jpg。此外,不需要从web 导出端口8000、从postgres 导出5432 和从redis 导出6379,除非您将它们用于调试。
  • 用最新的 nginx 配置更新答案
  • @ConstantinGalbenu 我没有更改 nginx 配置。我只挂载静态目录,如 (- ./src/app/static:/flask-app/src/app/static)

标签: docker nginx docker-compose gunicorn


【解决方案1】:

解决方案:

proxy_set_header Host $host:8000;

完整配置:

server {
    listen 80;
    server_name localhost;

    root /flask-app/src/app;

    access_log /var/log/nginx_access.log;
    error_log /var/log/nginx_error.log;

    location / {
        proxy_set_header Host $host:8000;
        proxy_pass http://web:8000;
    }

    location /static {
        autoindex on;
        expires 1d;
    }
}

【讨论】:

    猜你喜欢
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 2018-10-02
    • 2018-08-18
    相关资源
    最近更新 更多