前言 Nginx
是一款高性能、可靠的Web服务器软件,同时用作文件上传和下载
配置 系统版本 1 2 [root@127 ~]# cat /etc/redhat-release CentOS Linux release 8.5.2111
创建用户 1 2 [root@127 ~]# useradd -s /sbin/nologin -M nginx
创建目录 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 [root@127 ~]# mkdir -p /export/share/upload/ [root@127 ~]# mkdir -p /export/tmp/upload/ [root@127 ~]# cd /export/tmp/upload/ [root@127 upload]# mkdir 0 1 2 3 4 5 6 7 8 9 state [root@127 upload]# chown -R nginx:nginx /export/ [root@127 export ]# tree . ├── share │ └── upload └── tmp └── upload ├── 0 ├── 1 ├── 2 ├── 3 ├── 4 ├── 5 ├── 6 ├── 7 ├── 8 ├── 9 └── state 15 directories, 0 files
安装nginx 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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 [root@127 ~]# yum remove nginx [root@127 ~]# yum -y install gcc gcc-c++ autoconf automake gd gd-devel zlib zlib-devel openssl openssl-devel pcre-devel [root@127 ~]# mkdir /root/thb [root@127 ~]# cd /root/thb [root@127 thb]# wget http://nginx.org/download/nginx-1.17.7.tar.gz [root@127 thb]# git clone https://github.com/hongzhidao/nginx-upload-module.git [root@127 thb]# git clone https://github.com/masterzen/nginx-upload-progress-module.git [root@127 thb]# tar -zxvf nginx-1.17.7.tar.gz [root@127 thb]# cd nginx-1.17.7/ [root@127 nginx-1.17.7]# ./configure --with-debug --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --add-module=/root/thb/nginx-upload-module --add-module=/root/thb/nginx-upload-progress-module --with-stream --with-http_image_filter_module --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-file-aio --with-cc-opt='-Wno-format-security -Wno-unused-but-set-variable -Wno-unused-result -D NGX_HAVE_OPENSSL_MD5_H=1 -D NGX_OPENSSL_MD5=1 -D NGX_HAVE_OPENSSL_SHA1_H=1 -O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' [root@127 nginx-1.17.7]# make && make install [root@127 nginx-1.17.7]# cd /etc/nginx/ [root@127 nginx]# vi nginx.conf worker_processes 4; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upload_progress proxied 8m; server { listen 80; auth_basic "Please input password" ; auth_basic_user_file /etc/nginx/passwd/testpwd; client_max_body_size 100g; location /upload { upload_pass /upload.php; upload_resumable on; upload_store /export/tmp/upload 1; upload_state_store /export/tmp/upload/state; upload_store_access all:r; upload_set_form_field "${upload_field_name} _name" $upload_file_name ; upload_set_form_field "${upload_field_name} _content_type" $upload_content_type ; upload_set_form_field "${upload_field_name} _path" $upload_tmp_path ; upload_aggregate_form_field "${upload_field_name} _md5" $upload_file_md5 ; upload_aggregate_form_field "${upload_field_name} _size" $upload_file_size ; upload_pass_form_field "^submit$|^description$" ; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name ; include fastcgi_params; } location /myfiles { alias /export/share/upload/; index index.html; autoindex on; autoindex_exact_size off; } } }
编辑上传文件 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 47 48 49 50 51 52 53 54 55 56 57 [root@127 nginx] [root@127 html] 50x.html index.html [root@127 html] [root@127 html] <?php $header_prefix = 'file' ;$slots = 6 ; ?> <html> <head> <title>Test upload</title> </head> <body> <?php if ($_POST ){ echo "<h3>Uploaded files:</h3>" ; echo "<table border=\"2\" cellpadding=\"2\">" ; echo "<tr><td>Name</td><td>Location</td><td>Content type</td><td>MD5</td><td>Size</td><td>Scp Command</td><td>Wget Command</tr>" ; for ($i =1 ;$i<=$slots;$i++){ $key = $header_prefix .$i ; if (array_key_exists($key ."_name" , $_POST ) && array_key_exists($key ."_path" ,$_POST )) { $tmp_name = $_POST [$key ."_path" ]; $name = $_POST [$key ."_name" ]; $content_type = $_POST [$key ."_content_type" ]; $md5 = $_POST [$key ."_md5" ]; $size = $_POST [$key ."_size" ]; $final_path = "/export/share/upload" ; if (copy($tmp_name , "$final_path /$name " )) { echo "SUCCESS!" ; } else { echo "FAIL!" ; } $scp_cmd = "scp team@***:/export/share/upload/$name ." ; $wget_cmd = "wget http://***/files/upload/$name " ; echo "<tr><td>$name </td><td>$final_path </td><td>$content_type </td><td>$md5 </td><td>$size </td><td>$scp_cmd </td><td>$wget_cmd </td>" ; } } echo "</table>" ; }else{?> <h3>Select files to upload</h3> <form name="upload" method="POST" enctype="multipart/form-data" action="/upload" > <input type="file" name="file1" ><br> <input type="file" name="file2" ><br> <input type="file" name="file3" ><br> <input type="file" name="file4" ><br> <input type="file" name="file5" ><br> <input type="file" name="file6" ><br> <input type="submit" name="submit" value="Upload" > <input type="hidden" name="test" value="value" > </form> <?php } ?> </body> </html>
增加nginx网页登录验证 1 2 3 4 5 6 7 [root@127 ~]# yum -y install httpd-tools [root@127 ~]# mkdir -p /etc/nginx/passwd/ [root@127 ~]# htpasswd -c /etc/nginx/passwd/testpwd user1 New password: Re-type new password: Adding password for user user1
增加nginx启动文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [root@127 ~] [root@127 ~] [Unit] Description=The nginx HTTP and reverse proxy server After=network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=/run/nginx.pid ExecStartPre=/usr/bin/rm -f /run/nginx.pid ExecStartPre=/usr/sbin/nginx -t ExecStart=/usr/sbin/nginx ExecReload=/bin/kill -s HUP $MAINPID KillSignal=SIGQUIT TimeoutStopSec=5 KillMode=process PrivateTmp=true [Install] WantedBy=multi-user.target
PHP安装 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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 [root@127 thb]# yum -y install gcc automake autoconf libtool make [root@127 thb]# yum -y install gcc gcc-c++ glibc [root@127 thb]# yum -y install libmcrypt libmcrypt-devel mhash-devel libxslt-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel [root@127 thb]# cd ~ [root@127 ~]# wget https://museum.php.net/php5/php-5.4.7.tar.gz [root@127 ~]# tar -zxvf php-5.4.7.tar.gz [root@127 ~]# cd php-5.4.7/ [root@127 php-5.4.7]# ./configure --prefix=/usr/local/php --enable-fpm --with-mcrypt --enable-mbstring --disable-pdo --with-curl --disable-debug --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --with-mhash --enable-zip --with-pcre-regex --with-mysql --with-Mysqli --with-gd --with-jpeg-dir [root@127 php-5.4.7]# make all install [root@127 ~]# php -m [PHP Modules] Core ctype date dom ereg fileinfo filter hash iconv json libxml pcre PDO pdo_sqlite Phar posix Reflection session SimpleXML SPL sqlite3 standard tokenizer xml xmlreader xmlwriter [Zend Modules] [root@127 ~]# yum install php-fpm [root@127 ~]# cd /usr/local/php [root@127 php]# ls man [root@127 ~]# find / -name php-fpm.conf.default /usr/share/doc/php-fpm/php-fpm.conf.default [root@127 ~]# cd /usr/share/doc/php-fpm/ [root@127 php-fpm]# ls php-fpm.conf.default www.conf.default [root@127 php-fpm]# cp php-fpm.conf.default php-fpm.conf [root@127 php-fpm]# vi php-fpm.conf [root@127 php-fpm]# cat php-fpm.conf ;;;;;;;;;;;;;;;;;;;;; ; FPM Configuration ; ;;;;;;;;;;;;;;;;;;;;; ; All relative paths in this configuration file are relative to PHP's install ; prefix (/usr). This prefix can be dynamically changed by using the ; ' -p' argument from the command line. ;;;;;;;;;;;;;;;;;; ; Global Options ; ;;;;;;;;;;;;;;;;;; [global] ; Pid file ; Note: the default prefix is /var ; Default Value: none ;pid = run/php-fpm.pid user = nginx group = nginx ...
启动php-fpm服务 1 [root@127 php-fpm]# systemctl restart php-fpm.service
启动nginx服务 1 2 3 [root@127 ~]# systemctl enable nginx [root@127 ~]# systemctl start nginx
测试