Linux之nginx常用模块的使用(一)

一、nginx

1. nginx简介

Nginx (engine x) 是一个高性能的http和方向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

2. nginx与apache的不同

(1)Apache处理速度很慢,占用很多内存资源,而nginx是轻量级的软件,占内存资源少
(2)功能上,Apache所有模块支持动静态编译,Nginx模块都是静态编译的,在等待过程中可以处理其他的请求,效率高
(3)处理连接方式:Nginx支持epoll,Apache不支持
(4)功能文档多,方便学习和部署
(5)抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能

二、nginx的安装

1. 准备工作:下载nginx安装包并解压

tar zxf nginx-1.17.1.tar.gz
cd nginx-1.17.1/
vim auto/cc/gcc
# debug
#CFLAGS="$CFLAGS -g"    #将debug功能关闭

Linux之nginx常用模块的使用(一)_第1张图片

2. 删除版本信息

#define NGINX_VER          "nginx/"     #将版本信息删除,注释没有用,在编译时仍会被识别

为了实验效果,这里就不删除版本信息了

Linux之nginx常用模块的使用(一)_第2张图片

3. nginx的编译和安装

因为我们需要对nginx进行编译,所以首先我们要安装gcc编译器用来编译源码

yum install -y gcc openssl-devel
./configure --prefix=/usr/local/nginx --with-file-aio   #进行编译
make && make install    #安装

Linux之nginx常用模块的使用(一)_第3张图片

Linux之nginx常用模块的使用(一)_第4张图片

4. 利用nginx自带的vim功能进行关键字检测

