1、Nginx简介
2、Nginx的安装
3、Nginx负载均衡
Nginx是一个轻量级、高性能、稳定性高、并发性强的HTTP和反向代理服务器。目前在互联网企业中应用非常广泛,如:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx的作用主要有:
http服务器
Nginx一般用于部署静态资源,和部署动态资源的服务器(如:Tomcat) 分开部署,实现动静分离,达到服务器性能的最大化。
反向代理
代理后台服务器,通过配置实现灵活的路由
负载均衡
将大量的用户请求,均衡的分配给多台服务器,提高系统的负载能力
Nginx的一个重要作用是反向代理,那么我们首先需要搞清楚什么是反向代理。
正向代理和反向代理的区别是:
正向代理,代理的是客户端
如:国内用户不能直接访问国外网站(Google、Facebook等),可以通过VPN代理服务器间接访问国外网站,这就是一种正向代理
反向代理,代理的是服务器
如:淘宝的业务部署到不同的服务器上,如商品服务器、商户服务器、订单服务器等,用户访问淘宝时,通过Nginx将请求转发到不同的后台服务器上
1) 安装依赖库
yum install -y gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
2) 下载Nginx
cd /usr/local
wget -c https://nginx.org/download/nginx-1.12.0.tar.gz
3) 解压
tar -zxvf nginx-1.12.0.tar.gz
4)进行默认配置
cd nginx-1.12.0
./configure
5)编译安装
make
make install
6)启动nginx
编译安装后,会出现nginx目录
cd /usr/local/nginx/sbin/
./nginx
其他命令:
停止
./nginx -s stop
退出
./nginx -s quit
重启
./nginx -s reload
7) 打开80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
打开浏览器,输入IP地址,出现Nginx页面
1)去官网下载Nginx
http://nginx.org/en/download.html
2)解压,双击nginx.exe就可以了
Nginx作为反向代理服务器可以对服务器的域名和端口进行映射,起到的作用有:
反向代理案例:
在SpringBoot项目中添加控制器,端口是默认的8080
RestController
public class HelloController
{
@GetMapping("/hello")
public String hello(){
return "Hello Nginx";
}
}
通过URL:http://localhost:8080/hello 可以正常访问
现在需要通过URL:http://manage.blb.com/hello 也能访问到该接口
这就需要:
实现步骤:
127.0.0.1 manage.blb.com
让windows系统支持manage.blb.com域名
server {
listen 80;
server_name manage.blb.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
proxy_pass 是原来的域名和端口,127.0.0.1就是localhost
server_name 后面是映射后的域名
listen 后面是映射后的端口
nginx -s reload
PS:
Windows 查看端口占用命令: netstat -ano
杀死进程:taskkill /F /pid 进程号
每台服务器处理请求数都有上限,超过这个上限就可能挂掉,那么多部署几台服务器就可以解决这个问题吗?
也不一定,假设所有请求都打到一台服务器上,还是会挂掉。
负载均衡(Load balancing),是一种计算机技术,能将用户请求按一定的负载均衡算法,分配给集群中的每一台服务器上,从而避免单台服务器过载,也提高了服务器集群处理请求的响应速度,达到服务器资源的优化配置。
负载均衡可以通过客户端、服务器端和硬件实现,Nginx属于服务器端负载均衡技术。
1) 服务器设置
为了测试方便起见,可以在一台电脑上启动几个SpringBoot项目,以端口区别,模拟多台服务器
RestController
public class HelloController
{
@GetMapping("/hello")
public String hello(){
return "Hello 8081";
}
}
2) 修改Nginx配置
在http中添加upstream,配置服务器列表,myservers是列表名称,内部每个server后面是服务器的IP和端口
upstream myservers {
server 192.168.0.113:8081;
server 192.168.0.113:8082;
server 192.168.0.113:8083;
}
添加server,配置代理将请求发送给myservers处理
server {
listen 8088;
server_name localhost;
charset utf-8;
location / {
proxy_pass http://myservers;
}
}
3) 重启Nginx
./nginx -s reload
4) 测试
在浏览器测试8088端口访问hello接口时,发现接口的调用是轮询式的。
5)配置权重
每个服务器的处理能力不同,可以配置权重weight,让能力强的服务器处理更多请求
upstream myservers {
server 192.168.0.113:8081 weight=1;
server 192.168.0.113:8082 weight=2;
server 192.168.0.113:8083 weight=1;
}
构建Vue项目
npm run build
生成dist目录
部署nginx的html目录下
添加配置
server {
listen 8088;
server_name localhost;
root html/dist;
location / {
try_files $uri $uri/ @router;
index index.html index.htm;
}
location @router {
rewrite ^.*$ /index.html last;
}
}