Nginx-调度器、优化
Nginx调度器
一、HTTP调度
1、反向代理语法格式
http {
upstream webserver { # 定义源服务器组
#ip_hash;
server 192.168.88.100:80 weight=2;
server 192.168.88.200:80 down;
server 192.168.88.101:80 max_fails=2 fail_timeout=30;
}
server {
listen 80;
server_name _;
location / {
proxy_pass http://webserver; # 调用服务组
}
}
}
2、调度算法
轮循(默认):逐一循环调度
weight:指定轮循几率,权重值和访问比率成正比
ip_hash:根据客户端IP分配固定的后端服务器
least_conn:新的请求分配给压力最小的服务器
3、服务器组主机状态
down:表示当前server暂时不参与负载
max_fails:允许请求失败的次数(默认为1)
fail_timeout:max_fails次失败后,暂停提供服务的时间
二、TCP/UDP调度
1、模块
- ngx_stream_core_module模块
- 使用--with-stream开启该模块
2、语法格式
stream {
upstream backend {
server 192.168.88.100:22;
server 192.168.88.200:22;
}
server {
listen 12345;
proxy_pass backend;
}
}
http {
... ...
}
Nginx优化
一、HTTP错误代码
返回码 | 描述 |
200 | 一切正常 |
301 | 永久重定向 |
302 | 临时重定向 |
400 | 请求语法错误 |
401 | 访问被拒绝(账户或密码错误) |
403 | 资源不可用,通常由于服务器上文件或目录的权限设置导致 |
403 | 禁止访问:客户端的IP地址被拒绝 |
404 | 无法找到指定位置的资源(Not Found) |
414 | 请求URI头部太长 |
500 | 服务器内部错误 |
502 | 服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答(Bad Gateway) |
1、自定义错误页面
http {
fastcgi_intercept_errors on;
server {
error_page 404 /40x.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
二、Nginx状态页面
1、status模块
--with-http_stub_status_module开启模块功能
可以查看Nginx连接数等信息
如果要添加模块,但不想删除之前nginx数据,可以将nginx源码目录下的objs目录中的nginx文件拷贝到nginx的sbin目录下替代现有主程序,然后killall nginx 再重启即可
./configure --with-stream --with-http_stub_status_module
make
killall nginx
cp objs/nginx /usr/local/nginx/sbin/
/usr/local/nginx/sbin/nginx
cat /usr/local/nginx/conf/nginx.conf
location /status {
stub_status on;
}
三、优化nginx并发量
1、常用压力测试工具
ab -c 并发数 -n 总请求数 URL
2、全局配置优化
调整进程数量
#user nobody;
worker_processes 1; # 建议与CPU核心数一致
3、EVENT模块优化
网站常见指标:并发、PV、UV
max_clients=worker_processes * worker_connections
注意修改系统ulimit限制/etc/security/limits.conf
events {
worker_connections 1024; # 每个worker最大并发连接数
}
4、优化Linux内核参数(最大文件描述符数量)
# 查看最大文件数量
[root@proxy ~]# ulimit -n
# 临时设置最大文件数量
[root@proxy ~]# ulimit -n 100000
[root@proxy ~]# vim /etc/security/limits.conf
.. ..
* soft nofile 100000
* hard nofile 100000
#该配置文件分4列,分别如下:
#用户或组 硬限制或软限制 需要限制的项目 限制的值
四、优化Nginx数据包头缓存,支持超长地址
优化前,使用脚本测试超长头部请求是否能获得响应
默认情况下nginx无法支持长地址栏,会报414错误
[root@proxy ~]# cat buffer.sh
#!/bin/bash
URL=http://192.168.99.5/index.html?
for i in {1..5000}
do
URL=${URL}v$i=$i
done
curl $URL # 经过5000次循环后,生成一个超长的URL地址
[root@proxy ~]# ./buffer.sh
.. ..
<center><h1>414 Request-URI Too Large</h1></center> #访问失败
修改Nginx配置文件,增加数据包头部缓存大小
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
client_header_buffer_size 200k; # 请求包头信息的缓存大小
large_client_header_buffers 4 200k; # 大请求包头部信息的缓存个数与容量
.. ..
}
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
优化后,使用脚本测试超长头部请求是否能获得响应
[root@proxy ~]# ./buffer.sh
五、浏览器本地缓存静态数据
修改配置文件,定义对静态页面的缓存时间
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
expires 30d; # 定义客户端缓存时间为30天
}
}
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
六、配置网站限流限速
1、定义limit_rate限制
[root@web1 nginx]# vim /usr/local/nginx/conf/nginx.conf
http {
...
limit_rate 100k; # 全局限速
server {
limit_rate 200k; # 虚拟主机限速
listen 80;
server_name www.b.com;
root html;
index index.html;
location /file_a {
limit_rate 300k; # file_a目录限速300k
}
location /file_b {
limit_rate 0k; # file_b目录不限速
}
}
2、创建测试目录
[root@web1 nginx]# mkdir html/file_a
[root@web1 nginx]# mkdir html/file_b
3、创建测试文件
[root@web1 nginx]# dd if=/dev/zero of=html/test.img bs=100M count=1
[root@web1 nginx]# dd if=/dev/zero of=html/file_a/test.img bs=100M count=1
[root@web1 nginx]# dd if=/dev/zero of=html/file_b/test.img bs=100M count=1
4、下载测试
wget www.b.com/test.img
wget www.b.com/file_a/test.img
wget www.b.com/file_b/test.img
七、防盗链
valid_referers指令可以检测被访问资源从哪个地址来
1、添加防盗链测试语句
[root@web1 nginx]# vim /usr/local/nginx/conf/nginx.conf
server {
...
valid_referers none 192.168.99.100; # 如果请求头中的referer字段包含者地址是99.100或者没有referer字段则有效,
if ($invalid_referer){ # 如果上述测试无效则条件成立
return 403; # 返回错误提示
}
...
}
2、web1编写测试页面
[root@web1 nginx]# cat html/index.html
web1
测试页面 --
<a href="http://192.168.99.100/nr.html">内容</a>
[root@web1 nginx]# cat html/nr.html
web1内容页面
3、web2编写测试页面
[root@web2 nginx]# cat html/index.html
web2
测试页面 --
<a href="http://192.168.99.100/nr.html">内容</a>
4、测试
从192.168.99.100主页点内容可以访问,但从99.200点不可以
原文地址:https://blog.csdn.net/it_zhenxiaobai/article/details/137178456
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!