Nginx配置实例
Nginx配置实例
反向代理
实现的效果
打开浏览器,在浏览器地址栏中输入地址www.123.com ,跳转到Linux系统的Tomcat主页面中。
准备工作
安装Tomcat和JDK
安装JDK
启动Tomcat
默认8080端口没开,需要手动对外开放
分析过程
Windows的host文件:
在Nginx中配置反向代理的设置
反向代理2
实现的效果:
使用Nginx反向代理,根据访问的路径跳转到不同的端口的服务中,使用Nginx坚挺端口为9001,
访问http://127.0.0.1:9001/edu/ 直接跳转到127.0.0.1:8080
访问http://127.0.0.1:9001/vod/ 直接跳转到127.0.0.1:8081
准备工作
更改端口号
Nginx的配置
测试
Location指令的说明
Nginx的HTTP配置主要包括三个区块,结构如下:
http { //这个是协议级别
include mime.types;
default_type application/octet-stream;
keepalive_timeout 65;
gzip on;
server { //这个是服务器级别
listen 80;
server_name localhost;
location / { //这个是请求级别
root html;
index index.html index.htm;
}
}
}
~ : 用于表示URL包含正则表达式,并且区分大小写
~* : 用于表示URL包含正则表达式,并且不区分大小写
= : 用于不含正则表达式的URL前,要求请求字符串与URL严格匹配,如果匹配成功,就停止继续向下搜索并处理请求(精确匹配)
^~ :
= : 开头表示精确匹配
^~ : 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。以xx开头
~ : 开头表示区分大小写的正则匹配 以xx结尾
~* : 开头表示不区分大小写的正则匹配 以xx结尾
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
/ : 通用匹配,任何请求都会匹配到。
没有修饰符 必须以指定的模式开始
server {
server_name baidu.com;
location /abc {
……
}
}
那么,如下是对的:
http://baidu.com/abc
http://baidu.com/abc?p1
http://baidu.com/abc/
http://baidu.com/abcde
= 表示:必须以指定的模式匹配
server {
server_name sish
location = /abc {
……
}
}
那么,如下是对的:
http://baidu.com/abc
http://baidu.com/abc?p1
如下是错的:
http://baidu.com/abc/
http://baidu.com/abcde
~ 表示:指定的正则表达式要区分大小写
server {
server_name baidu.com;
location ~ ^/abc$ {
……
}
}
那么,如下是对的:
http://baidu.com/abc
http://baidu.com/abc?p1=11&p2=22
如下是错的:
http://baidu.com/ABC
http://baidu.com/abc/
http://baidu.com/abcde
~ 表示:指定的正则表达式不区分大小写*
server {
server_name baidu.com;
location ~* ^/abc$ {
……
}
}
那么,如下是对的:
http://baidu.com/abc
http://baidu..com/ABC
http://baidu..com/abc?p1=11&p2=22
如下是错的:
http://baidu..com/abc/
http://baidu..com/abcde
^~ : 类似于无修饰符的行为,也是以指定模式开始,不同的是,如果模式匹配,那么就停止搜索其他模式了。
@ :定义命名location区段,这些区段客户段不能访问,只可以由内部产生的请求来访问,如try_files或error_page等
如果URL表达式含有正则表达式,则必须有~
或者~*
标识
查找顺序与优先级
1:带有“=“的精确匹配优先
2:没有修饰符的精确匹配
3:正则表达式按照他们在配置文件中定义的顺序
4:带有“^~”修饰符的,开头匹配
5:带有“~” 或“~*” 修饰符的,如果正则表达式与URI匹配
6:没有修饰符的,如果指定字符串与URI开头匹配
Location区段匹配示例
location = / {
# 只匹配 / 的查询.
[ configuration A ]
}
location / {
# 匹配任何以 / 开始的查询,但是正则表达式与一些较长的字符串将被首先匹配。
[ configuration B ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 开始的查询并且停止搜索,不检查正则表达式。
[ configuration C ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配任何以gif, jpg, or jpeg结尾的文件,但是所有 /images/ 目录的请求将在Configuration C中处
理。
[ configuration D ]
} 各
请求的处理如下例:
/ ---> onfiguration A
/documents/document.html ---> configuration B
/images/1.gif ---> configuration C
/documents/1.jpg ---> configuration D
负载均衡
增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器上,也就是我们说的负载均衡。
实现效果
浏览器输入192.168.189.136/edu/1.html,负载均衡效果,平均到8080和8081端口。
准备工作
准备两台Tomcat,一台端口号8080,另一台端口号8081。在两台Tomcat服务器的webapps目录下,新建edu
文件夹,并创建页面1.html
Nginx的负载均衡的配置
测试
出现404,或者清理浏览器缓存
分配方式策略
轮询
轮询方式是Nginx负载默认的方式,顾名思义,所有请求都按照时间顺序分配到不同的服务上,如果服务Down掉,可以自动剔除,如下配置后轮训10001服务和10002服务。
upstream dalaoyang-server {
server localhost:10001;
server localhost:10002;
}
权重
指定每个服务的权重比例,weight和访问比率成正比,通常用于后端服务机器性能不统一,将性能好的分配权重高来发挥服务器最大性能,如下配置后10002服务的访问比率会是10001服务的二倍。
upstream dalaoyang-server {
server localhost:10001 weight=1;
server localhost:10002 weight=2;
}
IP_hash
每个请求都根据访问ip的hash结果分配,经过这样的处理,每个访客固定访问一个后端服务,如下配置(ip_hash可以和weight配合使用)。可以解决session共享。
upstream dalaoyang-server {
ip_hash;
server localhost:10001 weight=1;
server localhost:10002 weight=2;
}
最少连接数
将请求分配到连接数少的服务上。
upstream dalaoyang-server {
least_conn;
server localhost:10001 weight=1;
server localhost:10002 weight=2;
}
fair
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream dalaoyang-server {
server localhost:10001 weight=1;
server localhost:10002 weight=2;
fair;
}
动静分离
推荐好的文档