从零开始学Nginx(二)——反向代理+负载均衡
上面两个名词看起来很难,其实只要几行配置就能搞定。
今天我们一起来double kill。
/usr/local/nginx/conf/nginx.conf
二、nginx.conf基本组成
1、全局块
从配置文件开始导events块之间的内容,主要设置一些影响nginx服务器整体运行的配置指令
2、events块
主要影响nginx服务器与用户的网络连接
3、http块
配置中最重要的部分。代理、缓存、日志等绝大多数功能和第三方模块的配置都在这里。
http块又包括http全局块和server块。
#全局块
#这是nginx服务器并发处理服务的关键配置,work_processes值越大。可以支持的并发处理量也越多,但是会受硬件、软件等设备的制约
worker_processes 1;
#events块
#表示workprocess支持的最大连接数是1024
events {
worker_connections 1024;
}
#http块
http {
#http全局块
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#httpserver块
server {
#监听本地的80端口
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
三、nginx配置实例——反向代理1
1、用上一章讲的docker知识启动tomcat,过程略。浏览器输入:
ngip:8080/tomcat
可以打开tomcat页面
2、修改C:\Windows\System32\cmd.exe\hosts
这个时候浏览器输入
www.123.com
跳转到nginx首页
3、修改nginx.conf。修改server_name,添加proxy_pass
proxy_pass http://127.0.0.1:8080/tomcat/;
4、重启nginx,浏览器再次输入
www.123.com
这个时候会跳转到tomcat页面
四、nginx配置实例——反向代理2
实现效果:根据访问的路径跳转到不同端口的服务中心去。nginx的监听端口为9091。
访问:ngip:9091/tomcat 跳转到8080端口,
访问:ngip:9091/vod 跳转到8081端口
1、我们已经启动好了一个8080端口的。现在来复习一下之前的docker知识,用docker-compose创建再启动一个docker容器
先创建一个conf文件夹,把c_tomcat里的server.xml复制宿主机conf目录:
docker cp c_tomcat:/usr/local/tomcat/conf/server.xml .
2、宿主机的server.xml端口修改成8081。
3、再新建一个webapps目录,里面建vod文件夹,再在vod文件夹里放index.html。
4、执行docker-compose:
version: "3"
services:
tomcat8081:
image: tomcat
restart: always
volumes:
- ./conf/server.xml:/usr/local/tomcat/conf/server.xml
- ./webapps:/usr/local/tomcat/webapps
ports:
- "8081:8081"
5、执行完成后可以看到宿主机里面有2个tomcat容器
6、访问ngip:8081/vod/
看到tomcat:8081则访问成功。
7、配置nginx的conf文件,http块里新增一个server
server {
listen 9091;
server_name [ngip];
location ~ /tomcat/ {
proxy_pass http://127.0.0.1:8080;
}
location ~ /vod/ {
proxy_pass http://127.0.0.1:8081;
}
}
8、重启nginx
访问ngip:9091/tomcat,
跳转到
ngip:8080/tomcat
访问ngip:9091/vod,
跳转到
ngip:8081/vod
五、nginx配置实例——负载均衡
实现效果:浏览器访问ngip:9092/vod/,实现负载均衡,
平均访问8081和8082端口。
1、新建一个tomcat容器来启动8082端口,
同时修改webapps/vod/index.html——8081dk,
webapps2/vod/index.html——8082dk来区分2个页面
version: "3"
services:
tomcat8082:
image: tomcat
restart: always
volumes:
- ./conf/server2.xml:/usr/local/tomcat/conf/server.xml
- ./webapps2:/usr/local/tomcat/webapps
ports:
- "8082:8082"
2、配置nginx,在http块里添加下面代码:
#负载均衡
upstream myserver {
server [ngip]:8081;
server [ngip]:8082;
}
server {
listen 9092;
server_name [ngip];
location / {
proxy_pass http://myserver;
}
}
3、浏览器请求:http://10.11.7.20:9092/vod/
六、nginx负载均衡策略
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、weight
weight代表权重,权重默认为1,权重越高被分配的客户越多。用于后端服务器性能不均的情况。
upstream myserver {
server ngip:8081 weight=5;
server ngip:8082 weight=10;
}
3、ip_hash
每个请求按访问ip的hash分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream myserver {
ip_hash;
server ngip:8081;
server ngip:8082;
}
4、fair(第三方的负载均衡模块)
按后端服务器的响应时间来分配请求,响应时间短的有线分配。
upstream myserver {
fair;
server ngip:8081;
server ngip:8082;
}
nginx还是挺好玩的,每个配置都可以看成一个独立小游戏,学会了绝对不亏。