lnmp 四之nginx(web服务器,反向代理,负载均衡以及其他配置管理)

编译安装nginx

前言

linux三种软件包安装方式

  • 源码安装
    在企业中,我们往往需要给一些架构中的软件定制功能,这就必须采用源码编译安装软件。安装一个源码包,需要我们自己把源代码编译成二进制的可执行文件。
    源码编译安装三部曲:configure ----> make ---->make install。
    优点:
    (1)修改源代码自定义功能
    (2)定制相关的功能
    缺点:
    (1)编译麻烦
    (2)缺乏自动依赖管理,软件升级麻烦
  • rpm(redhat package manager)包安装
    linux系统中存在着一个关于RPM的数据库,它记录了安装的包以及包与包之间依赖相关性。RPM包是预先在linux机器上编译好并打包好的文件,安装起来非常快捷。但是也有一些缺点,比如安装的环境必须与编译时的环境一致或者相当;包与包之间存在着相互依赖的情况;卸载包时需要先把依赖的包卸载掉,如果依赖的包是系统所必须的,那就不能卸载这个包,否则会造成系统崩溃。
  • yum安装
    yum工具比rpm工具好用多了,yum最大的优势在于可以联网去下载所需要的rpm包,然后自动安装,在这个工程中如果要安装的rpm包有依赖关系,yum会帮你解决掉这些依赖关系依次安装所有rpm包。

操作步骤

1.准备阶段
wget http://nginx.org/download/nginx-1.18.0.tar.gz(也可以直接在官网自行下载)
yum install gcc -y 

2.解压文件
tar zxf nginx-1.20.1.tar.gz		解压安装包并进入
cd nginx-1.20.1/
ls

3.configure:检查系统环境是否符合要求
在开始安装服务之前,需要执行configure脚本,它会自动的对当前系统进行
一系列的评估,如源文件、软件依赖库、编译器、汇编器、连接器检查等等
./configure --help
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio
选择的模块含义:
--prefix=/usr/local/nginx         		#指定安装路径
--with-http_ssl_module            		#支持https模块
--with-http_stub_status_module    		#监控模块
--with-threads                    		#支持线程池
--with-file-aio                   		#支持AIO文件

4.解决报错
yum install -y pcre-devel
yum install -y openssl-devel
再次configure后出现makefile文件

5.编译
make

4.安装
make install

5.优化编译
正常编译下是6M,重新关闭调试后为1000k
cd /usr/local/nginx/
du -sh
cd ..
rm -fr nginx
cd ~/nginx-1.18.0/
ls
make clean
ls
vim auto/cc/gcc
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio
make
make install
cd /usr/local/nginx/
du -sh

6.设置环境变量
vim .bash_profile 
添加这一句::/usr/local/nginx/sbin
source .bash_profile 
which nginx

7.启动nginx
nginx -t             			#首先检查语法
nginx                           #如果语法没有问题则启动nginx
netstat -antlp | grep :80
ps -ax | grep nginx

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
安装完pcre包之后再次配置
在这里插入图片描述
又开始报错,安装openssl库。
在这里插入图片描述
在这里插入图片描述
configure成功开始make
在这里插入图片描述
开始make install
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
占用内存变小了
在这里插入图片描述
设置环境变量
在这里插入图片描述
在这里插入图片描述
启动nginx
在这里插入图片描述
可以在浏览器查看
在这里插入图片描述

nginx并发优化

1.nginx作为http服务器时:
max_clients = worker_processes * worker_connections

2.nginx作为反向代理服务器时:
max_clients = worker_processes * worker_connections / 2   
#这里除以2的原因是nginx做反向代理时既连接客户端也连接后台服务器,消耗两倍的连接量。

nginx做web服务器

1.修改nginx配置文件
cd /usr/local/nginx/conf
vim nginx.conf  
nginx -s reload 
ps -ax | grep nginx

2.测试nginx的高并发处理能力
补充:ab( apache bench )是apache下的一个工具,主要用于对web站点做压力测试(若使用需安装httpd-tools工具)
基础用法:  
-c选项为一次发送的请求数,即并发量
-n选项为请求次数
ab -c1 -n 50000 http://192.168.1.10/index.html

-----
开始优化
3.创建nginx用户
useradd -M -d /usr/local/nginx/ -s /sbin/nologin nginx
-M不要自动建立用户的登入目录,-d指定用户家目录 -s指定用户登入后所使用的shell,这里nginx设置为不能登陆的用户
id nginx 

4.修改nginx配置文件
cd /usr/local/nginx/conf
vim nginx.conf
   user  nginx;
	
 	events {
	   worker_connections  65535;      #设置工作的连接数
 	}

