目录
1.如果要对nginx进行扩展,先将sticky注释掉,并停止服务。
2.下载sticky软件包,然后解压软件包,安装解压软件并解压sticky软件包
3.进入nginx目录,清理缓存,执行configure->make
4.将nginx复制到sbin并覆盖,切入配置目录,编辑配置文件,取消对sticky的注释并检测语法,但是此时sticky模块会与backup冲突,所以还是检测失败
2.此时通过浏览器访问172.25.32.2可以访问到server1的图片
4.此时不能通过server2的服务访问到server1的资源
一.Nginx的意义:
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
二.Nginx的安装:
1.准备Nginx安装包
2.解压并安装
tar zxf nginx-1.20.1.tar.gz
关闭debug,取消gcc编译
在 server1 安装模块
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-threads --with-file-aio --with-http_ssl_module
首次安装会失败
需要我们安装gcc编译器
第二次安装失败
安装yum install pcre-devel -y
第三次安装失败
安装yum install openssl-devel -y
最后一次模块安装成功
然后编译并安装部署
安装成功
三.在server1主机中创建一个nginx用户
useradd -d /usr/local/nginx/ -M -s /sbin/nologin nginx
四.将服务部署到server2与server3
scp -r /usr/local/nginx server2:/usr/local/
scp -r /usr/local/nginx server3:/usr/local/
五.建立软链接以便全局使用nginx
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
六.Nginx实验:
一.并发优化
ulimit -a 可以查看用户可以打开文件的限制 ##open files
sysctl -a | grep file ##打开文件的限制
///fs.file-max = 183593
free -m
二.nginx反向代理+均衡负载
1.默认轮询
只在http中添加以及最后添加一个server模块
nginx -t检测语法,nginx -s reload 重启服务
在真机中做域名解析
然后分别在server2和server3中设置配置
最后用真机充当测试机器, curl www.westos1.com
2.改变默认权重,默认为1
可以发现server2的轮询次数较多
3、ip_hash
ip_hash对后端做健康检测,加入一台机器出现问题,就会调用其它机器
(server2 nginx -s stop)
如果后端下线,则http报错502(500表示服务器错误)
在server1主机中修改配置文件,在负载均衡模块中添加ip_hash,检测语法,重启服务。
我们修改server的配置文件后检测语法然后重启
然后关闭server的nginx
然后用真机进行测试
4.备用机
当我们所有后端主机都出现问题时,备用机可以暂时的接管进行运行,但不是长久之计,需要及时修理后端服务器。
我们在server机器中将本机作为负载均衡器的备机,修改配置文件后检测与法重启服务,并且输入报错提示信息
然后我们停止server2和server3的nginx服务
[root@server2 ~]# nginx -s stop
[root@server3 ~]# nginx -s stop
最后我们用真机访问502错误,当后端主机恢复,就不会访问备用机
三、平滑升级与平滑回退
1.平滑升级
1.首先我们检查以下当前版本
2.下载新版本:http://nginx.org/en/download.html
然后解压,编译
注意:不能makeinstall
3.将新版本的nginx.conf配置修改到旧版本的配置
4.make之后备份旧程序,并拷贝新程序
5. 获取当前nginx主进程pid,也就是master进程。然后开启新版本,关闭worker进程但保留主进程master
ps ax | grep nginx ##获取当前nginx主进程pid,即master进程
kill -USR2 PID ##开启新版本
ps ax | grep nginx
curl localhost -I ##显示新版本号
kill -WINCH PID ##关闭worker进程但保留主进程
2.版本回退
如果新版本中有存在些许问题,我们也可以进行版本回退
回退的过程与更新相反,先还原nginx程序,唤醒旧进程,退出并关闭新版本
cd /usr/local/nginx/sbin/
ls
\cp -f nginx.old nginx ##还原nginx程序
kill -HUP PID ##唤醒原进程
ps ax | grep nginx
kill -WINCH PID ##回收新版本的worker进程
kill -QUIT PID ##关闭新版本主进程
ps ax | grep nginx
curl localhost -I
四、算法扩展
nginx并不支持一些算法,当我们需要使用时,则需要进行扩展。比如sticky模块,nginx本身不支持,当在配置文件中写入并调用时,会报错
1.如果要对nginx进行扩展,先将sticky注释掉,并停止服务。
2.下载sticky软件包,然后解压软件包,安装解压软件并解压sticky软件包
3.进入nginx目录,清理缓存,执行configure->make
cd nginx-1.20.1/
make clean ##清理缓存
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42
make
4.将nginx复制到sbin并覆盖,切入配置目录,编辑配置文件,取消对sticky的注释并检测语法,但是此时sticky模块会与backup冲突,所以还是检测失败
5.将之前的设定注释或删掉,重新检测语法,并开启服务
五 .nginx限流
准备一张照片
1.限制并发连接数
在真实主机进行压力测试:ab -c10 -n 10 http://172.25.32.1/download/1
显示失败次数为0
在server1主机中设定访问下载链接时,受到控制,重启服务
重新在真机执行压力测试,因为被限流,所以有部分请求被拒绝
2.限制每秒连接次数
真机中压力测试,因为设置的每秒接受一次请求,所以会有9次错误
3.排队,超过指定数量则排队访问
1.在配置文件中设定一次访问5个,超过的排队等待,因为上一个实验设定每秒通过1个请求,则访问2次,差不多10秒。
2.在真机中测试压力,大约5S之后会出现测试值
4.无延迟
在真机中进行压力测试,大约会错误一半
5.限制带宽
为了更好的使得服务器告诉运行,我们有时候会限制带宽
我们在配置文件中设定带宽50k,重启服务,注释掉上面实验的参数
限制带宽为50k,图片大小为444k,访问时间大约需要80s
六.nginx配置管理
1.自动索引
作用:时我们可以在浏览器访问,下载更方便
在配置文件中设定自动索引,注意注释上文参数设定,重启服务
然后使用浏览器访问
2.nginx expire 缓存配置
缓存可以降低网站带宽,加速用户访问。
编辑配置文件,设定对图片等进行缓存,缓存时间为1年,在此期间访问就会减少访问时间
在真机中输入多输入两次 curl -I 172.25.32.1/download/2.jpg,可以看到缓存到2022年
3.日志轮询
cd /opt/ ##第三方软件安装位置
vim nginx.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`
chmod +x nginx.sh
./nginx.sh
cd /usr/local/nginx/logs/
ls查看
有access_2021-09-09.log文件存在
4.禁用不必要的日志记录,以节省磁盘IO的消耗
在原有的基础上加入:
location /status {
stub_status on;
access_log off;
}
检查语法并且重启服务,然后在浏览器中访问该目录,在日志目录中不会生成日志记录
5.站点目录和文件的限制
在配置文件中设定指定目录只能本机访问,拒绝其他所有请求
检测与法然后重启服务,然后用真机访问status目录时,拒绝访问,报错403,(403的意思为:资源不可用,服务器理解客户的请求,但拒绝处理)
然后用本机进行测试就是可以的
6.中文乱码
nginx默认不支持中文字符,在浏览器访问时,中文会变成乱码,在nginx发布文件中加入一行中文,在浏览器中试访问为乱码
但我们在server1本机中,可以使用curl命令查看本地的发布文件,是可以正常显示中文的,编辑配置文件,设定nginx支持中文字符,并重启服务
server {
listen 80;
server_name localhost;
charset utf-8;
##多加入一行 charset utf-8;
检测语法之后重启服务,如果重新访问的仍是中文乱码,在清理浏览器缓存之后访问即可。
七.nginx 重定向
1.防止域名恶意解析到服务器IP
1.拒绝访问,报错500
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name localhost;
return 500;
charset utf-8;
##只添加了return 500;
然后用server主机进行测试
2.将所有访问重定向至指定域名
server {
listen 80;
server_name localhost;
#return 500;
rewrite ^(.*) http://www.linux.com permanent;
charset utf-8;
##只需添加rewrite ^(.*) http://www.linux.com permanent;
然后用浏览器访问server的ip,自动定向到www.linux.com
2.端口重定向
由于443是 https 使用,所以先制作一个加密证书,并移动到配置目录中,编辑配置文件,将80端口定向到443端口,检测语法,重启服务,查询端口
cd /etc/pki/tls/certs/
make cert.pem ##创建证书
mv cert.pem /usr/local/nginx/conf/
在最后添加
server {
listen 443 ssl;
server_name www.westos.com;
ssl_certificate cert.pem;
ssl_certificate_key cert.pem;
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;
}
}
server {
listen 80;
server_name www.westos.com;
rewrite ^/(.*)$ https://www.westos.com/$1 permanent;
#location / {
# proxy_pass http://westos;
# }
}
然后进行测试
在浏览器中输入172.25.32.1自动切换到www.westos.com中
3.虚拟主机重定向
1.将www.westos.org 重定向bbs.westos.org
cd 到nginx目录
cd html
mkdir bbs
vim index.html
echo bbs.wetos.com > index.html
mv bbs/ / #移动到根目录
vim nginx.conf
server {
listen 80;
server_name www.westos.com;
#rewrite ^/(.*)$ https://www.westos.com/$1 permanent;
rewrite ^/bbs$ http://bbs.westos.com permanent;
rewrite ^/(.*)$ http://bbs.westos.com/$1 permanent;
#location / {
# proxy_pass http://westos;
# }
}
server {
listen 80;
server_name bbs.westos.com;
location / {
root /bbs;
index index.html;
}
}
然后在真机使用curl命令可以查看,浏览器输入www.westos.org会自动跳转为bbs.westos.org ,注意作好地址解析
2.bbs.westos.org 重定向www.westos.org
server {
listen 80;
server_name www.westos.com;
#rewrite ^/(.*)$ https://www.westos.com/$1 permanent;
#rewrite ^/bbs$ http://bbs.westos.com permanent;
#rewrite ^/(.*)$ http://bbs.westos.com/$1 permanent;
#location / {
# # proxy_pass http://westos;
# # }
# }
if ($host = "bbs.westos.com") {
rewrite ^/(.*)$ http://www.westos.com/bbs/$1 permanent;
}
}
#server { ##全部注释掉
# listen 80;
# server_name bbs.westos.com;
#
# location / {
# root /bbs;
# index index.html;
# }
# }
检测语法重启服务,然后用真机进行测试 curl -I bbs.westos.com
八.防盗链
实验素材:
我们假设server1主机为防盗主机,server2主机为盗链主机,然后为在我们的server1当中/usr/local/nginx/html下建立一个目录download目录内下载一张图片,盗链这张图片
1.配置server2盗链主机
cd /usr/local/nginx/html
vim index.html
<html>
<body>
<br>server2</br>
<img src="http://www.westos.com/download/2.jpg">
</body>
</html>
2.此时通过浏览器访问172.25.32.2可以访问到server1的图片
3.在server1 加入防盗链,重新启动nginx
给最后server模块中加入
location ~* \.(gif|jpg|png)$ {
valid_referers none blocked www.westos.com;
if ($invalid_referer) {
return 403;
}
}
4.此时不能通过server2的服务访问到server1的资源
5.也可以通过重定向让盗链指向其他资源
将图片定向到防止盗链的图片,从而展示给想要盗链图片的人看
然后通过server访问