Nginx
是什么
Nginx
是一个高性能的 HTTP
和反向代理 web
服务器,同时也提供了 IMAP/POP3/SMTP
服务。其特点是占有内存少,并发能力强,事实上 nginx
的并发能力在同类型的网页服务器中表现较好,使用 nginx
网站用户有:百度、京东、新浪、网易、腾讯、淘宝等
为什么要使用 Nginx
随着当今互联网的迅速发展,单点服务器早已无法承载上万个乃至数十万个用户的持续访问。比如一台 Tomcat
服务器在理想状态下只能够可以承受住 2000
个左右的并发量,为了解决这个问题,就需要多台 Tomcat
服务器来进行负载均衡
那么,应该如何实现负载均衡? Nginx
就是其中的一种解决方案,当用户访问网站时,Nginx
拦截到这个访问请求,并将其通过轮询的方式均匀地分配到不同的服务器上
并且,在 Nginx
中有一种 ip_hash
策略,它可以获取到用户的真实 IP
,计算出 hash
值来选择服务器,这也是一种优秀的负载均衡方式
正向代理
正向代理类似一个跳板机,代理访问外部资源。比如:我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器,它能访问那个我不能访问的网站,于是我先连上代理服务器,告诉它我需要那个无法访问的网站的内容,代理服务器去取回来,然后返回给我
正向代理是代理客户端的
反向代理
反向代理方式是指以代理服务器来接受 internet
上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet
上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器
反向代理是代理服务器端的
Nginx
支持哪些负载均衡策略
- 轮询:将请求依次轮询发给每个服务器
- 最少链接:将请求发送给持有最少活动链接的服务器
ip
哈希:通过哈希函数决定请求发送给哪个服务器- 权重:服务器的权重越高,处理请求的概率越大
Nginx
配置负载均衡示例
轮询
# 在nginx.conf配置文件中添加如下配置,此配置有三台服务器提供支付服务
http {
upstream CashServers {
server 127.0.0.1:8080;
server 127.0.0.1:8070;
server 127.0.0.1:8060;
}
server {
listen 80; # 监听端口一般都为http端口:80
server_name localhost; # 当前服务的域名
location / {
proxy_pass http://CashServers;
}
}
}
- 默认配置就是轮询策略
nginx
负载均衡支持http
和https
协议,只需要修改proxy_pass
后协议即可nginx
支持FastCGI, uwsgi, SCGI,memcached
的负载均衡,只需将proxy_pass
改为fastcgi_pass, uwsgi_pass, scgi_pass,memcached_pass
即可- 此策略适合服务器配置相当,无状态且短平快的服务使用
最少链接
http {
upstream CashServers {
least_conn;
server CashServers1.com;
server CashServers2.com;
server CashServers3.com;
}
server {
listen 80;
location / {
proxy_pass http://CashServers;
}
}
}
- 最少链接负载均衡通过
least_conn
指令定义 - 此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况
ip_hash
http {
upstream CashServers {
ip_hash;
server CashServers1.com;
server CashServers2.com;
server CashServers3.com;
}
server {
listen 80;
location / {
proxy_pass http://CashServers;
}
}
}
ip_hash
负载均衡使用ip_hash
指令定义nginx
使用请求客户端的ip
地址进行hash
计算,确保使用同一个服务器响应请求- 此策略适合有状态服务,比如
session
权重
http {
upstream CashServers {
server CashServers1.com weight=3;
server CashServers2.com weight=2;
server CashServers3.com weight=1;
}
server {
listen 80;
location / {
proxy_pass http://CashServers;
}
}
}
- 权重负载均衡需要使用
weight
指令定义 - 权重越高分配到需要处理的请求越多
- 此策略可以与最少链接负载和
ip_hash
策略结合使用 - 此策略比较适合服务器的硬件配置差别比较大的情况
轮询负载均衡实战
# 在nginx.conf配置文件中添加如下配置,此配置有两台服务器提供支付服务
http {
# 配置要映射的服务器,nginx 默认的负载均衡策略是轮询,其权重都默认为 1
# mytest: 要映射的服务器的域名
upstream mytest {
server 127.0.0.1:8090;
server 127.0.0.1:8070;
}
server {
listen 80; # 监听端口一般都为 http 端口 80
server_name localhost; # 当前服务的域名
location / {
# 要映射的服务器地址
proxy_pass http://mytest;
}
}
}
启动 nginx
,在浏览器地址栏输入:http://localhost:80/redPacket/save
server_name localhost;
当前服务的域名listen 80;
监听端口一般都为http
端口80