相关推荐recommended
CentOS用nginx搭建文件下载服务器
作者:mmseoamin日期:2024-01-18

  Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动。在工作中,我们经常会用到需要搭建文件服务器的情况,这里就以在linux下搭建文件服务器为例,解释编译nginx和搭建服务器的过程。

一、nginx编译安装

1、下载nginx

  • nginx下载网站
  • wget下载命令
    wget http://nginx.org/download/nginx-1.25.2.tar.gz
    

    2、解压压缩包

    tar -zxvf nginx-1.25.2.tar.gz
    

    3、创建用户和用户组

    useradd -M -s /sbin/nologin nginx
    

    4、编译安装nginx

    # 依次执行下面命令
    cd nginx-1.25.2
    ./configure \
    --prefix=/usr/local/nginx \
    --user=nginx \
    --group=nginx \
    --without-http_rewrite_module \
    --without-http_gzip_module
    make && make install
    #让系统识别nginx的操作命
    ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/		
    

    如果在编译过程中报错需要依赖包,执行以下命令安装依赖

    #nginx的配置及运行需要pcre、zlib、openssl等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。
    yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
    

    依赖安装完成重新执行./configure命令

    5、检查、启动、重启、停止 nginx服务的命令

    nginx -t								#检查配置文件是否配置正确
    #启动
    nginx									
    #停止
    cat /usr/local/nginx/logs/nginx.pid		#先查看nginx的PID号
    kill -3 
    kill -s QUIT 
    killall -3 nginx
    killall -s QUIT nginx
    #重载
    kill -1 
    kill -s HUP 
    killall -1 nginx
    killall -s HUP nginx
    #日志分割,重新打开日志文件
    kill -USR1 
    #平滑升级
    kill -USR2  
    

    CentOS用nginx搭建文件下载服务器,在这里插入图片描述,第1张

    二、配置nginx文件下载服务器

    1、配置nginx.conf文件

    • 到nginx.conf文件目录
      cd  /usr/local/nginx/conf/
      
      • 先备份nginx.cong文件
        cp nginx.conf nginx.conf_bak
        
        • 编辑/usr/local/nginx/conf/nginx.conf文件,

          将 user nobody 改成:user root并取消注释

          CentOS用nginx搭建文件下载服务器,在这里插入图片描述,第2张

          配置以下部分

              # 显示目录
              autoindex on;
              # 显示文件大小
              autoindex_exact_size on;
              # 显示文件时间
              autoindex_localtime on;
              # 防止中文乱码
              charset utf-8;
           
           
              server {
                  listen       8888;
                  #配置了监听端口此条不生效
                  server_name  localhost;
                  #文件服务器本地存储路径
                  root /root/nginx_storge;
              }
          

          CentOS用nginx搭建文件下载服务器,在这里插入图片描述,第3张

          • 创建/root/nginx_storge文件夹
            mkdir /root/nginx_storge
            

            2、检查并启动nginx

            # 检查nginx配置
            nginx -t
            #启动nginx
            nginx -c /usr/local/nginx/conf/nginx.conf
            #重载nginx
            nginx -s reload
            

            CentOS用nginx搭建文件下载服务器,在这里插入图片描述,第4张

            3、测试下载

            在cd /root/nginx_storge/中新建几个文件和文件夹

            CentOS用nginx搭建文件下载服务器,在这里插入图片描述,第5张

            在浏览器中输入地址:http://192.168.86.129:8888/(根据自己的ip修改)可以看到文件信息,点击文件可以下载

            CentOS用nginx搭建文件下载服务器,在这里插入图片描述,第6张

            三、自动启动nginx的启动脚本

              在实际的工作中,我们需要在不同的地方启动nginx,这种情况下,我们就可以通过自定义脚本的方式来实现该功能。下面我们就以一个视频下载为例来简单说明内容的写法。

            1 目录接口

            我们首先需要创建一个目录,目录的命名不重要,可以按照各自的业务来,因为脚本是按照相对路径来的,用的时候只需要将该文件夹直接拷贝过去,就可以直接执行,文件夹中的内容结构如下:

            ---- server.conf #下载路径相关的配置

            ---- start.sh #执行脚本

            ---- nginx #nginx相关的文件夹

            -------- conf

            ------------ nginx.conf #nginx的配置文件

            -------- logs

            ------------ access.log #访问日志文件 ,一开始只需要创建一个空文件即可

            ------------ error.log #错误日志文件 ,一开始只需要创建一个空文件即可

            ------------ nginx.pid #pid文件 ,一开始只需要创建一个空文件即可

            2、server.conf内容

            server.conf是配置文件,主要是下载的端口和服务器上面下载文件的绝对路径

            recordVideoDownloadPord=8888
            recordVideoDownloadRootPath=/home/filePath
            

            3、nginx.conf内容

            nginx.conf是nginx配置文件的模板,里面是主要的配置框架,实际内容会在执行start.sh时根据配置替换

            user  root;
            worker_processes  1;
            error_log /usr/local/nginx/logs/error.log  info;
            pid        /usr/local/nginx/logs/nginx.pid;
            events {
                worker_connections  1024;
            }
            http {
                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 /usr/local/nginx/logs/access.log  main;
                sendfile        on;
                #tcp_nopush     on;
                #keepalive_timeout  0;
                keepalive_timeout  65;
                #gzip  on;
                    # 显示目录
                autoindex on;
                # 显示文件大小
                autoindex_exact_size on;
                # 显示文件时间
                autoindex_localtime on;
                # 防止中文乱码
                charset utf-8;
                server {
                    listen 8888;
                    #配置了监听端口此条不生效
                    server_name  localhost;
                    #文件服务器本地存储路径
                    root /home/filePath;
                    access_log /usr/local/nginx/logs/access.log  main;
                #    ssl_certificate      cert.pem;
                #    ssl_certificate_key  cert.key;
                }
            }
            

            4、start.sh文件

            #!/bin/bash
            local_path=$(pwd)
            echo "localPath: $local_path"
            nginx_error_log="$local_path/nginx/logs/error.log  info"
            nginx_pid="$local_path/nginx/logs/nginx.pid"
            nginx_access_log="$local_path/nginx/logs/access.log  main"
            nginx_config_file="$local_path/nginx/conf/nginx.conf"
            #get config  
            port=`sed '/^recordVideoDownloadPord=/!d;s/.*=//' $local_path/server.conf`
            root_path=`sed '/^recordVideoDownloadRootPath=/!d;s/.*=//' $local_path/server.conf`
                        
            echo "read config port : $port" 
            echo "read config root : $root_path"
            #replace nginxConfigFile
            sed -i  "s|error_log .*;$|error_log ${nginx_error_log};|g" $nginx_config_file
            sed -i  "s|access_log .*;$|access_log ${nginx_access_log};|g" $nginx_config_file
            sed -i  "s|pid .*;$|pid        ${nginx_pid};|g" $nginx_config_file
            sed -i  "s|listen .*;$|listen ${port};|g" $nginx_config_file 
            sed -i  "s|root .*;$|root ${root_path};|g" $nginx_config_file
                
            #stop already started nginx
            if [ -f "$nginx_pid" ]; then
                pid=$(cat $nginx_pid)
                if  ps -p $pid  > /dev/null
                then 
                    echo "nginx is running pid=$pid, begin stop nginx "
                    kill -3 $pid
                fi
            fi
            echo "begin start nginx"
            /usr/local/nginx/sbin/nginx -c $nginx_config_file
            

            5、启动项目

            首先需要在nginx/logs下面新建nginx.pid文件,执行命令如下

            touch nginx/logs/nginx.pid
            

            将server.conf配置好后,执行start.sh文件,就可以启动项目,每次重启也只需要执行start.sh文件即可。

            ./start.sh
            

            后记

              个人总结,欢迎转载、评论、批评指正