# vim检验关键字是否写错
mkdir ~/.vim    
cp -r contrib/vim/* ~/.vim    

5. nginx的相关命令

/usr/local/nginx/sbin/nginx    #打开nginx
/usr/local/nginx/sbin/nginx -s reload    #重新加载
/usr/local/nginx/sbin/nginx -s reopen    #重新打开
/usr/local/nginx/sbin/nginx -s stop    #关闭
/usr/local/nginx/sbin/nginx -v  #查看版本信息
/usr/local/nginx/sbin/nginx -V  #查看编译信息

使用打开命令,开启nginx,在浏览器中输入http://172.25.31.1,可以看到nginx的欢迎页面

Linux之nginx常用模块的使用(一)_第5张图片

6. 创建nginx用户(方便管理)

useradd -s /sbin/nologin nginx #创建用户
ps -ef | grep nginx     #查看nginx的主进程及工作进程
cd /usr/local/nginx/
vim conf/nginx.conf    #nginx配置文件

在未创建nginx进程时,我们看到nginx的worker进程用户所有人为nobody,为了方便识别和管理,我们创建该用户

Linux之nginx常用模块的使用(一)_第6张图片

Linux之nginx常用模块的使用(一)_第7张图片

三、nginx版本的更新和回退

假设nginx17版为旧版,nginx16版为新版

1. 下载nginx16版,进行解压和编译

tar zxf nginx-1.16.0.tar.gz  
./configure --prefix=/usr/local/nginx --with-file-aio
make
cp -f nginx /usr/local/nginx/sbin/nginx #将16的objs/nginx放入该目录下

注意:由于之前已经安装过了nginx,所以在安装nginx16时,我们只使用make命令,就可以安装,make install命令会覆盖原有的z设置

Linux之nginx常用模块的使用(一)_第8张图片

Linux之nginx常用模块的使用(一)_第9张图片

2. 版本的更新

cp -f nginx /usr/local/nginx/sbin/nginx #将16的objs/nginx放入该目录下
ps -ef | grep nginx
kill -USR2 11522        #使16版本的master进程开启
kill -WINCH 11522       #17版的master控制的worker请求处理完成后,不再接收请求
/usr/local/nginx/sbin/nginx -v  #查看版本是否更改

master进程在接到信号后,会先重新加载配置文件,然后再启动新的worker进程,并向所有老的worker进程发送信号,告诉他们可以退出了。新的worker在启动后,就开始接收新的请求,而老的worker在收到来自master的信号后,就不再接收新的请求,并且在当前进程中的所有未处理完的请求处理完成后,再退出。

Linux之nginx常用模块的使用(一)_第10张图片

3. 版本的回退

kill -HUP 11522 #是master进程,控制的worker开始接收请求
kill -WINCH 14094       #16版的worker不再接收请求
cp -f nginx /usr/local/nginx/sbin/nginx
/usr/local/nginx/sbin/nginx -v

Linux之nginx常用模块的使用(一)_第11张图片

容易出错的是,在版本回退时,要切换目录到旧版本中,让旧版本中的objs/nginx文件复制到/usr/local/nginx/sbin/nginx中

Linux之nginx常用模块的使用(一)_第12张图片

四、日志的切割

客户端对nginx的请求不断的增加,我们需要对日志进行切割,防止日志文件过大,在处理错误时不好分析

cd /usr/local/nginx/logs
mv access.log `date +%F -d -1day`_access.log    #日志的备份
/usr/local/nginx/sbin/nginx -s reopen   #重新打开
/usr/local/nginx/sbin/nginx -s reopen    #重新加载
ab -c 1 -n 100000 http://172.25.31.1/index.html         #请求100000,制造日志

1. 在测试端制造日志

Linux之nginx常用模块的使用(一)_第13张图片

2. 对日志进行备份

Linux之nginx常用模块的使用(一)_第14张图片

日志分割后如果重新打开后,日志信息没有存放在access.log文件中,可以重新加载,因为mv移动文件时,是重命名过程,进
程号不变,日志会存放在备份的文件中,重新加载,只是为了使它存放在access.log文件中

ab -c 1 -n 10 http://172.25.31.1/index.html

3. 在测试端请求10次观察新的日志是否存放在access.log

Linux之nginx常用模块的使用(一)_第15张图片

4. 日志自动备份脚本

需求:在每天的0点0分进行日志的自动备份

cd /usr/local/nginx/logs
vim backup.sh
chmod +x backup.sh
crontab -e      #创建定时任务
crontab -l      #查看定时任务

Linux之nginx常用模块的使用(一)_第16张图片

五、nginx启动脚本的制作

cp /usr/lib/systemd/system/httpd.service /etc/systemd/system/nginx.service
        系统启动脚本                            自定义启动脚本
vim /etc/systemd/system/nginx.service

Linux之nginx常用模块的使用(一)_第17张图片

/usr/local/nginx/sbin/nginx -s stop     #关闭
systemctl start nginx
ps -ef | grep nginx     #查看nginx的master和worker进程

正在运行的nginx进程必须先使用/usr/local/nginx/sbin/nginx -s stop命令关闭,再次开启,使用启动脚本可以生效

Linux之nginx常用模块的使用(一)_第18张图片

六、gzip压缩

cd /usr/local/nginx/html
cat /etc/passwd > index.html    #导入内容到发布目录
du -sh index.html       #查看大小
cd /usr/local/ngin/conf
/usr/local/nginx/sbin/nginx -s stop
vim nginx.conf
gzip  on;       #压缩
gzip_min_length 1;      #压缩最小长度
gzip_comp_level 3;      #压缩等级(0~9)
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; #压缩类型

1. 导入内容到发布目录,方便观察压缩效果

Linux之nginx常用模块的使用(一)_第19张图片

2. 配置压缩参数

Linux之nginx常用模块的使用(一)_第20张图片

3. 网页中进行测试

使用F12键可以调出控制台或者是鼠标右击选则inspect element选项

没有重新加载nginx,访问页面的大小

使用【systemctl reload nginx】命令重新加载后页面的大小

Linux之nginx常用模块的使用(一)_第21张图片

七、nginx并发数和连接速率的设置

cd /usr/local/nginx/conf
vim nginx.conf
limit_conn_zone $binary_remote_addr zone=addr:10m;
                客户端ip                域名
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
                root   html;
                #set $limit_rate 50k;    #设置连接速率(对html目录下的文件生效)
                index  index.html index.htm;
        }
        location /download/ {   #该目录是html下的目录
                limit_conn addr 1;      #连接限制为1
                limit_rate 1k;          #设置连接速率(对html/download下的文件生效)
                limit_req zone=one burst=5;    #设置并发数
        }
mkdir /usr/local/nginx/html/download
systemctl reload nginx

将上一个实验gzip的配置信息注释

Linux之nginx常用模块的使用(一)_第22张图片

创建download目录,在该目录下写入index.html。

Linux之nginx常用模块的使用(一)_第23张图片

重新加载nginx,在网页端或测试机的命令行进行测试,我们会发现网页加载速度非常慢(速率的限制),如果访问的并发数超过定义的并发数,会有错误出现

ab -c 5 -n 1000 http://172.25.31.1/download/index.html  #不会报错
ab -c 7 -n 1000 http://172.25.31.1/download/index.html  #超过并发数,报错
http://172.25.65.1/index.html     #网页缓慢加载

Linux之nginx常用模块的使用(一)_第24张图片

Linux之nginx常用模块的使用(一)_第25张图片

八、获取真实客户端的ip

./configure --prefix=/usr/local/nginx --with-file-aio --with-http_realip_module
make
cp -f nginx /usr/local/nginx/sbin/nginx
vim /usr/local/nginx/sbin/nginx/conf/nginx.conf
systemctl restart nginx
/usr/local/nginx/sbin/nginx -t    #检验是否写错

编译后将编译好的objs/nginx文件复制到/usr/local/nginx/sbin/nginx中,重启nginx

Linux之nginx常用模块的使用(一)_第26张图片

编写配置文件,重启nginx服务

Linux之nginx常用模块的使用(一)_第27张图片

在server1中进行测试

systemctl restart nginx
vim /etc/hosts
172.25.31.1     server1 server1.example.com
curl -H "X-Forwarded-For: 2.2.2.2,172.25.31.1" server1.example.com

Linux之nginx常用模块的使用(一)_第28张图片

九、nginx实现端口转发

将获取客户端ip中的配置注释

目的:访问某一主机,该主机中没有该资源,通过端口转发,可以使用其他主机中的资源

server1中操作

vim /usr/local/nginx/sbin/nginx/conf/nginx.conf
server {
        listen       80;
        server_name  localhost;
        set_real_ip_from 172.25.31.2;
        real_ip_header X-Forwarded-For;
        real_ip_recursive on;
systemctl reload nginx

Linux之nginx常用模块的使用(一)_第29张图片

systemctl reload nginx重新加载服务,并在html目录下写入默认发布文件

Linux之nginx常用模块的使用(一)_第30张图片

server2中操作

vim /usr/local/nginx/sbin/nginx/conf/nginx.conf
注释#user  nginx nginx;
http {
    upstream westos {
        server 172.25.31.1:80;
    }
    include       mime.types;
    default_type  application/octet-stream;
server {
        listen 80;
        server_name www.westos.org;
        location / {
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    #设置后端的服务器获取用户的主机名或真实ip地址,以及代理者的真实ip地址
                proxy_pass http://westos;
        }
        }
/usr/local/nginx/sbin/nginx/ -s reload

Linux之nginx常用模块的使用(一)_第31张图片

Linux之nginx常用模块的使用(一)_第32张图片

Linux之nginx常用模块的使用(一)_第33张图片

/usr/local/nginx/sbin/nginx -s reload 命令重新加载,然后在html目录下写默认发布文件

Linux之nginx常用模块的使用(一)_第34张图片

在测试机中测试

通过访问server2的域名,我们可以看到,访问到的页面内容是server1的

vim /etc/hosts
172.25.31.2 www.westos.org
curl www.westos.org

Linux之nginx常用模块的使用(一)_第35张图片

十、限制网页图片大小

重新进行编译,在编译时需要gd函数库,我们首先要安装该函数库,然后在进行编译和make安装

下载gd-devel-2.0.35-26.el7.x86_64.rpm
yum install -y gd-devel-2.0.35-26.el7.x86_64.rpm
cd nginx-1.17.1
./configure --prefix=/usr/local/nginx --with-file-aio --with-http_realip_module --with-http_image_filter_module=dynamic
make

Linux之nginx常用模块的使用(一)_第36张图片

进行编译和安装(这里就不重复了)

cp -f nginx /usr/local/nginx/sbin/nginx
mkdir /usr/local/nginx/modules
cp ngx_http_image_filter_module.so /usr/local/nginx/modules/

Linux之nginx常用模块的使用(一)_第37张图片

编辑配置文件,设置图片的大小

vim /usr/local/nginx/conf/nginx.conf
load_module modules/ngx_http_image_filter_module.so;
location /download/ {
            limit_conn addr 1;
            limit_rate 1k;
            limit_req zone=one burst=5;
            image_filter resize 150 100;
        }
systemctl reload nginx
/usr/local/nginx/sbin/nginx -t    #用于检验

Linux之nginx常用模块的使用(一)_第38张图片

Linux之nginx常用模块的使用(一)_第39张图片

测试

未重新加载nginx时测试结果如下

Linux之nginx常用模块的使用(一)_第40张图片

使用【systemctl reload nginx】命令,重新启动配置文件后,图片大小改变

Linux之nginx常用模块的使用(一)_第41张图片

十一、nginx网页安全认证

cd nginx-1.17.1
./configure --prefix=/usr/local/nginx --with-file-aio --with-http_realip_module --with-http_image_filter_module=dynamic --with-http_ssl_module
make
cp -f nginx /usr/local/nginx/sbin/nginx
cp ngx_http_image_filter_module.so /usr/local/nginx/modules/

Linux之nginx常用模块的使用(一)_第42张图片

编辑配置文件,开启ssl认证

vim /usr/local/nginx/conf/nginx.conf

Linux之nginx常用模块的使用(一)_第43张图片

生成安全认证文件

cd /etc/pki/tls/certs/
make cert.pem
cn --> shaanxi --> xi'an --> westos --> linux --> server1 --> [email protected]

Linux之nginx常用模块的使用(一)_第44张图片

Linux之nginx常用模块的使用(一)_第45张图片

将钥匙复制到/usr/local/nginx/conf配置文件中。创建默认发布目录/web和默认发布文件index.html

cp cert.pem /usr/local/nginx/conf
mkdir /web
vim /web/index.html

在真机中添加解析

vim /etc/hosts
172.25.31.1 server1 server1.example.org www.westos.org

 Linux之nginx常用模块的使用(一)_第46张图片

浏览器中输入https://www.westos.org,首先需要在浏览器中添加证书

Linux之nginx常用模块的使用(一)_第47张图片

Linux之nginx常用模块的使用(一)_第48张图片

你可能感兴趣的:(nginx的安装,端口转发,网页的压缩gzip,安全认证https,nginx的并发和速率限制)