2 minutes reading time
本文介绍使用 Docker Nginx 搭建静态图片资源服务器的过程和搭建中间遇到的问题。
我使用 Docker compose 搭建静态图片资源服务器, 我使用的 compose 文件内容如下:
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 内容如下:
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 {
}
}
}
静态资源图片服务器的配置文件如下:
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的问题,在相应的静态资源服务器中也要开启。修改后的配置文件:
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/ , 图片列表可以正常显示了 考虑到没有显示图片列表的需求, 于是把autoindex on; autoindex_exact_size on; autoindex_localtime on; 注释掉。只允许在已知文件名的情况下才能访问。