Nginx基于请求头的分发
前面介绍的分发方式适用于单个集群,而基于请求头分发适用于多个集群场景。
基于请求头的分发
1、基于host分发:适用于一个公司有多个网站,一个网站设置为一个集群
#nginx分发器设置
http {
upstream web1 { # 名为web1的反向代理群组
server server1;
}
upstream web2 { # 名为web2的反向代理群组
server server2;
}
server { # web1虚拟主机
listen 80;
server_name www.web1.com; # 基于域名分发必须有域名
location / {
proxy_pass http://web1;
}
}
server { # web2虚拟主机
listen 80;
server_name www.web2.com; # 基于域名分发必须有域名
location / {
proxy_pass http://web2;
}
}
}
2、基于开发语言分发:适用于混合开发的网站,某些大型网站既有php也有jsp
# 分发器上nginx配置
http {
upstream php {
server server1;
}
upstream html {
server server2;
}
server {
location ~* \.php$ { # 以php结尾的
proxy_pass http://php;
}
location ~* \.html$ { # 以html结尾的
proxy_pass http://html;
}
}
}
3、基于浏览器分发:常应用于PC端和移动端区分或浏览器适配
upstream curl { server server1; }
upstream firefox { server server2; }
upstream other { server server3; }
server {
listen 80;
server_name www.web1.com;
location / {
proxy_pass http://other;
if ( $http_user_agent ~* curl ) {
proxy_pass http://curl;
}
if ( $http_user_agent ~* firefox ) {
proxy_pass http://firefox;
}
}
}
4、基于源IP分发:通过ngx_http_geo_module模块,根据客户端ip访问到不同的server
upstream bj.server {
server server1; # web01
}
upstream sh.server {
server server2; # web02
}
upstream default.server {
server server3; # web03
}
geo $geo { # IP库
default default;
server1 bj; # 北京
server2 sh; # 上海
}
server {
listen 80;
server_name www.web1.com;
location / {
proxy_pass http://$geo.server$request_uri;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!