文章目录
- 一、nginx的LAMP架构
- 1、nginx并发优化
- 2、反向代理和负载均衡
- (1)、默认轮询
- (2)、权重轮询
- (3)、ip_hash
- (4)、备用机
- 3、nginx平滑升级
- 4、nginx版本回退
- 5、nginx限流
- (1)、控制单IP并发连接数
- (2)、限制请求数和速度
- (3)、排队
- (4)、无延迟
- (5)、限制带宽
- 5、nginx配置管理
- (1)、自动索引
- (2)、Nginx expire缓存配置
- (3)、日志轮询
- (4)、中文乱码
- 6、nginx重定向
- (1)、防止域名恶意解析到服务器ip
- (2)、重定向域名
- (3)、重定向端口
- (3)、虚拟机重定向
- a、www.westos.org 重定向bbs.westos.org
- b、bbs.westos.com定向到www.westos.com/bbs
- 7、nginx防盗链
一、nginx的LAMP架构
1、nginx并发优化
cd /usr/local/nginx/conf
vim nginx.conf
nginx.conf参数意义
参数 | 意义 |
worker_processes 2 | worker进程开启,最多开启8个 |
worker_cpu_affinity 01 10; | cpu有多少个核,就有几位数,1代表内核开启,0代表内核关闭 |
multi_accept on; | 告诉nginx收到一个新连接通知后接受尽可能多的连接 |
use epoll; | 使用epoll模型 |
开启文件高效传输模式,同时设置tcp_nopush 和tcp_nodelay 为on,可以防止网路和磁盘IO阻塞 | sendfile on;tcp_nopush on; tcp_nodelay on; |
2、反向代理和负载均衡
(1)、默认轮询
补充:
使用nginx配置代理的时候,肯定是要用到http_proxy模块。这个模块也是在安装nginx的时候默认安装。它的作用就是将请求转发到相应的服务器。
当nginx做反向代理的时候,nginx采用HTTP/1.1协议和客户端进行通信。使用HTTP/1.0协议和后端,也就是被代理的服务器进行通信。
在配置反向代理的时候,只要配置上这个参数就能完成反向代理的功能,其余的参数结合自己的实际情况去添加,不添加也可以。
字段:proxy_pass URL
proxy_pass 后边配置ip地址也可以,配置域名也可以,当然是代理服务器必须能够访问后端服务器。
此参数要配置在location里边。
cd /usr/local/nginx/conf/
vim nginx.conf
http {
upstream westos {
server 172.25.76.2:80;
server 172.25.76.3:80;
}
include mime.types;
default_type application/octet
server {
listen 80;
server_name www.westos.com
location / {
proxy_pass http://westos;
}
nginx -t
nginx -s reload
修改vm2和vm3的发布文件内容,方便后续测试查看实验效果
cd /usr/local/nginx/html
echo vm2 > index.html
curl localhost
vm2
在真机修改域名的地址解析
vim /etc/hosts
172.25.76.1 www.westos.com
在真机测试curl www.westos.com
发现vm2和vm3出现的频率为1:1
(2)、权重轮询
cd /usr/local/nginx/conf
vim nginx.conf
为两台轮询主机设置权重
nginx -t
nginx -s reload
真机测试
for i in {1..10} ;do curl www.westos.com ; done
(3)、ip_hash
ip_hash;
nginx -t
nginx -s reload
(4)、备用机
vim /usr/local/nginx/conf/nginx.conf
#ip_hash;
server localhost backup;
server 172.25.76.2:80 weight=4;
server 172.25.76.3:80;
nginx -t
nginx -s reload
停掉vm2和vm3的nginx服务,在真机访问www.westos.com
当有一台主机nginx服务时,备用主机将不会被启用。这里启动了vm2的nginx服务
3、nginx平滑升级
下载nginx新版本软件,正常执行./configure 和make 但不要执行make install
备份原程序
cd /usr/local/lnmp/nginx/sbin
cp nginx nginx.old
cd auto/
cd cc/
vim gcc
注释掉该行
CFLAGS="$CFLAGS -g"
备份旧版本的文件
ps ax | grep nnginx
查看nginx进程
升级新程序
kill -USR2 master进程
kill -USR2
杀掉master进程
关闭原worker进程但保留主进程:为了回退
kill -WINCH 主进程
查看新进程
cuel -I localhost或nginx -v
查看当前运行的nginx 版本号
4、nginx版本回退
cp -f nginx.old nginx 还原nginx程序
kill -HUP old process 唤醒原进程
kill -WINCH new process 回收新版本的worker进程
kill -QUIT new process 关闭新版本主进程
5、nginx限流
实验素材准备:
实验前的对照组测试,在真机进行测试
ab -c10 -n 10 http://172.25.76.1/download/vim.jpg
(1)、控制单IP并发连接数
在vm1修改nginx配置文件,检测语法,重启服务
cd /usr/local/nginx/conf/
vim nginx.conf
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
#$binary_remote_addr 表示通过remote_addr这个标识来做限制
#zone=addr:10m 表示生成一个大小为10M,名字为addr的内存区域
...
server {
location /download/ {
limit_conn addr 1; #限制并发数
limit_rate 50k; #限制带宽
}
}
在真机测试,由于被设置了限流,有部分请求被拒绝
(2)、限制请求数和速度
限制单位时间内的请求数目,以及速度限制:
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
#rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次
...
server {
location / {
limit_req zone=one;
# limit_req zone=one burst=5
# limit_req zone=one burst=5 nodelay;
}
}
在真机测试
ab -c1 -n 10 http://download/vim.jpg
(3)、排队
超过指定访问数量则排队访问
cd /use/local/nginx/conf
vim nginx.conf
location /download {
limit_conn addr 1;
limit_req zone=one burst=5;
#设置一次访问5个。超过的排队等待。之前的时实验设定为一秒通过一个请求因此-n 10共会访问两次。访问时间为10秒左右
nginx -t
nginx -s reload
在排队等待时会出现等待的感觉(这种感觉不太好受哈哈哈哈)
最终用时9。002秒,10个请求全部通过
(4)、无延迟
如果请求通过需要等待很长时间会直接影响用户体验或时工作效率,因此须要时应当设置对所有请求无延迟
cd /use/local/nginx/conf
vim nginx.conf
---
location /download {
imit_conn addr 1;
limit_req zone=one burst=5 nodelay;
}
---
nginx -t
nginx -s reload
真机测试
但这种无延迟时是相对的,当请求数量大到一定程度的时候,也会出现等待的情况。
(5)、限制带宽
cd /use/local/nginx/conf
vim nginx.conf
---
location /download {
imit_conn addr 1;
#limit_req zone=one burst=5 nodelay;
limit_rate 50k;
}
---
nginx -t
nginx -s reload
限制带宽为50k,测试文件大小为444k,大致需要80s左右
5、nginx配置管理
(1)、自动索引
下载方便
location / {
autoindex on;
}
(2)、Nginx expire缓存配置
缓存可以降低网站带宽,加速用户访问
location ~ .*\.(gif|jpg|png)$ {
expires 365d;
root /www;
}
curl命令访问素材文件,发现文件可以缓存到2022年(即一年之后)
(3)、日志轮询
cd /opt/
ls
cat nginx.sh
chmod +x nginx.sh
./nginx.sh
cd /use/local/nginx/logs/
ls
access_2021-09-25.log
给脚本执行权限,执行脚本,切入到日志目录,查看生成的日志文件
禁用不必要的日志记录,以节省磁盘IO的消耗
location ~ .*\.(js|jpg|jpeg|png|css|bmp|gif)$ {
access_log off;
}
location /status {
stub_status on;
access_log off;
}
nginx -t
nginx -s reload
站点目录和文件的限制
location ~ ^/images/.*\.(sh|php)$ {
deny all;
}
除本机,其他主机不可访问该目录
在真机访问vm1的status目录
本机访问status目录,访问成功。
(4)、中文乱码
vim nginx.conf
charset utf-8;
设置中文乱码前
设置中文乱码后
6、nginx重定向
(1)、防止域名恶意解析到服务器ip
return 500
访问本机发现500的错误
(2)、重定向域名
编辑配置文件,设定将所有访问请求重定向至指定域名
cd /use/local/nginx/conf
vim nginx.conf
---
server {
listen 80;
server_name localhost;
rewrite ^(.*) http://www.baidu.com permanent;
---
nginx -t
nginx -s reload
浏览器测试:输入172.25.76.1会跳转至www.baidu.com
(3)、重定向端口
cd /etc/pki/tls/certs
make cert.pem #生成证书
查看证书是否生成
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;
#}
}
}
---
nginx -t
nginx -s reload
浏览器测试
curl语句测试
(3)、虚拟机重定向
a、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;
}
}
///
nginx -s reload
b、bbs.westos.com定向到www.westos.com/bbs
7、nginx防盗链
盗窃主机vm2: 172.25.76.2
防盗主机vm1: 172.25.76.1
实验效果:
盗窃主机vm2不可以访问vm1上的图片,且会访问到404或者禁止盗链的图片
在vm2中发布目录编写html文件
浏览器访问172.25.76.2,出现vim.jpg图片
修改vm1的nginx配置文件,添加防盗链配置
浏览器访问vm2发现图片无法访问
再修改配置文件,重定向到防盗图片
差一张图,妹做出来