我们继续对nginx做一些修改
限制连接数
找到nginx安全控制,限制连接
limit_conn_zone $binary_remote_addr zone=addr:10m;
限制连接数 匹配变量(客户IP地址) 在内存开辟了10M的内存区域(做出限制)
复制该实例
location /download/ {
表示在访问该网站根目录download目录底下
limit_conn addr 1;
启用的并发连接数
}
在server1/usr/loacl/nginx/html/创建download目录并添加图片
nginx -s reload 刷新
此时我们在server4安装httpd-tools
yum -y install httpd-tools
在server4进行压力测试
ab -c10 -n 10 http://172.25.0.11/download/photograph.jpg
-c并发连接
-n处理10个请求
此时我们在sever1的/usr/local/nginx/access.log查看
只有一个200正确,剩下是503报错
当我们将并发改为1时
再次查看日志
此时日志返回全部为200
我们还可以通过server_name来限制
限制访问速率
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
每秒处理一个请求
nginx -s reload 刷新
此时我们再次在server4执行
ab -c1 -n 10 http://172.25.0.11/download/photograph.jpg
此时产生报错,我们查看server1日志
此时限流成功
在处理过多请求时
我们进行添加
nginx -s reload刷新
我们在server4再次测试
此时无报错,我们查看server1日志
全部为200,测试成功
此项设置会有延迟,如果设置不延迟
注意!此时我们应该使用nginx -s stop停掉服务
再起nginx,使用重载命令可能会不生效
此时快速处理完,没有处理的请求会报错
限制带宽:
limit_rate 50k;
我们做100k的限制,此时我们访问的照片大小约为1000k,
我们进行测试
ab -c1 -n 1 http://172.25.0.11/download/photograph.jpg
该测试大约需要10秒作业,此时应有明显延迟
日志也应该是200表示成功
自动索引:
autoindex on;
刷新
访问172.25.0.11
nginx缓存配置:
缓存可以降低网站带宽,加速用户访问
location ~ .*\.(gif|jpg|png)$ {
expires 365d;
root html;
}
nginx -s reload
此时我们测试出图片还有365天过期
日志轮询:
创建脚本
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`
重新生成日志文件
chmod +x /opt/nginxlog.sh
加可执行权限
此时我们可以看到日志文件已按时间分类
日志可视化:
在浏览器下载https://tar.goaccess.io/goaccess-1.4.tar.gz
tar zxf goaccess-1.4.tar.gz
解压
yum install -y GeoIP.x86_64
在下载geoip-devel时注意版本是否匹配
yum install -y GeoIP-devel-1.5.0-13.el7.x86_64.rpm
相对路径
yum install -y /root/ncurses-devel-5.9-14.20130511.el7_4.x86_64.rpm
绝对路径
以上三个rpm包如果通过yum search 找不到的话可以在阿里云的镜像站找
不建议在csdn寻找付费购买
cd goaccess-1.4/
./configure --enable-utf8 --enable-geoip=legacy
make
make install
goaccess /usr/local/nginx/logs/access.log -o /usr/local/nginx/html/report.html --log-format=COMBINED --real-time-html
将日志输出到nginx的默认发布目录 日志格式 显示时间
ctrl+z
bg打入后台访问http://172.25.0.11/report.html
禁用不必要日志记录:
reload刷新
效果图:
但是会在access.log中记录下来
修改:
location /status{
stub_status on;
access_log off;
}
reload刷新
此时日志并不记录
此日志应只有管理员可以看
location /status{
stub_status on;
access_log off;
allow 127.0.0.1;
#allow 172.25.0.1;
deny all;
}
此时windows主机无法浏览
启用该IP刷新之后可以访问:
乱码:
当我们在server1的nginx默认发布目录输入带有中文的字符集,并通过浏览器进行访问时
会发现浏览器并不能识别中文
此时我们添加:
charset utf-8;
nginx -s reload
再次查看:
乱码解决
nginx支持正则表达式
返回值自定义(状态码)
if ($remote_addr = 172.25.0.1) {
return 405;
}
重定向:
防止域名恶意解析到服务器IP
server4解析
此时我们添加return 500;
此时我们在server4访问会出现
我们做重定向
server {
listen 80;
server_name localhost;
#return 500;
rewrite ^(.*) http://www.westos.org permanent;
reload刷新
80重定向到443:
启用443虚拟主机
server {
listen 443 ssl;
server_name www.westos.org;
监听的虚拟主机
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;
}
}
cd /etc/pki/tls/certs/
make cert.pem
自签名证书
umask 77 ; \
PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
/usr/bin/openssl req -utf8 -newkey rsa:2048 -keyout $PEM1 -nodes -x509 -days 365 -out $PEM2 ; \
cat $PEM1 > cert.pem ; \
echo "" >> cert.pem ; \
cat $PEM2 >> cert.pem ; \
rm -f $PEM1 $PEM2
Generating a 2048 bit RSA private key
.........................................+++
....+++
writing new private key to '/tmp/openssl.m4OH16'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:shaanxi
Locality Name (eg, city) [Default City]:xi'an
Organization Name (eg, company) [Default Company Ltd]:westos
Organizational Unit Name (eg, section) []:linux
Common Name (eg, your name or your server's hostname) []:www.westos.org
Email Address []:root@westos.org
mv cert.pem /usr/local/nginx/conf/
禁用负载均衡,启用rewrite
server{
listen 80;
server_name www.westos.org;
rewrite ^/(.*)$ https://www.westos.org/$1 permanent;
#location / {
# proxy_pass http://westos;
#}
}
nginx -s reload刷新
使用curl命令测试