nginx学习笔记
nginx简介相关概念
高性能的http和反向代理服务器 最高能处理5w以上的并发访问
反向代理
正向代理:通过在客户端(浏览器)中配置代理服务器进行网络访问——梯子
反向代理:客户端无需配置代理服务器,对外暴露了代理服务器,由代理服务器去转发请求,隐藏了真实服务器的ip地址
负载均衡
增加服务器的数量,将用户请求分发到不同的服务器上
(用多头牛去拉动货物,而不是选用一头更加强壮的牛去拉)
动静分离
静态资源:html css js
动态资源:jsp servlet
将静态资源与动态资源分开部署在不同的服务器上,加快网站的解析进度,减轻服务器压力
nginx常用命令
使用nginx命令的前提条件,进入nginx目录:
/usr/local/nginx/sbin
查看nginx的版本号:./nginx -v
启动nginx:./nginx
关闭nginx:./nginx -s stop
重新加载nginx: ./nginx -s reload
nginx配置文件
1 配置文件位置:/usr/local/nginx/conf/nginx.conf
2 配置文件组成部分:
三部分:全局块、events块 、http块
全局块:从配置文件开头到event块的内容,影响全局的配置,比如work_processes 1 表示最大并发处理量
events块:主要影响nginx服务器与用户的网络连接 如 work_connections 1024 表示支持的最大连接数
http块:包括http全局块和http server块
nginx配置实例1:反向代理
实现效果:访问www.1801030015.com会自动转跳到Linux服务器的tomcat主页
准备工作:服务器开启tomcat;防火墙对外开放端口8080
firewall -cmd --add-port = 8080/tcp – permanent
Firewall-cmd -reload
server{
listen 80;
server_name 192.168.17.129(nginx服务器的ip地址)
location / {
root html;
proxy_pass http://127.0.0.1:8080;(需要转发到的服务器地址)
index index.html index.htm;
}
}
nginx配置实例2:反向代理
实现效果:使用nginx反向代理,根据不同的路径转跳到不同的服务端口中
nginx监听端口为9001,访问http://192.168.17.129/edu/转跳到http://127.0.0.1:8081
访问http://192.168.17.129/admin/转跳到http://127.0.0.1:8082
准备工作:两个tomcat服务器 测试页面
具体配置:
server{
listen 9001;
server_name 192.168.17.129(nginx服务器的ip地址)
location ~ /edu/ {
proxy_pass http://127.0.0.1:8081;(需要转发到的服务器地址);
}
location ~ /admin/ {
proxy_pass http://127.0.0.1:8082;(需要转发到的服务器地址);
}
}
注意开启防火墙端口号9001 8081 8082
nginx配置实例-负载均衡
实现效果:浏览器地址栏输入http://192.168.17.129/edu/a.html 负载均衡到8080和8081端口中
在nginx.conf中进行配置
http{
upstream myserver{
ip_hash #每个请求按照访问的ihash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
server 115.28.52.63:8080 weight = 1;
server 115.28.52.63:8081 weight = 1;
}
server{
location/{
proxy_pass http://myserver;
proxy_connect_timeout 10;
}
}
}
nginx服务器策略
第一种 轮询(默认)
每个请求按照时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
第二种 weight
weight代表权重,默认为1,权重越高被分配的用户数越多,可用于后端服务器性能不均的情况
第三种 ip_hash
每个请求按照访问的ihash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
第四种 fair(第三方)
按照后端服务器的响应时间来分配,响应时间越短的优先分配
nginx配置实例-动静分离
纯粹地把静态文件独立成单独的域名,放在独立的服务器上,和tomcat分开部署(目前主流推崇的方案)
准备工作:在linux系统中准备静态资源,用于进行访问
具体配置:
在nginx配置文件中进行配置静态资源
location /www/ {
root /data/;
index index.html index.htm;
}
location /image/ {
root /data/;
autoindex on;
}
nginx配置高可用集群
什么是高可用?
防止nginx服务器宕机 一台master服务器 另一台backup服务器 对外暴露一个虚拟的ip地址作为路由
准备工作:
需要两台服务器
在两台服务器上安装nginx和keepalived
高可用(主从配置)
1)修改etc/keepalived/keepalived.conf
2)在/usr/local/src添加检测脚本
3)将两台服务器上的nginx和keepalive都启动起来
./nginx
systemctl start keepalived.service
keepalived配置文件详解
全局配置 global defs——router_id #访问到主机名字
检测脚本配置 script
执行脚本执行的间隔 interval
权重 weigth 当脚本检测结果成立 对权重做出改变
虚拟ip配置
state MASTER/BACKUP
interface ens33//网卡
virtual_router_id # 主备机的virtual router id必须相同
priority 优先级 主机较大 备机较小
advert_int 1 #每个一秒发送一次检测
virtual_ipaddress{192.168.17.50#虚拟地址}
nginx原理解析
一个master和多个worker进程
master进程负责管理和监控 worker争抢客户请求处理
好处:
利于支持nginx -s reload热部署,当服务器重新加载时,已经有任务的worker不会再参与到争抢中
每个worker是一个独立的进程,无需加锁,其中一个worker出现了问题,其他worker会继续工作不会造成服务中断
设置合理的worker数量
和cup数相等最为合适(四核 八核…)
连接数worker_connection
客户端发送请求 占用了worker的几个连接数?答:2个或4个(访问静态资源or反向代理)
nginx中有一个master,4个worker,每个worker中支持的最大连接数是1024,支持最大的并发数是多少?
普通静态访问最大并发数 woeker_connection(worker最大连接数) * worker processes(worker数量) / 2
如果是http作为反向代理的话 最大并发量是 worker connection * worker processes / 4