Nginx之upstream和proxy模块使用

一、模块简介

ngx_http_upstream_module模块用于定义可以由proxy_pass、fastcgi_pass、uwsgi_pass、scgi_pass、memcached_pass和grpc_pass指令引用的服务器组。

二、示例

 1 upstream feng {
 2     server 192.168.1.1:8080 weight = 8;
 3     server www.feng.club weight = 2;
 4 }
 5
 6 server {
 7     location / {
 8         proxy_pass http://feng;
 9     }
10 }

注意:upstream定义在http下!!!

三、upstream指令

1.分组的方法

upstream的作用是定义一组服务器,服务器可以在不同的监听端口,还可以混合使用侦听TCP和UNIX套接字的服务器。

官方文档示例:

1 upstream backend {
2     server backend1.example.com weight=5;
3     server 127.0.0.1:8080       max_fails=3 fail_timeout=30s;
4     server unix:/tmp/backend3;
5
6     server backup1.example.com  backup;
7 }

定义服务器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注:如果不定义,默认值为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模块允许将请求传递到另一台服务器。

五、示例

1 location  / {
2     proxy_pass http://feng;
3     proxy_set_header Host $host;
4     proxy_set_header X-Real-IP $remote_addr;
5 }

六、proxy_pass的使用

1.proxy_pass的语法

“proxy_pass URL” 设置代理服务器的协议和地址。

作为协议,可以指定为“http”或“https”。

作为URL,可以指定为域名或IP地址+端口。

1 proxy_pass http://www.feng.club;
2
3 proxy_pass http://192.168.1.1:8080;
4
5 proxy_pass http://localhost:8080/url/;
6
7 proxy_pass http:// unix:/tmp/backend.socket:/ uri /;

2.URI请求传递给服务器的两种方法

proxy_pass使用URI指定了伪指令,那么当请求传递到服务器时, 与该位置匹配的请求URI 的一部分 将被伪指令中指定的URI代替:

1 location / {
2     proxy_pass http://127.0.0.1/remote/;
3 }

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的使用

允许在传递给代理服务器的请求标头中重新定义或附加字段 。该可以是文本,变量,以及它们的组合 。默认情况下,仅重新定义两个字段:

1 proxy_set_header Host       $proxy_host;
2 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;
        }
}

原文地址:https://www.cnblogs.com/feng0919/p/11968257.html

时间: 2024-10-08 17:28:49

Nginx之upstream和proxy模块使用的相关文章

7、nginx的upstream及fastcgi模块应用

ngx_http_proxy_module, ngx_http_upstream_module ngx_http_proxy_module:实现反向代理及缓存功能 proxy_pass http://{SERVER_IP|UPSTREAM_NAME}/uri proxy_cache_path path [levels=levels] keys_zone=name:size [inactive=time] [max_size=size]; proxy_cache zone_name;       

Nginx反向代理、缓存、 负载均衡、upstream以及fastcgi模块应用

Nginx反向代理,缓存, 负载均衡, upstream及fastcgi模块应用 Nginx版本为nginx-1.6.2-1.el6.ngx.x86_64.rpm可以去官网下载: http://nginx.org/packages/centos/6/x86_64/RPMS/ [[email protected] ~]# rpm -ivhnginx-1.6.2-1.el6.ngx.x86_64.rpm [[email protected] ~]# vim/var/www/html/index.ht

nginx的proxy模块及upstream模块介绍

在互联网场景,nginx通常担任处理静态文件的web文件服务器与反向代理服务器的角色. nginx反向代理的特性: 1.在上传文件的场景中,客户端与nginx反向代理建立连接,先把需要上传的文件上传到代理服务器,当代理接收完成文件后,再与上游的真实服务器建立连接,快速把文件上传到服务器(与squid的工作方式不同).为什么要这样做?客户端与代理服务器的连接是互联上慢速连接,而代理与上游服务的连接是内网的高速连接,再因为http的连接是无状态的,客户端与代理的连接可开启keep-alive功能,而

Nginx之upstream模块和proxy模块简单应用

Nginx在web服务中是一个很强大的工具,可以做静态web服务,当然它的最常用的功能就是其负载均衡,下面只是应用nginx的upstream模块和proxy模块来做一个小实验.在此体现的功能也只是冰山一角. upstreem 使用注意:1.只能使用http上下文.2.各server只能直接使用IP或者主机名,不要加协议,在此次实验中使用server IP的方式来代理其后端,其后端使用Apache,提供web服务. 实验拓扑图: 实验配置 本实验主要应用nginx的upstream模块和prox

nginx的upstream模块实现负载均衡

通过nginx搭建负载均衡,这里通过这个upstream模块来实现,在nginx.org的官网可以看到相应的模块 proxy模块也可以实现负载均衡. 第一.打开lamp和lnmp  两个web服务器 Nginx-proxy这台服务器安装nginx,负载均衡需要nginx 安装nginx1.6.2 tar -xf nginx-1.6.2.tar.gz ls cd nginx-1.6.2 useradd -s /sbin/nologin -M nginx ./configure --user=ngi

Nginx专题: upstream模块和缓存的简单使用

Nginx专题: upstream模块和缓存的简单使用 前言: 本文接着上篇Nginx专题: 从编译安装到URL重写来介绍Nginx的负载均衡模块使用方法, 本文的实验没有考虑大多数情况, 例如两个web服务器之间的数据同步等, 主要写Nginx如何作为负载均衡器使用并且缓存 实验拓扑 实验环境 主机 IP地址 功用 lb.anyisalin.com 172.16.1.2 负载均衡并缓存静态资源 web1.anyisalin.com 172.16.1.3 提供web服务 web2.anyisal

Nginx配置之location模块和proxy模块

1.location指令的用法介绍 Location主要用来匹配url,如:http://www.beyond.com/nice,在这里对于location来说www.beyond.com是域名,/nice才是url.对于url的匹配,可以使用字符串或者正则表达式,但如果是正则表达式,必须指定前缀,location指令来匹配不同的url,匹配成功后应用不同的配置语法:location [=|~|~*|^~|@]/url {…..}[=]精确匹配,如果找到匹配等号的内容,立即停止搜索,并立即处理请

nginx添加sticky cookie 分流模块

需要下载nginx源码和sticky,在nginx配置文件中添加sticky模块,然后重新编译nginx. #准备安装基础环境:yum install gcc openssl-devel pcre-devel zlib-devel #下载nginx1.6.3wget http://nginx.org/download/nginx-1.6.3.tar.gz #解压缩nginxtar xvf nginx-1.6.3.tar.gz #安装依赖的库yum -y install libxml2 libxm

nginx的upstream目前支持5种方式的分配

Nginx nginx的upstream目前支持5种方式的分配 FROM: 转载 1 轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器, 如果后端服务器down掉, 能自动剔除. 2 weight 指定轮询几率, weight和访问比率成正比, 用于后端服务器性能不均的情况.例如: 1 2 3 4 upstream bakend {     server 192.168.0.14 weight=10;     server 192.168.0.15 weight=10; } 3 ip_