本实践基于Vmware的虚拟机。
一句话介绍ningx:轻量级的web服务,特点是高并发性能好。
准备环境
- 关闭防火墙:
systemctl stop firewalld.service 临时关闭防火墙(临时关闭);
systemctl disable firewalld.service 开机关闭;————》》软件层面的防火墙
- 关闭SElinux:
setenforce 0 临时关闭;
getenforce 查看selinux的状态;
vim /etc/sysconfig/selinux --SELINUX=disabled 永久修改。
- 配置网络,确保linux主机之间网络通畅
安装服务
- yum install epel-release -y 安装扩展源 (如果找不到安装包,先装这个);yum instal nginx -y
修改配置文件
- etc/nginx/nginx.conf(每条配置后面以;结尾):
- worker_process 数字 # 指定启动后产生几个子进程(软件级别的配置,如果硬件不行也没用)
- worker_connections 1024; #一个工作进程的线程数量,即可以并发处理请求的数量(软件级别的配置,如果硬件不行也没用)
- http内的配置是全局配置的
- server内的配置是局部的
- listen 80; #端口
- root /usr/share/nginx/html;网站根目录下的html(如果将该目录下文件权限修改 -r, 则用户访问该文件时403) 注意:在下面的负载均衡设置中,负载机不需要网站根目录。
重启服务
- systemctl status/start/restart/stop nginx 查看状态/开启/重启服务
负载均衡
- 基于nginx反向代理:用户访问代理服务器,代理服务器(nginx)把请求转发到内网机器,内网机器被隐藏起来,并实现负载均衡的效果。(如果代理服务器宕机了,后面的内网机器也废了)
- 补充代理的三种方式:反向代理;正向代理:用户明确知道代理,客户端访问时指定代理,例如:vpn。透明代理:用户不知道代理的存在,代理管理用户行为。
- 负载方式:
- round-robin 轮询(默认)
http { upstream myapp1 { server srv1.example.com; server srv2.example.com; server srv3.example.com; } server { listen 80; location / { proxy_pass http://myapp1; } } }
- least-connected 最小连接调度
upstream myapp1 { least_conn; server srv1.example.com; server srv2.example.com; server srv3.example.com; }
- ip-hash ip地址校验,只要校验结果一样,就给同一台机器处理(常用于需要登录验证的服务,因为登录的那台机器上储存着用户的认证信息,否则可能每次请求都要登录验证。解决方案,把一台机器上登录的用户信息保留在第三台是机器,所有机器都去第三台机器找登录信息)。
upstream myapp1 { ip_hash; server srv1.example.com; server srv2.example.com; server srv3.example.com; }
- 权重方式:机器配置高的多负载:加权重值
upstream myapp1 { server srv1.example.com weight=3; server srv2.example.com; server srv3.example.com; }
- round-robin 轮询(默认)
- 修改完负载方式后,记得重启服务。
测试1
- 在VMware中,将安装了nginx服务的主机作为负载机,再克隆三台机器,作为子机,并将三台子机的网卡设为仅主机模式。在VM中为负载机添加一块网卡(关机情况下),设置为仅主机模式,这样就和子机在一个网段了。
- 打开浏览器,输入负载机ip地址,负载机将根据设定的负载均衡方式,调配子机来处理请求。
进阶:用两台机器作nginx负载均衡,一台兼作负载机和web机;另一台作web机。
- 这是为负载机配置的server部分:
server { listen 80 default_server; listen [::]:80 default_server; include /etc/nginx/default.d/*.conf; location / { proxy_pass http://my_nginx; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
- 将server部分复制一份粘贴并粘贴到http{}的内部,修改如下,做成web机 server:
server { listen 8080 default_server; #更改这个sever的端口 listen [::]:8080 default_server; server_name _; root /test; #为负载机添加作为web机的文档根目录 include /etc/nginx/default.d/*.conf; error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
- 将http的upstream 部分,添加负载机作为web server部分的ip和端口
upstream my_nginx { # server 192.168.22.128; # server 192.168.22.129; server 192.168.22.130; # 作web服务的子机ip (网卡仅主机模式下的IP) server 192.168.22.135:8080; # 添加本机的ip和端口,作web服务(虚拟网卡仅主机模式下的IP) }
- 重启nginx服务,用浏览器访问负载机网卡桥接模式下的ip,验证结果。