5.设置用户打开文件的数量限制
sysctl -a | grep file             #查看系统支持打开文件数量限制
vim /etc/security/limits.conf     #设置用户打开文件的数量限制,大于等于上边设置的工作连接数
nginx           -       nofile          65536

6.刷新
nginx -s reload

7.测试
ab -c1 -n 50000 http://192.168.1.10/index.html

在这里插入图片描述
在这里插入图片描述
开始压测
在这里插入图片描述
在这里插入图片描述
开始优化
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实际测试并没有快很多,可能是压测的请求数比较小。
在这里插入图片描述

nginx反向代理机制

nginx反向代理官网

1.修改nginx配置文件
cd /usr/local/nginx/conf
vim nginx.conf
- worker_cpu_affinity 01 10; 	       #1代表内核开启,0代表内核关闭;cpu亲和(绑定)
- multi_accept on; 	                   #告诉nginx收到一个新连接通知后接受尽可能多的连接(默认打开)
- use epoll; 		                   #使用epoll模型,默认就是使用epoll模型
- 开启文件高效传输模式,同时设置tcp_nopush和tcp_nodelay为on,可以防止网路和磁盘IO阻塞。
	sendfile on;
	tcp_nopush on; 
	tcp_nodelay on;	

2.检查语法
nginx -t

3.重启服务
nginx -s reload

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

nginx负载均衡实验

1.打开server2和server3的apache服务,并写好默认发布文件index.html
yum install -y httpd
systemctl start httpd
echo server2 > /var/www/html/index.html
curl localhost

yum install -y httpd
systemctl start httpd
echo server3 > /var/www/html/index.html
curl localhost

2.修改server1的nginx配置文件
vim nginx.conf
在httpd{}里面增加一个server服务和负载均衡器lyueyue,是nginx的反向代理服务,当客户机访问www.lyueyue.org时,nginx通过location转发到负载均衡器 lyueyue上

    upstream lyueyue {
    server 192.168.1.11:80
    server 192.168.1.12:80
    }

    server {
                listen 80;
                server_name www.lyueyue.org;

                location / {
                        proxy_pass http://lyueyue;
                }
           }

3.检查语法并重载
nginx -t
nginx -s reload

4.真机
在server4上作解析

5.测试
curl www.lyueyue.org

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在server4上测试
在这里插入图片描述
在这里插入图片描述

nginx负载均衡实验的补充

  • backup: 如果server2和server3都不能访问,那么策略会转向 backup(备用服务)即本机地址。
    在这里插入图片描述
  • weight权重: 权重越大,承担的访问量越大,默认是1。
    在这里插入图片描述
    在这里插入图片描述
  • ip_hash算法: 源地址不变,则后端调度不变,同一个ip过来的请求会发往同一个后端,不会改变。
1.修改nginx配置文件
vim nginx.conf
注意:添加ip_hash时要注释掉backup选项,因为backup不支持ip_hash算法,同时开启会报错。

2.检查配置文件并重载服务
nginx -t
nginx -s reload

3.在server4上测试
for i in {1..6};do curl www.lyueyue.org;done

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • sticky cookie 算法(针对浏览器访问的优化):
  • 为什么需要此算法?client —> cdn —> server cdn是反向代理,如果使用ip_hash算法,nginx所拿到的客户端的ip都是一个,是cdn的地址。
    Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route。
  • 流程如下:
    (1)客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。
    (2)后端服务器处理完请求,将响应数据返回给nginx。
    (3)此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值。
    (4)客户端接收请求,并保存带route的cookie。
    (5)当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器。
1.解压软件
wget https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/08a395c66e42.zip
unzip 08a395c66e42.zip
cd nginx-1.18.0/
make clean 

2.重新编译
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42
make
cd objs/
nginx -s stop
cp nginx /usr/local/nginx/sbin/ -f 
nginx -v
nginx

3.修改配置文件
cd /usr/local/nginx/conf
vim nginx.conf
21     sticky;

4.检查配置文件并重载
nginx -t
nginx -s reload

5.测试
curl www.lyueyue.org

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
重启nginx
在这里插入图片描述
修改配置文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

nginx的平滑升级与回退(热更新热回退)

版本热更新

1.下载nginx新版本,正常执行./configure和make但不要执行make install
cd nginx-1.19.5/
vim auto/cc/gcc                        #关闭debug功能
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42
make

2.备份源程序
cd /usr/local/nginx/sbin
cp nginx nginx.old

3.拷贝新程序
cd nginx-1.19.5/objs
cp -f nginx /usr/local/nginx/sbin

4.获取当前nginx主进程pid
ps ax | grep nginx

5.升级新程序
kill -USR2 119387            
ps ax | grep nginx
#kill -USR2 旧版程序的主进程号或进程文件名 
#此时旧的Nginx主进程将会把自己的进程文件改名为.oldbin,然后执行新版 Nginx。新旧Nginx会同时运行,共同处理请求

