准备环境:服务器ip为:110.110.110.110、 nginx监听80端口、两个tomcat端口分别为8080、8081;
【一】反向代理
实现访问http://110.1110.110.110/aaa/a.html 反向代理访问到http://110.110.110.110:8001/aaa/a.html
sever {
listen 80;
localhost 110.110.110.110;
localtion ~ /aaa/ {
proxy_pass http://127.0.0.1:8080;
}
}
【二】负载均衡
nginx实现负载均衡有四种方式:轮询(默认方式)、权重weight、ip_hash、fair;
(1)轮询方式(默认方式):访问http://110.1110.110.110会依次代理到http://110.1110.110.110:8080和http://110.1110.110.110:8081
# server_pool自定义的名称,下面的proxy_pass里面需要用到
upstream server_pool {
server 110.110.110.110:8080;
server 110.110.110.110:8081;
}
sever {
listen 80;
localhost 110.110.110.110;
localtion / {
proxy_pass http://server_pool;
}
}
(2)weight权重方式:权重大的转发到的机会大
# server_pool自定义的名称,下面的proxy_pass里面需要用到
upstream server_pool {
server 110.110.110.110:8080 weight=1;
server 110.110.110.110:8081 weight=10;
}
sever {
listen 80;
localhost 110.110.110.110;
localtion / {
proxy_pass http://server_pool;
}
}
(3)ip_hash:第一次进的是哪个地址,接下来的访问都是这个地址
# server_pool自定义的名称,下面的proxy_pass里面需要用到
upstream server_pool {
ip_hash;
server 110.110.110.110:8080;
server 110.110.110.110:8081;
}
sever {
listen 80;
localhost 110.110.110.110;
localtion / {
proxy_pass http://server_pool;
}
}
(4)fair:哪个响应时间快就进入哪个
# server_pool自定义的名称,下面的proxy_pass里面需要用到
upstream server_pool {
server 110.110.110.110:8080;
server 110.110.110.110:8081;
fair;
}
sever {
listen 80;
localhost 110.110.110.110;
localtion / {
proxy_pass http://server_pool;
}
}
【三】动静分离
实现将图片放在/usr/media/picture目录里面,配置nginx来访问。(类似tomcat的虚拟路径)
使用 root 或者 alias 方式来代理, 建议使用alias
server {
listen 80;
server_name 110.110.110..110;
#这里需要注意,使用root代理后的结果为:/usr/media/picture/
location /picture/ {
root /usr/media/;
autoindex on;
}
#这里需要注意,使用alias代理后的结果为:/usr/media/
location /picture/ {
alias /usr/media/;
autoindex on;
}
}
【四】高可用的集群
需要结合keepalived 来使用,并且需要用到多台服务器。
步骤大概是:
(1):配置主机名
(2):配置检测脚本
(3):设置主从nginx,绑定网卡和配置虚拟ip
nginx最大并发问题:
nginx有master和worker的概念,一般只有一个master,worker的数据可以配置,一般与cpu的个数配置一致。
worker_connections在events里面可以配置,默认1024个。
通常一个动态请求需要占用4个连接数:前台-->nginx-->tomcat需要两个。然后返回信息又需要两个,即需要4个连接数
一个静态请求需要占用2个连接数:前台-->nginx 需要一个,然后返回信息又需要一个,即需要2个连接数
动态请求最大并发数:worker_processes * worker_connections /4
静态请求最大并发数:worker_processes * worker_connections /2