个人笔记之Nginx
声明:为了保证学习的效果,本人一般习惯先手敲出大致思路,再慢慢填充笔记内容,如果有安装配置过程也会先在自己电脑上跑通再发。这种方式难免出现错漏甚至从一开始的想法就是错误的,如果大佬们碰巧看到麻烦及时告知,在下感激不尽!
1.概念及流程
有时候,当短时间内用户访问量超过服务器的处理上线的时候,容易引发一系列问题甚至直接导致服务器崩溃。一般的解决方案是增加几台服务器,但是如何保证每台服务器都能分配到在它承受范围内的负载,而同时不影响用户使用体验,同时又能防止某台服务器的宕机导致系统彻底崩溃就成了问题,于是,Nginx就被开发出来应对这种情况。
Nginx,相当于一个用于分配请求最终访问到的目标地址的中间件,用于Linux集群中根据设置好的规则分配请求访问的服务器。
作用:解决高并发场景下服务器压力过大的问题,以及维持系统的高可用性。
访问流程:
-
首先用户输入域名开始访问网站,此时该请求会被Nginx拦截到,并根据访问时所使用的域名在配置文件中寻找对应的server中的配置,找到配置的server_name,proxy_path和port
-
然后再根据配置文件中定义的upstream设置好的server_name对应的tomcat服务器所使用的端口以及不同服务器的真实IP地址。
-
最后根据配置文件中设置的规则来决定是平均分配还是按照权重分配,来计算本次请求最终落到哪台服务器上。
-
最后从分配到的资源服务器拿到所需资源返回给用户。
TIPS:
-
用户输入不同域名来访问时,可能会指向同一个IP,这也是导致服务器压力过大的原因之一。
-
三个tomcat服务器相互独立,可以拥有相同的端口但是IP必须不同,以达到负载均衡的目的。
-
具体的访问权重及规则都在配置文件中配置,默认是平均分配,假设此时有三台服务器则将同时到达的请求平均分配到三台服务器,例如按123…的顺序分配。如果设置了权重,比如
upstream serverloc{(serverloc是我瞎起的集群名)
server 192.168.251.101:8080 weight=1;(服务器1)
server 192.168.251.102:8080 weight=2;(服务器2)
server 192.168.251.103:8080 weight=3;(服务器3)
}
则此时请求会有1/6的概率落到服务器1,2/6的概率落到服务器2,3/6的概率落到服务器3,则最终访问的顺序按照123323…的顺序循环分配。按权重分配可以根据服务器性能差异等灵活配置。
2.搭建Nginx集群
Nginx源码安装
解编安启
(流程走过了,只要自己下个包就行了)
- 将安装包上传到Linux虚拟机,安装包自己下
- 解压,并把Nginx存放到指定目录
- tar -zxf nginx-1.8.1.tar.gz
- 需要安装nginx依赖的软件,若安装失败可能是网络原因,多试几次
- yum install gcc pcre-devel zlib-devel openssl-devel -y
- 配置安装路径
- cd nginx-1.8.1
- ./configure --prefix=/opt/cl/nginx-1.8.1
- 开始编译并安装nginx
- make && make install
- 开启Ngxin
- cd /opt/cl/nginx-1.8.1/sbin
- ./nginx
- http://192.168.251.100/
最终效果:
看到这个页面说明安装和启动成功
3.相关配置文件
(这部分是直接拷贝的)
配置文件
-
Nginx中文文档
- https://www.nginx.cn/doc/index.html
-
首先进入配置文件夹:
cd /opt/cl/nginx-1.8.1/conf
然后在server{}标签上面加上upstream标签:
upstream serverloc{ server 192.168.251.101:8080 weight=1; server 192.168.251.102:8080 weight=2; server 192.168.251.103:8080 weight=3; } (serverloc是我瞎起的集群名) (服务器1) (服务器2) (服务器3)
最终文件效果(注释掉的文本内容都删了,实际上文件很长):
-
#user nobody; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 0; upstream serverloc { server 192.168.251.101:8080 weight=1; server 192.168.251.102:8080 weight=2; server 192.168.251.103:8080 weight=3; } server { listen 80; server_name localhost; location / { proxy_pass http://serverloc; } } }
随后重启Nginx:
cd /opt/cl/nginx-1.8.1/sbin
./nginx -s reload
此时打开node01(我的服务器1)上的tomcat服务器(为了偷懒我就只开了一个),然后输入之前访问Nginx的网址,发现现在没有进Nginx的欢迎页面而是进了tomcat的主页了:
我的节点配置是:
basenode 192.168.251.100
node01 192.168.251.101
node02 192.168.251.102
node03 192.168.251.103
basenode跑Nginx,三台其他虚拟机跑tomcat,这次简单试一下所以没写测试用的页面,只是开一台tomcat简单跑一下,以后有时间再补上吧。
这个网址已经访问到了tomcat,说明Nginx成功地自动访问到了tomcat服务器没有出问题
常用指令
关闭nginx服务
kill `cat /usr/local/nginx/logs/nginx.pid`
nginx -s reload :修改配置后重新加载生效
nginx -s reopen :重新打开日志文件
nginx -t -c /path/to/nginx.conf 测试nginx配置文件是否正确
关闭nginx:
nginx -s stop :快速停止nginx
quit :完整有序的停止nginx
其他的停止nginx 方式:
ps -ef | grep nginx
kill -QUIT 主进程号 :从容停止Nginx
kill -TERM 主进程号 :快速停止Nginx
pkill -9 nginx :强制停止Nginx
启动nginx:
nginx -c /path/to/nginx.conf
平滑重启nginx:
kill -HUP 主进程号