6.查看当前版本
nginx -v

7.关闭原worker进程但保留主进程:为了可以回退
kill -WINCH 119387
ps ax | grep nginx
#kill -WINCH 旧版主进程号
#新版的Nginx的工作进程会逐渐取代旧版工作进程。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

版本热回退

1.还原nginx程序
cd /usr/local/nginx/sbin
cp nginx.old  nginx

2.唤醒原进程
kill -HUP 119387                  #不重载配置启动进程
ps ax | grep nginx

3.回收新版本的worker进程
kill -WINCH 125256   
ps ax | grep nginx

4.关闭新版本主进程
kill -QUIT 125256                 #从容关闭进程
ps ax | grep nginx

5.查看版本
nginx -v

在这里插入图片描述
版本回退成功
在这里插入图片描述

nginx限流

官方参考手册

控制单IP并发连接数

1.检查nginx服务启动
ps ax | grep nginx

2.创建download发布目录,并放几张图进去
cd /usr/local/nginx/html/
mkdir download
cd download
chmod 777 *
ll

3.修改nginx配置文件
#$binary_remote_addr 表示通过remote_addr这个标识来做限制
#zone=addr:10m 表示生成一个大小为10M,名字为addr的内存区域
vim nginx.conf
    limit_conn_zone $binary_remote_addr zone=addr:10m;
        location /download/ {
            limit_conn addr 1;          #限制并发数
            limit_rate 50k;             #限制带宽
           }

4.重启nginx
nginx -t
nginx -s reload

5.测试
ab -c10 -n10 http://192.168.1.10/download/yueyue.jpg
ab -c1 -n10 http://192.168.1.10/download/yueyue.jpg

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
重启nginx
在这里插入图片描述
开始测试
先在浏览器上访问
在这里插入图片描述
使用curl测试
在这里插入图片描述
在这里插入图片描述

设置单位时间内的请求数目

1.修改nginx配置文件
#rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次
#limit_req zone=one;                  #限制请求数目为1
#limit_req zone=one burst=5           #5个人排队
vim nginx.conf
	limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
            limit_req zone=one burst=5;	

2.重启nginx
nginx -t
nginx -s reload

3.测试
ab -c1 -n 10 http://192.168.1.10/download/dog.gif

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

限制带宽(下载速度)

1.查看请求的文件大小
du -sh yueyue.jpg

2.修改nginx配置文件
limit_rate 50k;			             #限制带宽,其实前面已经用过了。

3.重启nginx
nginx -t
nginx -s reload

4.测试
ab -c1 -n 5 http://192.168.1.10/download/yueyue.jpg

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

nginx其他配置管理

自动索引

自动索引:方便查询
vim nginx.conf
	location / {
	    autoindex on;
	}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Nginx expire缓存配置

Nginx expire缓存配置: 缓存可以降低网站带宽,加速用户访问
vim nginx.conf
	location ~ .*\.(gif|jpg|png)$ {
	    expires 365d;
	    root /html;
	}

在这里插入图片描述
在这里插入图片描述
curl -I 查看header头信息
在这里插入图片描述

日志轮询

