使用 Docker 和 Nginx 搭建图片服务器的示例.
// docker挂载
1 2
| mkdir -p /home/nginx/www /home/nginx/logs /home/nginx/conf /home/nginx/www/image /home/nginx/www/image/ /home/nginx/www/image/info_detail touch /home/nginx/conf/nginx.conf
|
修改配置文件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 45 46
| user root root; 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; #gzip on; include /etc/nginx/conf.d/*.conf; server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; } location /images/ { root /usr/share/nginx/html/; autoindex on; } } }
|
创建并运行Nginx容器, 443为https端口. 但这里没有用到https
1 2 3 4 5
| docker run -d -p 80:80 --name nginx-image-server \ -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /home/nginx/www:/usr/share/nginx/html \ -v /home/nginx/logs:/var/log/nginx \ nginx
|
这时候nginx服务器就已经搭建好了, 可以在/home/nginx/www下创建index.html, 然后通过ip可以直接访问这时候就成功了.
安装vsftpd
添加用户
1 2 3
| useradd infoimage // 创建用户 passwd infoimage // 设置用户密码为下面这段 45g2rVaZ8R9GGka8
|
修改配置文件
1
| vi /etc/vsftpd/vsftpd.conf
|
配置文件默认为YES,即支持匿名访问,设置为不支持
在最后添加这3行
1 2 3
| pasv_enable=YES pasv_min_port=30000 pasv_max_port=30009
|
保存退出后设置用户访问权限
1 2
| chown infoimage /home/nginx/www/image chmod 777 -R /home/nginx/www/image
|
启动vsftp服务
1
| systemctl start vsftpd.service
|
然后关闭防火墙或者开启一些端口(开启的话要开挺多的…测试就关闭防火墙来测试了)
1 2
| systemctl status vsftpd.service systemctl stop vsftpd.service
|
关闭用户鉴权
注释掉/etc/pam.d/vsftpd文件里这一行:
1
| #auth required pam_shells.so
|
重启
1
| systemctl restart vsftpd.service
|
头像路径
1 2
| chown infoimage /home/nginx/www/head chmod 777 -R /home/nginx/www/head
|
ftp连接(账户密码)
1 2 3
| 192.168.76.56:21 infoimage 45g2rVaZ8R9GGka8
|
如果连接上后不显示文件夹
解决办法:
1 2 3 4
| 1、vi /etc/selinux/config 2、 将SELINUX=enforcing 改为 SELINUX=disable 3、使改变的内容生效 sudo setenforce 0 4、重启vsftpd
|
上传图片到image后, 图片示例地址(虚拟机ip):
http://虚拟机ip/image/20200505_14-36-29.jpg
服务出问题的终极解决办法
1.查看防火墙状态并关闭:
1 2 3 4 5 6
| // 查看防火墙状态 systemctl status firewalld.service // 查看已开放的端口(默认不开放任何端口) firewall-cmd --list-ports // 关闭防火墙 systemctl stop firewalld.service
|
2.查看docker里的nginx容器运行状态, 重启nginx容器
1 2 3 4 5 6 7 8
| // 查看运行中的容器 docker ps // 停止运行中的容器 docker stop containner_id // 启动停止的容器 docker start containner_id // 或者一条命令重新启动容器 docker restart containner_id
|
3.重启整个docker进程, 再继续运行相应容器
1 2 3 4 5 6
| // 重启docker进程 systemctl restart docker // 查看所有容器(包括未运行) docker ps -a // 启动相应容器 docker start containner_id
|
4.删除创建的容器, 重新从镜像生成一个容器并运行
1 2 3 4 5 6 7 8
| // 删除之前停止的容器 docker rm containner_id // 重新从镜像生成一个容器并运行 docker run -d -p 80:80 --name nginx-image-server \ -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /home/nginx/www:/usr/share/nginx/html \ -v /home/nginx/logs:/var/log/nginx \ nginx
|
有时候上面的配置都没问题, 就是ping不通, 可以禁用对应的网卡再启用试试.
参考:
https://www.cnblogs.com/lyuzt/p/12575390.html