天天看点

Nginx服务优化(1)——隐藏版本号、修改用户与组、网页缓存时间、日志切割、连接超时一、隐藏版本号二、修改用户与组三、配置Nginx网页缓存时间四、实现Nginx日志分割五、配置Nginx实现连接超时六、补充关于时间日期的命令

这里写目录标题

  • 一、隐藏版本号
      • 1.1、修改配置法
      • 1.2、修改源码并重新编译安装
  • 二、修改用户与组
      • 2.1编译安装时指定用户与组
      • 2.2修改配置文件指定用户与组
  • 三、配置Nginx网页缓存时间
  • 四、实现Nginx日志分割
  • 五、配置Nginx实现连接超时
  • 六、补充关于时间日期的命令

一、隐藏版本号

1.1、修改配置法

(1) 查看当前版本

[[email protected] ~]# curl -I http://20.0.0.11
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Fri, 16 Oct 2020 06:15:34 GMT

           

(2)修改配置文件

[[email protected] ~]# vi /usr/local/nginx/conf/nginx.conf
http {
    include       mime.types;
    default_type  application/octet-stream;  ##找到这个地方
server_tokens off;  ## 手动添加这一行,隐藏版本号
==>> wq 保存
[[email protected] ~]# curl -I http://20.0.0.11
HTTP/1.1 200 OK
Server: nginx     ##版本号已经隐藏了
Date: Fri, 16 Oct 2020 06:25:37 GMT
           

1.2、修改源码并重新编译安装

[[email protected] ~]# vi /root/nginx-1.12.2/src/core/nginx.h
#define nginx_version      1012002
#define NGINX_VERSION      "1.1.1" ###修改版本号
#define NGINX_VER          "nginx/" NGINX_VERSION

[[email protected] nginx-1.12.2]# make && make install

[[email protected] ~]# curl -I http://20.0.0.11
HTTP/1.1 200 OK
Server: nginx/1.1.1

           

二、修改用户与组

Nginx运行时进程需要有用户与组的支持,站文件读取时进行访问控制

Nginx默认使用nobody用户账号与组账号

修改的方法

2.1编译安装时指定用户与组

我们在编译安装 nginx 的时候也可以指定用户与组,指定安装目录

[[email protected] nginx-1.12.2]#./configure \ 
--prefix=/usr/local/nginx \   ##指定安装位置
--user=nginx \  ## 指定用户
--group=nginx \  ## 指定组账户
--with-http_stub_status_module
           

2.2修改配置文件指定用户与组

[[email protected] nginx-1.12.2]# vi /usr/local/nginx/conf/nginx.conf
找到 #user nobody   ==>>  修改成 user nginx nginx;  ##打开配置文件后就在第一行,然后#号也删除
[[email protected] nginx-1.12.2]# killall -s HUP nginx   ## 刷新配置文件
[[email protected] ~]# ps aux | grep nginx
root       4324  0.0  0.0  20572  1516 ?        Ss   10:21   0:00 nginx: master process nginx
nginx      4725  0.0  0.0  23076  1456 ?        S    10:50   0:00 nginx: worker process
root       4738  0.0  0.0 112676   984 pts/0    S+   10:51   0:00 grep --color=auto nginx

## 修改完之后过滤查看下

           

三、配置Nginx网页缓存时间

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

2、一般针对静态网页设置,对动态网页不设置缓存时间

3、设置方法

在主配置文件的location段加入expires参数

[[email protected] ~]# vi /usr/local/nginx/conf/nginx.conf
location / {
            root   html;
            index  index.html index.htm;
            expires 1d; ###设置缓存时间为1天
        }

[[email protected] ~]# systemctl restart nginx

           

四、实现Nginx日志分割

  • 随着Nginx运行时间增加,日志也会增加握。为了方便掌Nginx运行状态,需要时刻关注Nginx日志文件
  • 太大的日志文件对监控是一个大灾难
  • 定期进行日志文件的切割
  • Nginx自身不具备日志分割处理的功能,但可以通过Nginx信号控制功能的脚本实现日志的自动切割
  • 通过Linux的计划任务周期性地进行日志切割

    编写脚本进行日志切割的思路:

    1、设置时间变量

    2、设置保存日志路径

    3、将目前的日志文件进行重命名

    4、重建新日志文件

    5、删除时间过长的日志文件

    6、设置cron任务,定期执行脚本自动进行日志分割

[[email protected] ~]# vi /usr/local/nginx/conf/nginx.conf
error_log  logs/error.log  info;

 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  logs/access.log  main; ###去除前面#号

[[email protected] ~]# nginx -t ###检查配置文件是否正确
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

[[email protected] ~]# vim fenge.sh
#!/bin/bash
#Filename:fenge.sh
d=$(date -d "-1 day" "+%Y%m%d") 
logs_path="/var/log/nginx"
pid_path="/usr/local/nginx/logs/nginx.pid" ###设置日期及路径变量
[ -d $logs_path ] || mkdir -p $logs_path ###自动创建日志目录
mv /usr/local/nginx/logs/access.log ${logs_path}/test.com-access.log-$d ###分割新的日志
kill -HUP $(cat $pid_path) ###生成新的日志
find $logs_path -mtime +30 | xargs rm -rf ###删除30天前的日志(xargs用来传递参数)

[[email protected] ~]# chmod +x fenge.sh
[[email protected] ~]# ./fenge.sh
[[email protected] ~]# cd /var/log/nginx/
[[email protected] nginx]# ll
总用量 44
-rw-r--r--. 1 root root 44866 10月 16 15:11 test.com-access.log-20201015 ###运行之后生成昨天的日志


           

五、配置Nginx实现连接超时

为避免同一客户端长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间

超时参数

■Keepalive_timeout

设置连接保持超时时间

■Client_header_timeout

指定等待客户端发送请求头的超时时间

■Client_body_timeout

设置请求体读超时时间

[[email protected] ~]# vi /usr/local/nginx/conf/nginx.conf
   #keepalive_timeout  0;
    keepalive_timeout  180;
    client_header_timeout 80;    ##等待客户端发送请求头的超时时间 超时会发送408错误
    client_body_timeout 80;    ##设置请求体的读超时时间

[[email protected] ~]# systemctl restart nginx

           

六、补充关于时间日期的命令

(1)获取当天的的日期

[[email protected] ~]# date +%Y%m%d

20201016

[[email protected] ~]# date

2020年 10月 16日 星期五 15:40:12 CST

(2)昨天

[[email protected] ~]# date -d “-1 day”

2020年 10月 15日 星期四 15:41:09 CST

(3)明天

[[email protected] ~]# date -d “day”

2020年 10月 17日 星期六 15:41:51 CST

(4)前一天的日期

[[email protected] ~]# date -d “-1 day” +%d

15

(5)前一小时

[[email protected] ~]# date -d “-1 hour” +%H

14

(6)前一分钟

[[email protected] ~]# date -d “-1 min” +%M

48

(7)前一秒钟

[[email protected] ~]# date -d “-1 second” +%S

18