Nginx服务优化与防盗链

发布时间 2023-03-27 16:36:49作者: menglang
 

一、隐藏nginx版本号

1.1查看版本号

方法一:curl命令

  • 可以在 CentOS 中使用命令 curl -I http://192.168.59.118 显示响应报文首部信息。

    curl -I http://192.168.59.118

     

方法二:在网页中查看

  1.  
    1. #切换至html目录,拖一个图片进去
  2.  
    cd /usr/local/nginx/html
  3.  
  4.  
    2. #在网页中查看
  5.  
    http://192.168.59.118/game.png

 

 

 

1.2隐藏版本信息

方法一:修改配置文件

  1.  
    1.#修改配置文件
  2.  
    vim /usr/local/nginx/conf/nginx.conf
  3.  
     
  4.  
    2.#重启nginx
  5.  
    systemctl restart nginx
  6.  
     
  7.  
    3.#查看版本是否被隐藏
  8.  
    curl -I http://192.168.59.118
  1.  
    ```handlebars
  2.  
    http {
  3.  
      include       mime.types;
  4.  
      default_type application/octet-stream;
  5.  
      server_tokens off; #添加,关闭版本号
  6.  
      ......
  7.  
    }

 

 

方法二: 修改源码文件,重新编译安装

  1.  
    1. #切换至nginx安装包所在目录
  2.  
    cd /opt/
  3.  
    2. #停止nginx服务
  4.  
    systemctl stop nginx.service
  5.  
    3. #切换至安装目录
  6.  
    cd nginx-1.12.0/
  7.  
    4. #切换至内核目录
  8.  
    cd src/core/
  9.  
    5. #进入配置文件
  10.  
    vim nginx.h
  11.  
  12.  
    #define NGINX_VERSION     "yxp"
  13.  
    #define NGINX_VER         "yyy/" NGINX_VERSION
  14.  
  15.  
    6. #切换至文件目录
  16.  
    cd ../../
  17.  
  18.  
    7. #编译
  19.  
    ./configure \
  20.  
    --prefix=/usr/local/nginx \
  21.  
    --user=nginx \
  22.  
    --group=nginx \
  23.  
    --with-http_stub_status_module
  24.  
  25.  
    8. #安装
  26.  
    make && make install -j4
  27.  
  28.  
    9. #将配置文件下的之前关闭版本信息开启
  29.  
    vim /usr/local/nginx/conf/nginx.conf
  30.  
    server_tokens on;
  31.  
  32.  
    10. #重启nginx
  33.  
    systemctl restart nginx
  34.  
  35.  
    11. #查看版本信息
  36.  
    curl -I http://192.168.59.118
  37.  

 

 

 

 

 

 

 

 

 

二、修改用户与组

  1.  
    1. #修改配置文件
  2.  
    vim /usr/local/nginx/conf/nginx.conf
  3.  
  4.  
    user lili lili;  #取消注释,修改用户为 lili ,组为 lili
  5.  
  6.  
    2. #创建非登录用户
  7.  
    useradd -s /sbin/nologin lili
  8.  
  9.  
    3. #重启服务
  10.  
    systemctl restart nginx
  11.  
  12.  
    4. #查看是否修改成功
  13.  
    ps aux | grep nginx
​
​

 

 

 

 

 

 

三、缓存时间

当nginx将网页数据返回给客户端后,可设置缓存时间,以方便在日后进行相同内容的请求时直接返回,避免重复请求,加快了访问速度一般针对静态网页设置,对动态网页不设置缓存时间。

  1.  
    1. #修改配置文件
  2.  
    vim /usr/local/nginx/conf/nginx.conf
  3.  
           #添加以下内容
  4.  
          location ~ \.(jpg|png|bmp|gif)$ {
  5.  
              root   html;
  6.  
              expires 1d;
  7.  
          }
  8.  
  9.  
  10.  
    2. #查看是否有语法错误
  11.  
    nginx -t
  12.  
  13.  
    3. #重启服务
  14.  
    systemctl restart nginx.service
  15.  
  16.  
    4.#在网页中查看服务
  17.  
    http://192.168.59.118/game.png
  18.  
  19.  
    Cahce-Control:max-age=86400 表示缓存时间是 86400 秒。也就是缓存一天的时间,一天之内浏览器访问这个页面,都是用缓存中的数据,而不需要向 Nginx 服务器重新发出请求,减少了服务器的使用带宽。

 

 

四、日志分割

随着Nginx运行时间的增加,产生的日志也会逐渐增加,为了方便掌握Nginx的运行状态,需要时刻关注Nginx日志文件。太大的日志文件对监控是一个大灾难,不便于分析排查,需要定期的进行日志文件的切割。

  1.  
    1. #写脚本
  2.  
    vim /usr/local/nginx/nginx_log.sh
  3.  
  4.  
    #!/bin/bash
  5.  
    #this is for divide nginx log
  6.  
    d=$(date +%F -d -1day)                                       #显示前一天的时间
  7.  
    path="/var/log/nginx"  
  8.  
    pid="/usr/local/nginx/logs/nginx.pid"
  9.  
  10.  
    [ -d $path ] ||mkdir -p $path                                #创建日志文件目录
  11.  
    mv /usr/local/nginx/logs/access.log ${path}/www.yxp.com-$d   #移动并重命名日志文件
  12.  
    kill -USR1 $(cat $pid)                                       #重建新日志文件
  13.  
    find $path -mtime +30 -delete                                #删除30天之前的日志文件
  14.  
  15.  
    2. #赋予权限
  16.  
    chmod +x /usr/local/nginx/nginx_log.sh
  17.  
  18.  
    3. #计划任务
  19.  
    [root@localhost nginx]#crontab -e
  20.  
  21.  
    30 1 * * * /usr/local/nginx/nginx_log.sh

 

 

 

五、连接超时

 

  • HTTP服务有一个KeepAlive模式,它告诉web服务器在处理完一个请求后保持这个TCP连接的打开状态若接收到来自同一客户端的其他请求,服务端会利用这个被被关闭的连接,而不需要再次建立一个连接

  • KeepAlive在一段时间内保持打开状态,它们会在这段时间内占用资源,占用过多就会影响服务器的性能

  • 在企业网站中,为了避免同一个客户长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间。可以修改配置文件 nginx.conf,设置 keepalive_timeout超时

  •  

  • 时间。

  1.  
    1. #修改配置文件
  2.  
    vim /usr/local/nginx/conf/nginx.conf
  3.  
  4.  
       #keepalive_timeout 0;
  5.  
      keepalive_timeout  65 180;
  6.  
  7.  
    2. #重启nginx服务
  8.  
    systemctl restart nginx.service
  9.  
  10.  
    3. #在网页中测试
  11.  
    http://192.168.59.118/game.png
修改配置文件 



重启服务 

在网页测试

 

 

 

 

六、更改进程数

在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞

  1.  
    1. #统计cpu核数
  2.  
    cat /proc/cpuinfo |grep processor|wc -l
  3.  
  4.  
    cat /proc/cpuinfo |grep -c processor
  5.  
  6.  
    2. #查看目前有的核数
  7.  
    ps -aux |grep nginx
  8.  
  9.  
  10.  
    3. #修改 Nginx 的配置文件worker_processes 参数,一般设为 CPU 的个数或者核数,在高并发的情况下可设置为 CPU 个数或者核数的 2 倍,可以查看 CPU 的核数以确定参数。
  11.  
    vim /usr/local/nginx/conf/nginx.conf
  12.  
  13.  
    worker_processes  16;
  14.  
  15.  
    4. #重启服务并查看
  16.  
    systemctl restart nginx.service
  17.  
    ps -aux |grep nginx
  18.  

统计cpu核数

 

 

查看目前有的核数

 

修改 Nginx 的配置文件

 

 

 

 

七、网页压缩

  • Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能

  • 允许Nginx服务器将输出内容在发送客户端之前进行压缩,以节约网站带宽,提升用户的访问体验,默认已经安装可在配置文件中加入相应的压缩功能参数对压缩性能进行优化

  1.  
    1. #修改配置文件
  2.  
    gzip on; #取消注释,开启gzip压缩功能
  3.  
      gzip_min_length 1k;     #最小压缩文件大小
  4.  
      gzip_buffers 4 16k;     #压缩缓冲区,大小为4个16k缓冲区
  5.  
      gzip_http_version 1.1;   #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
  6.  
      gzip_comp_level 6;       #压缩比率
  7.  
      gzip_vary on; #支持前端缓存服务器存储压缩页面
  8.  
      gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss image/jpg image/jpeg image/png image/gif application/x-httpd-php application/javascript application/json; #压缩类型,表示哪些网页文档启用压缩功能
  9.  
  10.  
    2. #重启服务
  11.  
    systemctl restart nginx.service
  12.  
  13.  
  14.  
    3. #网页查看
  15.  
    http://192.168.59.118/game.png

 

 

 

八、配置防盗链

 

  • 在企业网站服务中,一般都要配置防盗链功能,以避免网站内容被非法盗用,造成经济损失,也避免了不必要的带宽浪费。

  • Nginx 的防盗链功能也非常强大,在默认情况下,只需要进行很简单的配置,即可实现防盗链处理。

8.1 网页准备

  1.  
    ##盗链网站主机(192.168..59.108)网页准备
  2.  
    1. #再开一台centos服务器,安装httpd
  3.  
    yum install -y httpd
  4.  
  5.  
  6.  
    2. #切换至/var/www/html
  7.  
    cd /var/www/html
  8.  
    vim index.html
  9.  
  10.  
    <html>
  11.  
    <body>
  12.  
    <h1>this is yxp
  13.  
    <img src="http://www.yxp.com/game.jpg"/>
  14.  
    </body>
  15.  
    </html>
  16.  
  17.  
    3. #在Web源主机(192.168.59.118)添加域名
  18.  
    vim /etc/hosts
  19.  
  20.  
    192.168.59.118 www.yxp.com
  21.  
  22.  
    4. #在Web源主机(192.168.59.118)添加图片
  23.  
    vim /usr/local/nginx/html/index.html
  24.  
  25.  
    <img src="game.png">
  26.  
  27.  
    5. #在盗链网站主机(192.168..59.108)添加域名
  28.  
    192.168.59.118 www.yxp.com
  29.  
    192.168.59.108 www.dhc.com
  30.  
  31.  
  32.  
    6. #在盗链网站开启服务,并在网页中测试
  33.  
    systemctl start httpd
  34.  
​
​

再开一台centos服务器,安装httpd

 

 

切换至/var/www/html

 

 

在Web源主机(192.168.59.118)添加域名

 

 

 在Web源主机(192.168.59.118)添加图片

 在盗链网站主机(192.168..59.108)添加域名

 

 

在盗链网站开启服务,并在网页中测试

 

 

 

8.2 配置防盗链

  1.  
    1. #在Web源主机(192.168.59.118)
  2.  
    vim /usr/local/nginx/conf/nginx.conf
  3.  
  4.  
        location ~* \.(jpg|swf)$ {
  5.  
                    valid_referers none blocked *.yxp.com yxp.com;
  6.  
               if ( $invalid_referer ) {
  7.  
                              rewrite ^/ http://www.yxp.com/error.png;
  8.  
                              }
  9.  
    }
  10.  
           
  11.  
  12.  
    2. #检查语法是否有错
  13.  
    nginx -t
  14.  
  15.  
    3. #将盗图图片拖进去
  16.  
    cd /usr/local/nginx/html/
  17.  
  18.  
    4. #重启服务
  19.  
    systemctl restart nginx.service
  20.  
  21.  
    5. #在网页测试
  22.  
    源主机网页: http://www.yxp.com/
  23.  
    盗链主机网页: http://www.dhc.com/
  24.