安装 <环境为centos7.0>
wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install nginx
sudo systemctl enable nginx.service
systemctl start nginx 启动
service nginx start //启动
service nginx stop //停止
service nginx restart //重启
service nginx reload //重新加载配置文件
配置
记得修改配置后,重启 nginx 或者重载配置
Paste_Image.png
一般nginx.conf 的配置文件都存在如下目录中的其中一个:
/usr/local/nginx/conf
/etc/nginx
/usr/local/etc/nginx
我的nginx目录如下
编辑文件
在centos下编辑文件,
vi nginx.conf //打开filename文件
:w //保存文件
:w vpser.net //保存至vpser.net文件
:q //退出编辑器,如果文件已修改请使用下面的命令
:q! //退出编辑器,且不保存
:wq //退出编辑器,且保存文件
a //在当前光标位置的右边添加文本
i //在当前光标位置的左边添加文本
A //在当前行的末尾位置添加文本
I //在当前行的开始处添加文本(非空字符的行首)
O //在当前行的上面新建一行
o //在当前行的下面新建一行
R //替换(覆盖)当前光标位置及后面的若干文本
J //合并光标所在行及下一行为一行(依然在命令模式)
nginx.conf 文件中的模块:
http -> server -> location 一级包涵一级
这里我为了方便查看,把几个server都放在一起,一般是一个server放到一个 .conf 文件中的。
这里通过 vi nginx.conf 进行编辑:
http {
server {
listen 80;
server_name localhost;
root html;
index index.html index.htm;
location /app {
root /html/app;
index app.html;
}
}
upstream test.com {
# ip_hash;
server localhost:3000;
server localhost:1234;
}
server {
listen 8080;
server_name localhost;
location / {
proxy_pass http://test.com ;
# proxy_pass http://115.22.1.8
}
}
}
一个server相当于一个虚拟主机
listen 指当前server监听的端口,
server_name 指的是Ip地址,
root 指的的当前server 的根目录,
index 指的是默认主页
例如 我本机访问:http://localhost
返回的就是 html目录下的 index.html
在一个server中的 location 的概念相当于 nodejs 和 think php 中的路由,就是匹配路径。
如果有多个 location 匹配成功,那么 nginx 会匹配前缀最长的
例如 我本机访问:http://localhost/app
返回的就是 html/app 目录下的 app.html
location匹配规则
~ 波浪线表示执行一个正则匹配,区分大小写
~* 表示执行一个正则匹配,不区分大小写
^~ ^~表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录
= 进行普通字符精确匹配
proxy_pass 就是转发的作用
代码中是将 http://localhost:8080 收到的请求转发到 upstream test.com
注释代码中是将 http://localhost:8080 收到的请求 转发到 http://115.22.1.8
负载均衡
继续接着上面的代码:
在 upstream 模块中,:配置了 两个均衡服务器,我这里是本机开启了两个不同端口的服务。你也可以配置 远程的服务器,如下:
upstream test.com {
#ip_hash;
server 115.22.1.1:3000 weight=2;
server 115.22.1.2:3000 weight=1;
server 115.22.1.3:3000 weight=1 max_fails=2 fail_timeout=30s;
server 115.22.1.4:3000 down;
server 115.22.1.5:3000 backup;
}
# weight 表示权重,权重越大,被分配的任务越多
# max_fails 最大失败次数
# fail_timeout 失败时间
# down 不参与负载
# backup 当其他服务器繁忙,或者宕机时,启用该服务器
在 upstream 模块的下面还有一个 server 这个是代理服务器,就是通过这个代理服务器来均衡请求的。
例如: 我本机访问 http://localhost:8080/app ,
第一次请求会分配到 115.22.1.1:3000/app 的服务器上
第二次请求会分配到 115.22.1.2:3000/app 的服务器上
分配算法:(# 号为注释)
这段解释是是摘自:
文/conghua(简书作者)
原文链接:http://www.jianshu.com/p/90831a94ce43
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
轮询(默认)。每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响。
ip_hash。每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题。
fair。这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块。
url_hash。此方法按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包。
参考:
http://www.jianshu.com/p/d5114a2a2052
http://www.jianshu.com/p/311a1d12145f
关于负载均衡的一些文章:
全栈必备 负载均衡
大型网站架构系列:负载均衡详解
网友评论