lzexin

一、nginx安装

1.1安装包下载路径

SSL功能需要openssl库,下载地址:http://www.openssl.org/       
gzip模块需要zlib库,下载地址:http://www.zlib.net/           
rewrite模块需要pcre库,下载地址:http://www.pcre.org/
Nginx的安装包:下载地址为:http://nginx.org/en/download.html

1.2 解压

yum -y install gcc gcc-c++

tar xf openssl-1.1.1w.tar.gz 
tar xf pcre-8.45.tar.gz 
tar xf zlib-1.2.13.tar.gz 
tar xf nginx-1.24.0.tar.gz 

1.3 编译

./configure --prefix=/data/nginx --with-http_ssl_module --with-pcre=/data/soft/pcre-8.45 --with-zlib=/data/soft/zlib-1.2.13 --with-openssl=/data/soft/openssl-1.1.1w

1.4 安装

make && make install

二、nginx优化

2.1 开启高效传输模式

# 在nginx.conf配置文件中
sendfile  on;
tcp_nopush     on;  # 取消此注释

# sendfile on;
开启高效文件传输模式,sendfile指令nginx是否调用sendfile函数来传输,输出文件,当nginx是一个静态文件服务器时,开启sendfile配置项能大大提高nginx性能

# tcp_nopush no;
在sendfile开启模式才有效,防止网络阻塞,积极的减少网络报文的数量

2.2 长连接超时时间

# 主要目的是CPU,内存,控制连接数,因为建立连接也是需要消耗资源的
# 在nginx.conf配置文件中
keepalive_timeout 65;

# keepalived_timeout  与client的keep-alive连接超时时间,单位是秒,服务器和客户端无交互后将在这个时间后关闭连接,长连接可以减少重建连接的开销,如果设置时间过长,用户又多,长时间保持连接会占用大量资源。

2.3 文件上传大小控制

# 在nginx.conf配置文件中http下
client_max_body_size 10m;

2.4 gzip调优

  • 启用gzip功能
#使用gzip压缩功能,可为我们节约带宽,加快传输速度,有更好的体验,节约成本;Nginx启用压缩功能需要用ngx_http_gzip_module模块,apache使用的是mod_deflate;一般我们需要压缩的内容有:文本,js,html,css,对于图片,视频,flash不压缩,同时也要注意,我们使用gzip的功能是需要消耗CPU的!
# 在nginx.conf配置文件中http{}区域添加
    gzip  on;
    gzip_min_length  1k; 
    gzip_buffers     4 32k;
    gzip_http_version 1.1;
    gzip_comp_level 6;
    gzip_types  text/css text/xml application/javascript;
    gzip_vary on;
    
# 参数说明
gzip on;        #开启压缩功能
gzip_min_length  1k;    #设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length(内容长度)中获取,默认值是0,建议设置成大于1K,如果小于1K可能会越压越大。
gzip_buffers     4 32k;  #压缩缓冲区大小,表示申请4个单位为32K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果
gzip_http_version 1.1;  #压缩版本,用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可。
gzip_comp_level 6;  #压缩比例,用来指定GZIP压缩比,1压缩比最小,处理速度最快,9压缩比最大,传输速度快,但是处理慢,也比较消耗CPU资源。
gzip_types  text/css text/xml application/javascript;   #用来指定压缩的类型,‘text/html’类型总是会被压缩 
默认值: gzip_types text/html (默认不对js/css文件进行压缩)
#不能使用通配符 text/*
#(不论是否指定)text/html  默认压缩
# 设置压缩哪种文本文件可参考 conf/mime.types

gzip_vary on;   #启用应答头"Vary: Accept-Encoding"。和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩。其实cdn,代理服务器,原理上都是代理服务器。他们一般以url为key值进行缓存。而vary属性的设置,告诉了代理根据url缓存的同时,vary的信息也作为key。比如客户端(浏览器)请求的信息里带上了Accept-Encoding:gzip 则返回压缩副本。如果没有带这个头信息,默认返回非压缩副本。

2.5 expires缓存

# 缓存,主要针对于图片,css,js等元素更改机会比较少的情况下使用,特别是图片,占用带宽大,我们完全可以设置图片在浏览器本地缓存365d,css,js,html可以缓存个10来天,这样用户第一次打开加载慢一点,第二次,就非常快了!缓存的时候,我们需要将需要缓存的扩展名列出来!

在nginx.conf配置文件中server区域下
1. 以扩展名区分
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
                expires      365d;
        }
        location ~ .*\.(js|css)?$ {
                expires      30d;
        }

2.对目录及其进行判断
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
                expires 360d;
        }
        location ~ (robots.txt) {
                expires 7d;
                break;
        }

2.6 去掉不需要的日志统计

健康检查的日志,不用输入到log中,这些日志没有意义,分析的话只需要分析访问日志,看看一些页面链接,如200,301,404的状态,在SEO中很重要,如我们统计pv是页面计算,法尔消耗了磁盘IO,降低了服务器的性能

