总结:
先谈理解:
反向代理是配置 proxy_pass 可以只配置一个地址如 :
proxy_pass http://127.0.0.1:8081;
也可以配置多个
定义负载均衡服务器:
upstream myserver {
server 192.168.12.127:8080;
server 192.168.12.127:8081;
}
修改proxy_pass
proxy_pass http://myserver;
这样就实现了 反向代理 (proxy_pass)+ 负载均衡(upstream)
进入配置文件,如下配置
server {
listen 9000;
server_name 192.168.12.127;
location ~/shisan01/ {
proxy_pass http://127.0.0.1:8080;
}
location ~/shisan02/ {
proxy_pass http://127.0.0.1:8081;
}
}
PS:注意要记得开发端口号:8080 8081 9000
PS:location的指令可以百度了解一下
在http块中配置
upstream myserver {
server 192.168.12.127:8080;
server 192.168.12.127:8081;
}
server {
listen 80;
server_name 192.168.12.127;
location / {
proxy_pass http://myserver;
root html;
index index.html index.htm;
}
}
轮询:默认策略;每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
权重:指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream myserver {
server 192.168.12.127:8080 weight=10;
server 192.168.12.127:8081 weight=5;
}
IP绑定 ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
upstream myserver {
ip_hash;
server 192.168.12.127:8080;
server 192.168.12.127:8081;
}
fair:按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backserver {
server 192.168.12.127:8080;
server 192.168.12.127:8081;
fair;
}
url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
server {
listen 80;
server_name 192.168.12.127;
location /html/ {
root /shisan/;
index index.html index.htm;
}
location /image/ {
root /shisan/;
autoindex on; // 列出文件的目录,可以自行观看对比就知道
}
}
语法规则: location [=||*|^~] /uri/ {… }
首先匹配 =,其次匹配^~,其次是按文件中顺序的正则匹配,最后是交给 /通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
符号
含义
=
= 开头表示精确匹配
^~
^~开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)
~*
~ 开头表示不区分大小写的正则匹配*
!和!*
!和!*分别为区分大小写不匹配及不区分大小写不匹配的正则
/
用户所使用的代理(一般为浏览器)
$http_x_forwarded_for
可以记录客户端IP,通过代理服务器来记录客户端的ip地址
$http_referer
可以记录用户是从哪个链接访问过来的
比这些 location 规则来选择一个 location,对比的顺序可以总结为:
=
匹配,如果当前请求匹配上了,搜索将会停止,直接使用这个这个 location.^~
这个modifier,nginx 会停止搜索并直接使用这个 location.^~
,暂存这个 location并且继续搜索.~
和~*
),第一个匹配上这种会被当做有效的 location来处理这个请求.如下是一些 location 配置的例子,用来详细描述上面所说的处理顺序,你也可以按照具体实际情况来修改这些例子.
location = / {
# 只处理请求 /.
}
location /data/ {
# 所有以 /data/ 匹配,但是还会继续搜索.
# 如果没有其他 location 匹配上,就用这个处理请求.
}
location ^~ /img/ {
# 所有以 /img/ 开头的请求并且会停止搜索.
}
location ~* .(png|gif|ico|jpg|jpeg)$ {
# 以png, gif, ico, jpg ,jpeg结尾的请求.
# 如果请求是到 /img/ 路径的话 还是会被上面??的 location 处理
}
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