Nginx搭建静态图片资源服务器

本文介绍使用 Docker Nginx 搭建静态图片资源服务器的过程和搭建中间遇到的问题。

我使用 Docker compose 搭建静态图片资源服务器, 我使用的 compose 文件内容如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
version: '3.1'

services:
  nginx:
    restart: always
    image: nginx
    container_name: asset
    ports:
      - 80:80
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./uploads:/usr/share/nginx/uploads
      - ./conf.d:/etc/nginx/conf.d

/srv/msg/storage/uploads:/usr/share/nginx/uploads 将本地的图片文件夹挂载到容器内的 /usr/share/nginx/uploads 文件夹 nginx.conf 是 Nginx 的主配置文件, conf.d 是各个网站配置的文件夹。 我的 nginx.conf 内容如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;
    include /etc/nginx/conf.d/*.conf;
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  192.168.1.117;
        root /usr/share/nginx/uploads/;
        location /{
              autoindex on;
        }
        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }

    }
     
}

静态资源图片服务器的配置文件如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
server {
        listen  80;
        # 设置你访问服务的ip或域名
        server_name 192.168.1.117;
        default_type 'text/html';
        charset utf-8; # 避免中文乱码
        # 图片文件夹的路径
        root /usr/share/nginx/uploads/;
        location / {
             # autoindex on;
               autoindex_exact_size on; # 显示文件大小
               autoindex_localtime on; # 显示文件时间
        }

}

设置autoindex on; autoindex_exact_size on; autoindex_localtime on; 这三项是为了访问192.168.1.117时可以显示图片的大小、创建时间等信息。

执行docker-compose up -d 启动服务。访问 http://192.168.1.117/, 发现显示403,我又重新检查了配置文件,没有找到有问题的地方,网上参考了他人的解决方法,发行好像是autoindex on的问题,在相应的静态资源服务器中也要开启。修改后的配置文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
server {
        listen  80;
        # 设置你访问服务的ip或域名
        server_name 192.168.1.117;
        default_type 'text/html';
        charset utf-8; # 避免中文乱码
        # 图片文件夹的路径
        root /usr/share/nginx/uploads/;
        location / {
              autoindex on;
               autoindex_exact_size on; # 显示文件大小
               autoindex_localtime on; # 显示文件时间
        }

}

访问 http://192.168.1.117/ , 图片列表可以正常显示了 img.png 考虑到没有显示图片列表的需求, 于是把autoindex on; autoindex_exact_size on; autoindex_localtime on; 注释掉。只允许在已知文件名的情况下才能访问。