nginx [engine x]是HTTP和反向代理服务器,邮件代理服务器和通用TCP / UDP代理服务器。
它高并发性能很好,官方测试能够支撑 5 万的并发量;运行时内存和 CPU 占用率低,配置简单,容易上手,而且运行非常稳定。
1.1 下载地址:http://nginx.org/en/download.html
1.2 解压下载好的安装包,目录如下:
1.3 双击nginx.exe,命令窗口一闪而过,NGINX启动成功,默认端口号是80,浏览器直接访问:localhost
出现如下界面,表示启动成功
作用于客户端,也就是代理的对象是客户端,称为正向代理。
反过来说,作用于服务端,也就是代理的对象是服务器,称为反向代理。
1.正向代理,代理的是客户端; 客户端访问的依然是目标服务器的地址。
2.反向代理,代理的是服务端; 客户端访问的是反向代理服务器的地址,而不是目标服务器的地址。
例如:访问127.0.0.1,直接跳转到127.0.0.0:8080(这是一个Tomcat的地址)
首先我们来看一下NGINX的配置文件,conf 目录下的nginx.conf 文件。
去掉# 注释的内容后
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location = /50x.html {
root html;
}
}
}
nginx.conf内容分为三个块:
worker_processes:主要配置并发数量。
events:配置最大连接数。
http:是最重要的块,代理、日志、缓存等配置都在此处完成。
http块,又分为http全局块、server块。
实现反向代理,需要配置server块,配置如下:
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://localhost:8080;
index index.html index.htm;
}
location = /50x.html {
root html;
}
}
server_name:NGINX服务器的地址,真实IP或127.0.0.1或localhost。
listen:NGINX服务器的端口,可以修改。
location下,proxy_pass:代理的服务器地址。
location下,index:默认的页面
以上面的配置为例:浏览器访问:localhost,实际返回显示的页面:http://localhost:8080/index.html
可以看到,我们访问的是NGINX的服务器,返回的却是Tomcat的信息,这就是反向代理。
静态负载均衡算法:主要包括轮询算法、基于比率的加权轮询算法或者基于优先级的加权轮询算法。
动态负载均衡算法:主要包括基于任务量的最少连接优化算法、基于性能的最快响应优先算法、预测算法及动态性能分配算法等。
通过上面负载均衡的配置,对nginx.conf 配置文件已经很熟悉了,下面直接来配置。
server 中配置如下:
修改配置文件nginx.conf 之前,先关闭nginx(命令是 nginx.exe -s stop),修改之后,在启动
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream OrdinaryPolling {
server 127.0.0.1:8080;
server 127.0.0.1:8099;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://OrdinaryPolling;
index index.html index.htm;
#关掉nginx的缓存,如果不关掉,你会发现每次请求都是从同一个服务器返回的,其实是nginx并没有请求服务器,直接把缓存返回
add_header Cache-Control no-store;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
真实环境应该是,返回的结果是一样的,这里为了测试循环访问两个服务器,返回的页面做了区分。
3.1 轮询算法,其实是加权轮询算法的一种特殊情况,即每个服务器的权重都是一样,weight=1(默认)。
下面看一下,加权轮询的配置:
也就是在需要代理的服务器地址后面加上weight 参数。
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
## 加上weight 参数
upstream OrdinaryPolling {
server 127.0.0.1:8080 weight=5;
server 127.0.0.1:8099 weight=1;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://OrdinaryPolling;
index index.html index.htm;
#关掉nginx的缓存,如果不关掉,你会发现每次请求都是从同一个服务器返回的,其实是nginx并没有请求服务器,直接把缓存返回
add_header Cache-Control no-store;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
## 加上参数 ip_hash
upstream OrdinaryPolling {
ip_hash;
server 127.0.0.1:8080 weight=5;
server 127.0.0.1:8099 weight=1;
}
服务器的响应时间越短,访问的次数越多。
## 加上参数 fair
upstream OrdinaryPolling {
server 127.0.0.1:8080 weight=5;
server 127.0.0.1:8099 weight=1;
fair;
}