Nginx负载均衡
Nginx WEB默认发布静态页面,也可以均衡后端动态网站,用户发起HTTP请求,如果请求静态页面,Nginx直接处理并返回,如果请求的是动态页面,Nginx收到请求之后会进行判断,转到后端服务器去处理。
Nginx实现负载均衡需要基于upstream模块,同时需要设置location proxy_pass转发指令实现。
Ningx应用负载均衡集群配置,根据后端实际情况修改即可,thinkmo为负载均衡模块的名称,可以任意指定,但必须跟vhosts.conf、Nginx.conf虚拟主机的proxy_pass段保持一致,否则不能将请求转发至后端的服务器,weight表示配置权重,在fail_timeout内检查max_fails次数,失败则剔除均衡。
LB与LB2的bbs.hwf.com 、blog.hwf.com
[root@LB2 ~]# cd /usr/local/domain/
[root@LB2 domain]# vim hwf.com
upstream web_discuz {
rr;
server 192.168.1.220:80 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.230:80 weight=1 max_fails=2 fail_timeout=30s;
}
Nginx负载常用算法
rr 轮询 -- 一人一次,不支持会话保持
weight --加权轮询 指定优先级
ip_hash -- 根据用户的IP,进行分配,只要不关机,就一只访问一个,支持会话保持
url_hash --绑定访问端的url地址,锁死路径再来的话,上次访问的哪个路径还去那里(没什么用)least_conn --最小连接数,哪个机器连接数少就分发
算法使用方法
- 写在upstream池子里IP地址后面
Nginx负载动静分离
动静分离的要求:
只能在7层上做,根据资源内容
动静分离的好处:
好处就是动态的资源出了问题不影响静态,静态的资源出了问题不影响动态
环境准备
Centos7.5 负载均衡 Nginx Proxy 10.0.0.5
Centos7.5 静态资源 Nginx static 10.0.0.7
Centos7.5 动态资源 Nginx Tomcat server 10.0.0.8
静态资源操作
//在10.0.0.7服务器上配置静态资源
vim ds_kk.conf
server {
listen 80;
server_name localhost;
location / {
root /soft/code;
index index.html;
}
location ~* .*\.
(html|htm|js|png|jpg|gif|css|jpeg|txt|gz|bz2|zip|bmp|doc|xls|docx)$
{
root /soft/code/images;
}
}
/soft/code/images/这个目录专门是存图片的
//准备目录,以及静态相关图片
mkdir -p /soft/code/images/
wget -O /soft/code/images/nginx.png http://nginx.org/nginx.png
systemctl restart nginx
动态资源操作
动态页面不用做域名,负载均衡会根据静态页面进行跳转
我的理解是把静态资源摘出去剩下的就是动态资源,什么也不用改,什么也不用动
//下载tomcat帮我们解析java
tomcat能和nginx同时工作因为它默认监听的端口是8080;帮我们解析java的
yum install -y tomcat
systemctl start tomcat
//创建动态资源目录
这个ROOT目录必须要求大写
mkdir /usr/share/tomcat/webapps/ROOT/
vi /usr/share/tomcat/webapps/ROOT/java_test.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<HTML>
<HEAD>
<TITLE>JSP Test Page</TITLE>
</HEAD>
<BODY>
<%
Random rand = new Random();
out.println("<h1>Random number:</h1>");
out.println(rand.nextInt(99)+100);
%>
<BODY>
</HTML>
负载均衡调用测试
//在负载均衡10.0.0.5上配置调度,实现访问jsp和png
这里动态资源主机和静态资源主机就都只有一台,要是台数多在虚拟池里写就行了
upstream static { server 10.0.0.7:80; } upstream java { server 10.0.0.8:8080; } server { listen 80; server_name www.hebbao.com; location / { root /soft/code/; index index.html; } location ~ .*\. (html|htm|js|png|jpg|gif|css|jpeg|txt|gz|bz2|zip|bmp|doc|xls|docx)$ { proxy_pass http://static; index proxy_params; } location ~ .*\. (jsp|php|cgi|do)$ { proxy_pass http://java; include proxy_params; } }
负载均衡整合静态和动态
这个是在负载均衡上做的,因为负载均衡上是站点页面,其它后端只是分别存放静态资源和动态资源
这是nginx负载均衡的动静分离,要是单个web的动静分离只能在本地不同的目录做这个事情
mkdir -p /soft/code/
vim /soft/code/index.html
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>测试ajax和跨域名访问</title>
<script src="https://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
</head>
<script type="text/javascript">
$(document).ready(function(){
$.ajax({
type: "GET",
url: "https://www.hebbao.com/java_test.jsp",
success: function(data) {
$("#get_data").html(data)
},
error: function() {
alert("fail!!,请刷新再试!");
}
});
});
</script>
<body>
<h1>测试动静分离</h1>
<img src="https://www.hebbao.com/nginx.png">
<div id="get_data"></div>
<body>
</html>
这个代码,可以实现动静结合起来显示,这个不是运维能干的事情,我们只需要告诉开发,这个目录放至动静结合的站点首页
Nginx Location深入解析
Nginx由内核和模块组成,其中内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端的请求映射到一个location block,而location是Nginx配置中的一个指令,用于访问的URL匹配,而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。
默认Nginx.conf配置文件中至少存在一个location /,即表示客户端浏览器请求的URL为:域名+/,如果location /newindex/,则表示客户端浏览器请求的URL为:域名+/newindex/。常见Location匹配URL的方式如下:
= 字面精确匹配;
^~ 最大前缀匹配;
/ 不带任何前缀;
~ 大小写相关的正则匹配;
~* 大小写无关的正则匹配;
@ location内部重定向的变量。
其中Location =、^~、/属于普通字符串匹配,Location ~、~*属于正则表达式匹配,Location优先级与其在Nginx.conf配置文件中的先后顺序无关。
Location = 精确匹配会第一个被处理,如果发现精确匹配,Nginx则停止搜索其他任何Location的匹配。
普通字符匹配,正则表达式规则和完整URL规则将被优先和查询匹配,^~为最大前缀匹配,如果匹配到该规则,Nginx则停止搜索其他任何Location的匹配,否则nginx会继续处理其他location指令。
正则匹配"~"和"~*",如果找到相应的匹配,则Nginx停止搜索其他任何Location的匹配;当没有正则表达式或者没有正则表达式被匹配的情况下,那么匹配程度最高的逐字匹配指令会被使用。
Location规则匹配优先级总结如下:
(location =) > (location 完整路径) > (location ^~ 路径) > (location ~|~* 正则顺序) > (location 部分起始路径) > (/)
如下为Nginx Location规则案例演示:
location = / {
[ configuration L1 ]
#只会匹配/,优先级比Location /低。
}
location = /index.html {
[ configuration L2 ]
#只会匹配/index.html,优先级最高。
}
location / {
[ configuration L3 ]
#匹配任何请求,因为所有请求都是以"/"开始;
#但是更长字符匹配或者正则表达式匹配会优先匹配,优先级最低。
}
location = /images/ {
[ configuration L4 ]
#匹配任何以/images/开始的请求,并停止匹配其它location;
}
location ~* \.(html|txt|gif|jpg|jpeg)$ {
[ configuration L5]
# 匹配以html、txt、gif、jpg、jpeg结尾的URL文件请求;
# 但是所有/images/目录的请求将由 [Configuration L4]处理。
}
浏览器发起HTTP Request URI案例与Location规则案例匹配如下:
* / ->匹配configuration L3;
* /index.html匹配configuration L2;
* /images/匹配configuration L4;
* /images/logo.png匹配configuration L4;
* /img/test.jpg匹配configuration L5。
企业生产环境中无需在Nginx.conf配置文件中同时添加五种规则匹配,如下为企业生产环境Nginx Location部分配置代码:
location /
{
root /var/www/html/;
expires 60d;
}
location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
{
root /var/www/html/;
expires 60d;
}
location ~ .*\.(jsp|php|cgi|do)$
{
root /var/www/html/;
proxy_pass http://linux_web;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location =/newindex.html
{
root /var/www/newwww/;
expires 60d;
}
继续阅读

我的微信
这是我的微信扫一扫
评论