网站首页 > 精选教程 正文
一、模块简介
ngx_http_upstream_module模块用于定义可以由proxy_pass、fastcgi_pass、uwsgi_pass、scgi_pass、memcached_pass和grpc_pass指令引用的服务器组。
二、示例
upstream feng {
server 192.168.1.1:8080 weight = 8;
server www.feng.club weight = 2;
}
server {
location / {
proxy_pass http://feng;
}
}
注意:upstream定义在http下!!!
三、upstream指令
1.分组的方法
upstream的作用是定义一组服务器,服务器可以在不同的监听端口,还可以混合使用侦听TCP和UNIX套接字的服务器。
官方文档示例:
upstream backend {
server backend1.example.com weight=5;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
server backup1.example.com backup;
}
定义服务器address和其他parameters服务器。
该地址可以指定为域名或IP地址(IP:端口,如果不加端口,默认为80),也可以指定为 unix:”前缀后指定的UNIX域套接字路径。
2.负载均衡的算法
①WRR(WeightedRound-Robin)
在示例配置中,每10个请求将如下分配:向192.168.1.1:8080发送8个请求,向www.fengcc.club发送2个请求。如果在与upstream定义的服务器通讯时发生错误,那么nginx会把请求传递给下一个服务器。
配置权重的方法是定义关键字"weight"
weight = number<br data-filtered="filtered">注:如果不定义,默认值为1
②RR(Round-Robin)
Nginx默认使用的负载均衡算法是加权轮询算法,依次将请求分配到各个后台服务器中,适用于后台机器性能一致的情况。
挂掉的机器可以自动从服务列表中剔除。
示例:
upstream rr {
192.168.1.1;
192.168.1.2;
192.168.1.3;
192.168.1.4;
}
③ip_hash
在该方法中,请求将基于客户端IP地址在服务器之间分配。客户端IPv4地址的前三个八位位组或整个IPv6地址用作哈希密钥。该方法确保了来自同一客户端的请求将始终传递到同一服务器,除非该服务器不可用。
如果客户请求的此台服务器不可用,则该请求将传递到另一台服务器。
在一定情况下,用户永远请求的是同一台服务器。
示例:
upstream rr {
ip_hash;
192.168.1.1;
192.168.1.2;
192.168.1.3;
}
四、proxy模块介绍
ngx_http_proxy_module模块允许将请求传递到另一台服务器。
五、示例
location / {
proxy_pass http://feng;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
六、proxy_pass的使用
1.proxy_pass的语法
“proxy_pass URL” 设置代理服务器的协议和地址。
作为协议,可以指定为“http”或“https”。
作为URL,可以指定为域名或IP地址+端口。
proxy_pass http://www.feng.club;
proxy_pass http://192.168.1.1:8080;
proxy_pass http://localhost:8080/url/;
proxy_pass http:// unix:/tmp/backend.socket:/ uri /;
2.URI请求传递给服务器的两种方法
①proxy_pass使用URI指定了伪指令,那么当请求传递到服务器时, 与该位置匹配的请求URI 的一部分 将被伪指令中指定的URI代替:
location / {
proxy_pass http://127.0.0.1/remote/;
}
②proxy_pass指定为不带URI,在处理更改的URI时传递完整的规范化请求URI。
location /some/path/ {
proxy_pass http://127.0.0.1;
}
3.无法确定请求URI中要替换的部分
location /name/ {
proxy_pass http://127.0.0.1$request_uri;
}
在这种情况下,如果在指令中指定了URI,它将照原样传递到服务器,从而替换原始请求URI。
七、proxy_set_header的使用
允许在传递给代理服务器的请求标头中重新定义或附加字段 。该值可以是文本,变量,以及它们的组合 。默认情况下,仅重新定义两个字段:
proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
如果启用了缓存,则标题栏中的字段“ If-Modified-Since”,“ If-Unmodified-Since”,“ If-None-Match”,“ If-Match”,“ Range”和“ If-Range”原始请求不会传递到代理服务器。
八、简单示例:把自己的域名代理到淘宝(访问自己的域名跳转到淘宝)
Nginx配置如下:
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
upstream taobao {
server www.taobao.com:443;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/nginx/html;
}
ssl_certificate XXXXX.crt;
ssl_certificate_key XXXXX.key;
server_name XXXX你的域名;
location / {
proxy_pass https://taobao;
proxy_set_header Host www.taobao.com;
}
}
猜你喜欢
- 2024-10-11 解决 Nginx-Ingress 重定向失败问题
- 2024-10-11 Nginx http 强转https nginx转发http请求
- 2024-10-11 在NGINX中从HTTP重定向到HTTPS printf重定向到串口
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)