# 在nginx.conf配置文件server下
location ~ .*\.(js|jpg|jpeg|JPG|JPEG|css|bmp|gif|GIF)$ {
             access_log off; #对以上.结尾的文件不做日志记录
         }

2.7 目录文件访问控制

主要用在禁止目录下制定文件被访问
# 例如:1.进制访问images下php程序文件
# 在nginx.conf 配置文件中
location ~ ^/images/.*\.(php|php5|sh|py|pl)$ {
             deny all; #对 images 下以.结尾文件禁止访问
        }
        
# 多个目录书写方法
location ~ ^/images/(attachment|avatar)/.*\.(php|php5|sh|py|py)$ {
            deny all;
        }
        

2.8 对方问来源控制

需要ngx_http_access_module模块支持,默认安装

 location ~ ^/(aa)/ {
                allow 192.168.233.0/24; #允许233.0网段IP访问
                deny all;
         }
         location /bb/       { return 403 ; }
         
针对整个网站根目录访问控制
 location ~ /       {
                 allow 192.168.233.0/24; #可以写IP段,也可以写IP
                 deny all;
         }

2.9 隐藏版本号

在nginx.conf配置文件中,http区域下添加
server_tokens off;

三、 nginx升级

3.1 查看现有nginx版本

ps -ef|grep nginx 
/usr/local/nginx/sbin/nginx -V		#查看编译参数

3.2 解压编译安装

tar xf nginx-1.24.0.tar.gz 
cd nginx-1.24.0
./configure 编译参数
make 		# 不进行make install

3.3 备份就版本nginx执行文件

mv /usr/local/nginx/sbin/nginx  /usr/local/nginx/sbin/nginx$(date +F)

3.4 拷贝新版本nginx执行文件

cp /data/soft/nginx/objs/nginx   /usr/local/nginx/sbin/

3.5 执行升级

3.5.1 方法一

使用nginx自带升级方法更新升级

cd nginx-1.24.0
make upgrade

# 不报错的话说明更新成功了,然后查看nginx版本
/usr/local/nginx/sbin/nginx -V

如果遇见下面错误,需要将nginx服务停掉,然后使用绝对路径重新启动即可
[root@localhost nginx-1.22.0]# make upgrade
/usr/local/nginx/sbin/nginx -t 
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/lcoal/nginx/conf/nginx.conf test is successful
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
/bin/sh: line 0: kill: (13716) - No such process
make: *** [upgrade] Error 1

[root@localhost nginx-1.22.0]#
ps -ef|grep nginx
kill -9 nginx进程pid	# 杀掉nginx所有进程
cd /usr/local/nginx/sbin
./nginx
cd /data/soft/nginx-1.24.0/
make upgrade

3.5.2 方法二

  1. 向master进程发送USR2信号,告知版本升级,旧master进程首先将logs/nginx.pid文件重命名为nginx.pid.oldbin,然后运行新版本nginx二进制文件,启动新master进程,新master进程启动新worker进程,其中新master进程的父进程是旧master进程
ps -ef|grep nginx
kill -USR2 [old-master-pid]
  1. 向master进程发送WINCH信号,告知其优雅关闭worker进程,但旧master进程不会自动退出
kill -WINCH [old-master-pid]
  1. 如果确认worker进程正常工作,可以向旧master进程发送QUIT信号,告知其自动退出
kill -QUIT [old-master-pid]
  1. 查看升级后nginx版本
/usr/local/nginx/sbin/nginx -V

四、日志切割

#!/bin/bash

# Date:2022-3-9
# Author:lizexin
# version:1.0
# Explain:Nginx log slicing script.

# 路径
Log_Path=/usr/local/nginx/logs

# 获取昨天的日期
YESTERDAY=$(date -d "yesterday" +%Y%m%d)

# PID文件路径
Log_PID=/usr/local/nginx/logs/nginx.pid

# 分割日志
mv ${Log_Path}/access.log ${Log_Path}/access_${YESTERDAY}.log
mv ${Log_Path}/error.log  ${Log_Path}/error_${YESTERDAY}.log

# 向Nginx主进程发送USR1信号,重新打开日志文件

kill -USR1 `cat ${Log_PID}`

五、配置ssl证书

1. 进入nginx安装目录

cd /data/nginx

# 新建cert子目录,将证书上传至此目录
mkdir cert

server.crt
server.key

2. 修改配置文件

# 1.将https的server块前面的注释符号#去掉
server {
        listen       443 ssl;
        server_name  localhost;

        ssl_certificate      /data/nginx/cert/server.crt;		# 修改此处两行内容
        ssl_certificate_key  /data/nginx/cert/server.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }
    
 # 2. 开启http转发https功能
 server {
    listen       80;
    listen [::]:80 default_server;
    server_name _;
    return 301 https://$host$request_uri;
}

3. 重启验证

/data/nginx/sbin/nginx -t
/data/nginx/sbin/nginx -s reload

相关文章: