1.配置反向代理
解释:当浏览器输入:http://wmd02/getPerson/10007可以访问到真正的服务端
1.在客户端的host文件中配置域名解析:即当浏览器输入wmd02时,会访问到192.168.2.129服务器
192.168.2.129 wmd02
2.配置nginx服务器:上述未设置端口,即会访问到192.168.2.129服务器的80端口,即nginx服务
/usr/local/nginx/conf/nginx.conf配置:
server {
listen 80;
server_name 192.168.2.129;
location / {
root html;
#配置下述:即访问时,映射到该服务上
proxy_pass http://192.168.2.2:8001;
index index.html index.htm;
}
}
3.nginx配置文件重载:
./configure -s reload
4.页面访问:http://wmd02/getPerson/10007 也访问到了真实的服务上:
nginx访问:http://wmd02/getPerson/10007
真实访问: http://192.168.2.2:8001/getPerson/10007
发现nginx隐藏了真实的服务器ip和端口!起到了保护服务器的目的!
场景2:当客户端访问路径不同,调用不同的服务提供端
1.启动两个服务提供端提供服务
2.当客户端访问路径包含:
person1访问1号服务提供端
person2访问2号服务提供端
3.nginx的配置文件nginx.cof配置:可以配置多个server(即监听)如下:
监听端1:监听该服务器的80端口,然后再进行反向代理
server {
listen 80;
server_name 192.168.2.129;
location / {
root html;
proxy_pass http://192.168.2.2:8001;
index index.html index.htm;
}
}
监听端2:监听该服务器的9001端口,然后进行反向代理,一个server中可以配多个location,即按照路径的不同可以访问到不同的服务器上
server {
listen 9001;
server_name 192.168.2.129;
location ~ /person1/ {--->当路径里包含person1会访问1服务器,/person1路径也会加上变为:http://192.168.2.2:8001/person1/getPerson/10007
proxy_pass http://192.168.2.2:8001;
}
location ~ /person2/ {--->当路径里包含person2会访问2服务器
proxy_pass http://192.168.2.2:8002;
}
}
示例:如果访问:http://wmd02:9001/person1/getPerson/10007
会经反向代理访问到:http://192.168.2.2:8001/person1/getPerson/10007
4.location的指令说明:
该指令用于匹配URL
语法如下:
location [ = | ~ | ~* | ^~ ] uri {
}
1.=:用于不含正则表达式的uri前,要求请求字符串和uri严格匹配,如果匹配成功,就停止继续向下搜索并处理该请求
2.~:用于表示uri包含正则表达式,并且区分大小写
3.~*:用于表示uri包含正则表达式,但是不区分大小写
4.^~:用于不包含正则表达式的uri前,要求nginx服务器找到标识uri和请求字符串匹配度最高的location后,立即使用此location进行处理,
而不再使用location块中的正则uri和请求字符串做匹配
5./ 通用匹配,任何请求都会匹配到。
6.!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
注意:如果uri包含正则表达式,则必须要有~或者~*标识
Nginx负载均衡
场景:例如并发请求将压力均摊到服务
nginx的配置:
#1.在http块配置服务提供端的集群地址
upstream myserver{
server 192.168.2.2:8001;
server 192.168.2.2:8002;
}
server {
listen 80;
server_name 192.168.2.129;
#2.在server块,使用集群名称
location / {
root html;
proxy_pass http://myserver;
index index.html index.htm;
}
}
此时访问:http://wmd02/getPerson/10007
页面输出:服务提供端口不一致了,即不同服务轮训的提供服务
{"status":200,"message":"查询成功!id:10007 serverPort:8001","result":{"id":10007,"name":"吴孟达","age":18,"message":"吴孟达留言"}}
{"status":200,"message":"查询成功!id:10007 serverPort:8002","result":{"id":10007,"name":"吴孟达","age":18,"message":"吴孟达留言"}}
nginx的负载策略:
1.轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
2.weight(权重)
weight代表权,默认是1,权重越高被分配的客户端越多
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况
例如:
upstream myserver{
server 192.168.2.2:8001 weight=5;
server 192.168.2.2:8002 weight=10;
}
3.ip_hash
每个请求按照访问ip的hash结果分配,这样每个方可固定的访问一个后端服务器,可以解决session问题,例如
upstream myserver{
ip_hash;
server 192.168.2.2:8001;
server 192.168.2.2:8002;
}
4.fair(第三方)
按照后端服务器的响应时间来分配,响应时间短的优先分配
upstream myserver{
fair;
server 192.168.2.2:8001 weight=5;
server 192.168.2.2:8002 weight=10;
}
Nginx配置实例---动静分离
简介:
Nginx动静分离简单的说就是把动态和静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离
严格意义上说,应该是动态请求和静态请求分开,可以理解成使用nginx处理静态页面,tomcat处理动态页面。
分成两种:
1.纯粹的把静态文件独立成单独的域名,放在独立的服务器上,
2.动态和静态混在一起,通过nginx分开
通过loacation指定不同的后缀名实现不同的请求转发,通过expires参数设置,可以使浏览器缓存过期时间,减少与服务器之间的请求和流量
具体Exprise定义:给一个资源设置过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量
此方法适合不经常变动的资源(如果经常变动的资源不建议Expires来缓存),如果设置3d,表示在3天之内访问这个URL,发送一个请求,对比服务器改文件
最后的更新时间没有变化,则不会从服务器上抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码200
配置可以访问到服务器上的静态资源,如服务器上的文本,相片等
示例:
server{
listen 9002;
location /{
root /usr/local/nginx/conf;
#index nginx.conf;
autoindex on;文件按照列表展示
}
}
当访问:http://wmd02:9002/时,会展示服务器/usr/local/nginx/conf路径下的文件列表