阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

使用Nginx和vsftpd搭建图片服务器

165次阅读
没有评论

共计 3888 个字符,预计需要花费 10 分钟才能阅读完成。

1、安装 vsftpd 组件

安装完后,有 /etc/vsftpd/vsftpd.conf 文件,是 vsftp 的配置文件。
[root@linuxidc ~]# yum -y install vsftpd

2、创建虚拟用户登录

2.1 创建文本格式的用户名、密码列表

首先需要建立一个文本格式的用户名 / 密码列表文件,奇数行为用户名,偶数行为上一行中用户名所对应的密码。
例如:添加两个用户 jene、john,密码分别为 abc123、abc456 执行以下的操作:

[root@linuxidc ~]# vi /etc/vsftpd/juser.txt
jene
abc123
john
abc456

2.2 生成数据库:

db_load:安装 db4,db4-devel,db4-utils

# cd //etc/vsftpd  // 切换到 /etc/vsftpd 的目录下
# yum -y install db4*
# db_load -T -t hash -f juser.txt juser.db  // 将刚创建的 juser.list 列表转换为 juser.list.db

file juser.db  // 查看转换后的文件类型

2.3 修改数据文件访问权限:

chmod 600 /etc/vsftpd/juser.db

2.4 修改 pam 配置:

vi /etc/pam.d/juser.pam // 为虚拟用户创建 PAM 认证文件,文件名为 juser.pam(见名之义)
auth    required        pam_userdb.so  db=/etc/vsftpd/juser
account required        pam_userdb.so  db=/etc/vsftpd/juser
注意:db=/etc/vsftpd/vsftpd_login 后面的.db 必须去掉

2.5 创建虚拟账号对应的系统用户:

# useradd -d /home/ftpuser -s /sbin/nologin ftpuser      // 添加用户 ftpuser,指定到新建的家目录,将虚拟用户对应到这个系统账号上,这个账号无需设置密码及登录 Shell
# chmod 755 /home/ftpuser/        // 调整权限以允许浏览目录

2.6 修改 vsftpd 配置文件

vsftpd 端口是 1335,访问目录为 /opt/upload(即为图片路径),被动模式

vi /etc/vsftpd/vsftpd.conf
anonymous_enable=no
local_enable=YES
write_enable=YES
local_umask=022
connect_from_port_20=YES
#ftp_data_port=1334
chroot_local_user=YES
listen=YES
listen_port=1335
#pam_service_name=vsftpd
pam_service_name=juser.pam
tcp_wrappers=YES

local_root=/opt/upload
pasv_enable=yes
pasv_min_port=31000
pasv_max_port=31999
guest_enable=YES
guest_username=ftpuser
user_config_dir=/opt/ftpuser_dir
userlist_enable=YES

2.7 定义 jene 虚拟用户配置文件,允许 jene 用户可以上传

#vi /opt/ftpuser_dir/jene
anon_upload_enable=YES
anon_other_write_enable=YES
anon_umask=062  (权限 062 是创建目录为 715,文件为 604)

2.8 定义 john 虚拟用户配置文件,允许 john 用户可以上传及创建目录

anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_umask=062

# service vsftpd restart

3、配置 nginx.conf,使其成为图片服务器

# vi /opt/nginx/conf/nginx.conf

user  nginx nginx;
worker_processes  1;

pid        /opt/nginx/run/nginx/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include      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”‘
                      ‘$upstream_addr $upstream_response_time $request_time ‘;
    log_format log404 ‘$status [$time_local] $remote_addr $host$request_uri $sent_http_location’;

    access_log  logs/nginx/access.log main;
    access_log  logs/nginx/host.access.404.log  log404;

    sendfile        on;

    keepalive_timeout  65;

    server {
        listen      8010;
        server_name  localhost;
        large_client_header_buffers 4 128k;
        client_max_body_size 300m;
        client_body_buffer_size 128k;
        proxy_connect_timeout 600;
        proxy_read_timeout 600;
        proxy_send_timeout 600;
        proxy_buffer_size 64k;
        proxy_buffers  4 32k;
        proxy_busy_buffers_size 64k;
        proxy_temp_file_write_size 64k;

        location /nginxstatus{
                stub_status on;
                access_log on;
                auth_basic “nginxstatus”;
                auth_basic_user_file htpasswd;
        }

        location ~ .*\.(gif|jpg|jpeg|png)$ {
            expires 24h;
            root /opt/upload;
            access_log /opt/nginx/logs/images.log;
            proxy_store on;
            proxy_store_access user:rw group:rw all:rw;
            proxy_temp_path        /opt/upload;
            proxy_redirect          off;
            proxy_set_header        Host 192.168.8.15;
            client_max_body_size    10m;
            client_body_buffer_size 1280k;
            proxy_connect_timeout  900;
            proxy_send_timeout      900;
            proxy_read_timeout      900;
            proxy_buffer_size      40k;
            proxy_buffers          40 320k;
            proxy_busy_buffers_size 640k;
            proxy_temp_file_write_size 640k;
      }

        location / {
            root  html;
            index  index.html index.htm;
        }

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

    }

5、图片路径权限

# ll /opt/
total 4
drwxr-xr-x. 3 root root 4096 Jan 31 13:08 upload

也可将 upload 目录设置属主为 nginx 用户
# chmod nginx /opt/upload
# ll /opt/
total 4
drwxr-xr-x. 3 nginx root 4096 Jan 31 13:08 upload

upload 目录下 pthoimanges 存放图片目录属主与属组都为虚拟用户映射的本地用户(ftpuser)
#chmod -R ftpuser.ftpuser /opt/upload/pthoimanges
# ll /opt/upload/
total 4
drwxr-xr-x. 6 ftpuser ftpuser 4096 Jan 31 13:09 pthoimanges

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计3888字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中