【问题标题】:serving static files from jwilder/nginx-proxy从 jwilder/nginx-proxy 提供静态文件
【发布时间】:2019-07-01 11:31:25
【问题描述】:

我有一个网络应用程序(由 uwsgi 提供的 django),我正在使用 nginx 代理对特定容器的请求。 这是我的 default.conf 中的相关 sn-p。

upstream web.ubuntu.com {
server 172.18.0.9:8080;
}
server {
server_name web.ubuntu.com;
listen 80 ;
access_log /var/log/nginx/access.log vhost;
location / {
include uwsgi_params;
uwsgi_pass uwsgi://web.ubuntu.com;
}
}

现在我希望静态文件由 nginx 而不是 uwsgi worker 提供。

所以基本上我想添加类似的内容:

location /static/ {
autoindex on;
alias /staticfiles/;
}

到为容器自动生成的服务器块。

我相信这应该让 nginx 为 /staticfiles 文件夹中对 web.ubuntu.com/static/* 的所有请求提供服务。

但是由于配置(default.conf)是自动生成的,所以我不知道如何将上述位置动态添加到服务器块中:(

我认为位置块不能在服务器块之外,每台服务器只能有一个服务器块?

所以我不知道如何在那里添加位置块,除非我在 nginx 启动后动态添加到 default.conf 然后重新加载它我猜。

我确实经历了https://github.com/jwilder/nginx-proxy,我只看到了一个实际更改每个主机和默认位置设置的示例。但是完全没有添加新位置。

我已经在 jwilder/nginx-proxy 的问答中发布了这个,但没有得到回复。

如果有办法实现这一点,请帮助我。

【问题讨论】:

    标签: docker docker-compose static-files jwilder-nginx-proxy


    【解决方案1】:

    此答案基于官方nginx-proxy repo 上#553 问题讨论中的comment。首先,您必须使用静态位置创建default_location 文件:

    location /static/ {
        alias /var/www/html/static/;
    }
    

    并将其保存到项目根目录中的nginx-proxy 文件夹中。然后,您必须将此文件添加到 jwilder/nginx-proxy 容器的 /etc/nginx/vhost.d 文件夹中。您可以基于jwilder/nginx-proxy 构建一个新映像并复制此文件,或者您可以使用volumes 部分安装它。此外,您必须使用共享卷在 webappnginx-proxy 容器之间共享静态文件。因此,您的 docker-compose.yml 文件将如下所示:

    version: "3"
    
    services:
      nginx-proxy:
        image: jwilder/nginx-proxy
        ports:
          - "80:80"
        volumes:
          - /var/run/docker.sock:/tmp/docker.sock:ro
          - ./nginx-proxy/default_location:/etc/nginx/vhost.d/default_location
          - static:/var/www/html/static
    
      webapp:
        build: ./webapp
        expose:
          - 8080
        volumes:
          - static:/path/to/webapp/static
        environment:
          - VIRTUAL_HOST=webapp.docker.localhost
          - VIRTUAL_PORT=8080
          - VIRTUAL_PROTO=uwsgi
    
    volumes:
      static:
    

    现在,/etc/nginx/conf.d/default.conf 中的 server 块将始终包含静态位置:

    server {
        server_name webapp.docker.localhost;
        listen 80 ;
        access_log /var/log/nginx/access.log vhost;
        location / {
            include uwsgi_params;
            uwsgi_pass uwsgi://webapp.docker.localhost;
            include /etc/nginx/vhost.d/default_location;
        }
    }
    

    这将使 Nginx 为您提供静态文件。

    【讨论】:

      猜你喜欢
      • 2018-05-17
      • 2020-05-03
      • 2018-10-23
      • 1970-01-01
      • 2019-05-31
      • 2021-09-03
      • 2018-05-18
      • 2015-07-30
      • 2021-12-02
      相关资源
      最近更新 更多