文章目录
前言
本节首先补充反向代理负载均衡中的nginx模块编译,虚拟主机和安全控制,其中安全控制中重点归纳:限制并发连接、限制请求数、限制速率;另外,总结nginx中的服务常规设置,包括:https的配置、自动索引、缓存配置、站点限制、中文乱码、日志轮转以及重定向;本节过后,更加全面的了解nginx的功能,并熟悉如何去管理nginx。
nginx官方网址:https://docs.nginx.com/nginx/admin-guide/security-controls/controlling-access-proxied-http/
一、反向代理负载均衡补充
1.nginx模块编译
nginx模块编译:当功能缺失的时候,通过另外一种方式进行追加;源码功能上的重新编译,从而获取新的功能
cookie适合有CDN(服务端主机的访问地址是CDN,理解为调度器的ip去访问后端)和中间有反向代理的架构;ip_hash不能拿到真正的客服端地址,拿到的是CDN或者调度器的ip,所以没有办法对客户端ip的访问进行均衡
先停止nginx服务
[root@server1 conf]# nginx -s stop
解压包
[root@server1 ~]# yum install -y unzip
[root@server1 ~]# unzip nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip
本实验nginx版本为nginx-1.22.1,故cd后,清理后进行重新编译(用到解压后的文件)
[root@server1 ~]# cd nginx-1.22.1/
[root@server1 nginx-1.22.1]# make clean
[root@server1 nginx-1.22.1]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module
--add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42
[root@server1 nginx-1.22.1]# make ##把此模块的功能和二进制程序进行重新编译,生成新的二进制程序
复制编译好的文件对nginx-1.22.1版本文件进行覆盖
[root@server1 nginx-1.22.1]# \cp -f objs/nginx /usr/local/nginx/sbin/nginx
修改配置文件文件
[root@server1 objs]# cd /usr/local/nginx/conf/
[root@server1 conf]# vim nginx.conf
...
upstream westos {
#ip_hash; ##根据ip来源进行负载均衡,来自同一个客服端的服务器,就发往同一个后端服务器
##客户端请求不需要在服务端来回切换,比较适合实际生产环境;但是不支持backup
sticky; ##基于cookie的负载均衡,设置前需要将第三方模块和nginx源码进行编译,nginx -t语法检测才可
##如果是nginxplus,商业版本,则该模块已编译好,不需要手动编译
server 192.168.117.12 weight=2; ##加权重
server 192.168.117.13:8080;
#server 192.168.117.11:8080 backup;
}
检测语法
[root@server1 conf]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
启动服务
[root@server1 conf]# nginx
测试:
必须通过浏览器测试
使用浏览器测试 按F12,进行刷新可以查看cookie值
2.虚拟主机:基于域名
[root@server1 objs]# cd /usr/local/nginx/
[root@server1 nginx]# mkdir /www1/
[root@server1 nginx]# echo web1 > /www1/index.html
[root@server1 nginx]# vim conf/nginx.conf
http {
...
server { ##文件最下面新建,类似于一个虚拟主机
listen 80; ##通过www1.westos.org可查询到
server_name www1.westos.org;
location / {
root /www1;
index index.html;
}
}
}
[root@server1 nginx]# nginx -s reload
测试:server4
[root@server4 ~]# vim /etc/hosts
192.168.117.11 server1 www1.westos.org
[root@server4 ~]# curl www1.westos.org
web1
如果访问ip,将会由第一个主机进行处理,第一个主机进行了反向代理,测试效果如下:
二、安全控制
策略网站:https://docs.nginx.com/nginx/admin-guide/security-controls/controlling-access-proxied-http/
1.限制并发连接
[root@server1 nginx]# cd html/
[root@server1 html]# mkdir download
[root@server1 ~]# cp vim.jpg /usr/local/nginx/html/download/
[root@server1 nginx]# vim conf/nginx.conf
http {
...
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
...
location / { ##“/”根目录或当前目录(即为/usr/local/nginx/html/)
root html;
index index.html index.htm;
#proxy_pass http://westos;
}
location /download/ { ##/usr/local/nginx/html/下的目录
limit_conn addr 1;
}
}
}
[root@server1 nginx]# nginx -s reload
server4中测试:必须单线程下载,超出的并发连接会失败
[root@server4 ~]# ab -c 10 -n 10 http://192.168.117.11/download/vim.jpg
##-c 并发10个 -n处理10个请求
server1中查看日志(200表示正常访问)
[root@server1 nginx]# cat logs/access.log
给了1个,成功会显示2个
并发1个,处理10个会成功访问
2.限制请求数
[root@server1 nginx]# vim conf/nginx.conf
http {
...
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; ##rate=1r/s:每秒处理1个
server {
location /download/ {
limit_conn addr 1;
limit_req zone=one burst=5 nodelay; ##burst=5排队数为5;nodelay:不做延迟,即超出队列的直接失败
}
}
}
[root@server1 nginx]# nginx -s reload
server4中测试
超出的请求数会失败
[root@server4 ~]# ab -c 1 -n 10 http://192.168.117.11/download/vim.jpg
3.限制速率
[root@server1 nginx]# vim conf/nginx.conf
http {
...
server {
location /download/ {
limit_conn addr 1;
limit_rate 100k; ##每秒100k
}
}
}
[root@server1 nginx]# nginx -s reload
测试
[root@server4 ~]# ab -c 1 -n 5 http://192.168.117.11/download/vim.jpg
三、nginx服务常规配置
1.https配置
[root@server1 conf]# cd /etc/pki/tls/certs
[root@server1 certs]# make cert.pem —创建自签名证书
[root@server1 certs]# mv cert.pem /usr/local/nginx/conf/
[root@server1 certs]# cd /usr/local/nginx/conf/
[root@server1 conf]# vim nginx.conf
[root@server1 conf]# nginx -s reload
测试
[root@server4 ~]# curl -k https://www1.westos.org ##—k跳过证书
web1
2.自动索引
3.缓存配置
缓存做网页的加速,应用层读完盘后缓存
location ~ .*.(gif|jpg|png)$ {
expires 365d;
root html;
}
gif/jpg/png格式的图片,过期时间为365天,nginx自动缓冲
测试:查看信息
可以看到过期时间
4.站点限制
location /status {
stub_status on; #启用监控模块
access_log off; #禁用日志记录
allow 127.0.0.1; #只允许本机访问
deny all; #禁用所有主机访问
}
其他类型:
caaetps:允许TCP连接多少个
handled:TCP三次握手
requests:请求数
5.中文乱码
加中文
现象
[root@server1 conf]# nginx -s reload
测试
6.日志轮转
[root@server1 ~]# vim /opt/nginx_log.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` ##重新生成新的日志文件
[root@server1 ~]# chmod +x /opt/nginx_log.sh
[root@server1 ~]# /opt/nginx_log.sh
[root@server1 ~]# cd /usr/local/nginx/logs/
[root@server1 logs]# ls
access_2023-02-21.log access.log error.log nginx.pid
结合crontab周期化调用:凌晨执行/opt/nginx_log.sh
根据实际业务需求调整周期
[root@server1 ~]# crontab -e
00 00 * * * /opt/nginx_log.sh
7.重定向
(1)80重定向到443
[root@server1 conf]# vim nginx.conf
...
server {
listen 80;
server_name www1.westos.org;
rewrite ^/(.*)$ https://www1.westos.org/$1 permanent;
location / {
root /www1;
index index.html;
}
}
...
[root@server1 conf]# nginx -s reload
网页不能访问此实验域名,因为Windows没有解析,如果用哪个ip测试,则默认访问第一个虚拟主机,此实验只针对域名做了重定向
(2)www1.westos.org/bbs 重定向bbs.westos.org
反向如下图
[root@server1 conf]# mkdir /bbs
[root@server1 conf]# echo bbs.westos.org > /bbs/index.html
[root@server1 conf]# nginx -s reload
8.防盗链
配置server2上的apache服务,盗链server1上的图片
[root@server2 ~]# cd /var/www/html/
[root@server2 html]# vim index.html
<html>
<body>
<img src="http://www1.westos.org/vim.jpg"/>
</body>
</html>
配置nginx网页防盗链
[root@server1 bbs]# ls
daolian.jpg index.html ##daolian.jpg为实验中最终看到的图片
[root@server1 conf]# vim nginx.conf
...
location ~ \.(jpg|png)$ {
root /www1;
valid_referers none blocked www1.westos.org;
if ($invalid_referer) {
#return 403;
rewrite ^/ http://bbs.westos.org/daolian.jpg;
}
}
访问jpg或png格式的图片,来自www1.westos.org网站,可以正常访问
其他网站访问jpg或png格式的图片,重定向bbs.westos.org/daolian.jpg(daolian.jpg提前放入的图片)
测试:两种方法选其一
server4测试机安装图形,使用浏览器测试
[root@server4 ~]# yum groupinstall 'Server with GUI'
或其他虚拟机Firefox中测试即可
注意:解析的server2的daolian.westos.org地址任意,在server4访问解析的地址即可,默认会访问到server2的http中的html文件,根据策略,访问到server1,但是server1有防盗链,仅允许来自www1.westos.org网站访问,从而重定向到提前放好的图片处,就看到测试效果了
添加解析
[root@server4 ~]# vim /etc/hosts
192.168.117.12 server2 daolian.westos.org
192.168.117.11 server1 bbs.westos.org www1.westos.org