1.编写文件
cd /usr/local/nginx/logs
vim /opt/nginxlog.sh 
#!/bin/bash
cd /usr/local/nginx/logs && mv access.log access_$(date +%F -d -1day).log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`   #重启
	
2.再加入crontab定时任务
crontab -e
crontab -l
00 00 * * * /opt/nginxlog.sh &> /dev/null
为了安全,日志目录不需要给你nginx用户访问权限
chmod -R 700 /usr/local/nginx/logs

在这里插入图片描述
定时执行
在这里插入图片描述

禁用不必要的日志

禁用不必要的日志记录,以节省磁盘IO的消耗
示例一:
	location ~ .*\.(js|jpg|jpeg|png|css|bmp|gif)$ {
		access_log off;
	}
示例二:
        location /status {
            access_log off;           #关闭日志
            stub_status on;
            allow 127.0.0.1;
            deny all;
        }

在这里插入图片描述
在这里插入图片描述
使用本机正常访问
在这里插入图片描述
使用server4访问被拒绝
在这里插入图片描述

访问文件的限制

这部分结合上面的截图理解

对站点目录和文件的限制
示例一:
	location ~ ^/images/.*\.(sh|php)$ {
	                deny all;
	        }
示例二:
        location /status {
            access_log off;
            stub_status on;
            allow 127.0.0.1;          #只允许本机访问
            deny all;
        }

中文乱码

中文乱码
	charset utf-8;

实验前准备:首先拷贝一份中文文档到发布目录下
在这里插入图片描述
在server4上访问发现乱码
在这里插入图片描述
重新修改配置文件
在这里插入图片描述
在这里插入图片描述
再次测试
在这里插入图片描述

nginx重定向

Nginx 禁止IP访问

我们在使用过程中会遇到很多的恶意IP攻击,这个时候就要用到 Nginx 禁止IP访问了。

1.编写文件
vim nginx.conf
禁止通过IP直接访问网站 返回500错误

2.重启服务
nginx -s reload

在这里插入图片描述
在这里插入图片描述
使用ip访问报错,使用域名正常访问。
在这里插入图片描述

重定向至域名

访问的是ip地址,但是自动重定向到域名。

重定向:
vim nginx.conf
	server { 
	listen 80; 
	server_name _; 
	rewrite ^(.*) http://www.lyueyue.org permanent; 
	} 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

http(80)重定向https(443)

80重定向443:
1.创建密钥和证书
cd /etc/pki/tls/certs
ls
vim Makefile   #Makefile中有生成密钥的方式,所以要到这个目录下生成
make cert.pem
mv cert.pem /usr/local/nginx/conf        #将认证文件移到对应的目录

2.修改配置文件
vim nginx.conf
	server {
		listen 80;
		server_name www.lyueyue.org;
		rewrite ^/(.*)$ https://www.lyueyue.org/$1 permanent;
	}
修改https对应的部分

3.重启nginx
nginx -t
nginx -s reload

4.测试
netstat -antlp             #查看443端口是否打开

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
修改配置文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面已经完成了https加密访问,但还需要手动输入https,下面打开http转https,用户直接通过https加密访问服务器。
$1代表匹配所有 / 字符
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

www.lyueyue.org/bbs 重定向bbs.lyueyue.org

1.建立默认发布目录
mkdir /bbs
echo bbs.lyueyue.org > /bbs/index.html

2.修改配置文件
vim nginx.conf
www.lyueyue.org/bbs 重定向bbs.lyueyue.org:
        server_name www.lyueyue.org;
        rewrite ^/bbs$ http://bbs.lyueyue.org permanent;
        rewrite ^/bbs/(.*)$ http://bbs.lyueyue.org/$1 permanent;

    server {
        listen 80;
        server_name bbs.lyueyue.org;
        location / {
            root /bbs;
            index index.html;
        }
    }

3.重启nginx
nginx -t
nginx -s reload

4.测试
curl -I www.lyueyue.org/bbs
curl -I www.lyueyue.org/bbs/index.html
curl http://bbs.lyueyue.org/index.html       #这一步需要做host解析

建立默认发布目录
在这里插入图片描述
定义一个虚拟主机服务,访问域名是bbs.lyueyue.org ,默认发布目录是/bbs。
在这里插入图片描述
在这里插入图片描述
测试
在这里插入图片描述

bbs.lyueyue.org 重定向www.lyueyue.org/bbs

1.建立默认发布目录
mkdir /www
echo www.lyueyue.org > /www/index.html
cd /www
mkdir bbs
cd bbs
echo bbs.lyueyue.org-2 > index.html

2.修改配置文件
vim nginx.conf
bbs.lyueyue.org 重定向www.lyueyue.org/bbs:
        if ($host = "bbs.lyueyue.org"){
            rewrite ^/(.*)$ http://www.lyueyue.org/bbs/$1 permanent;
	}

3.重启nginx
nginx -t
nginx -s reload

4.测试
curl -I bbs.lyueyue.org

建立默认发布目录
在这里插入图片描述
在这里插入图片描述
修改配置文件
在这里插入图片描述
重启
在这里插入图片描述
测试
在这里插入图片描述
在浏览器中访问
输入bbs.lyueyue.org重定向到www.lyueyue.org/bbs
在这里插入图片描述

防盗链

1.修改配置文件
vim nginx.conf
当访问bbs.lyueyue.org时,指向默认目录。

2.重启nginx
nginx -t
nginx -s reload

3.配置server2上的http服务
当访问server2上的http发布文件时,盗链server1(nginx服务)的内容
cd /var/www/html
vim daolian.html
<img src="http://www.lyueyue.org/download/yueyue.jpg"/>
systemctl restart httpd

4.测试
在server4上测试 盗链成功

5.设置防盗链
vim nginx.conf
        location ~ \.(jpg|png)$ {
            valid_referers none blocked www.lyueyue.org;
            if ($invalid_referer) {
                return 403;
                #rewrite ^/           #或者直接重定向到别的服务器 http://www2.lyueyue.org/daolian.jpg;
            }
        }

6.重启nginx
nginx -t
nginx -s reload

7.测试
访问图片失败

8.也可以打开重定向,转到其他服务器
这里就不演示了

在这里插入图片描述
在这里插入图片描述
配置server2上的http服务
在这里插入图片描述
测试成功
在这里插入图片描述
设置防盗链
在这里插入图片描述
重启
在这里插入图片描述
测试

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值