nginx反向代理功能及常用配置

反向代理指的是用代理服务器来响应客户端的请求,然后根据一定的调度算法将请求发送到后端服务器,当后端服务器处理完请求后,再将请求处理的结果发送给反向代理服务器,由代理服务器将处理结果发送给客户端的一种数据请求模式。
Nginx作为近年来比较火的反向代理服务器,主要用于转发客户机请求,后台有多个http服务器提供服务,nginx的功能就是把请求转发给后面的服务器,决定哪台目标主机来处理当前请求。


后端的服务器我们在这里称为upstream server,在上图所示中,中间的反向代理服务器,首先自己扮演一个用户所请求的资源服务器,比如http服务器,然后接受客户端的请求,将请求报文拆解封装,根据请求的内容,再把自己扮演成客户端将请求发送到后端upstream server进行资源获取。取得资源之后,反向代理服务器将反馈回来的的资源数据包进行拆除,然后由自己进行封装反馈给客户端。客户端看来就是反向代理服务器自己在响应资源请求。
反向代理服务器是工作在应用层的,所以它能够取得用户所请求的URL,然后根据请求文件的后缀名决定将请求调度到哪一种服务器上面去。 nginx工作在应用层面, 通信需要借助套接字,最大并发能力大概在65535的一半。
其中为了保持反向代理服务器的正常运行可以基于DNS域名解析做轮询调度,也可以用keepalived做高可用性。
在nginx反向代理的组织架构中日志分析记录应该怎样实现?
客户端将请求发送给反向代理服务器,此时源IP为cip目标IP为pip,代理服务器通过nginx进程对数据包进行拆包,分析用户请求的资源,然后将数据包封装起来发送给后端的upstream server,此时源IP为lip,目标IP为uip,此时后端的upstream server服务器日志记录的所有请求ip应该都为反向代理服务器的lip地址,无法获取到客户端的真实IP地址。所以日志分析可以加在代理服务器上面,对客户端的请求做用户行为分析。当然代理服务器在向后端发送数据包的时候可以给它加一个自定义的首部;在自定义的首部说明对应的请求客户端的ip地址,后端服务器在记录日志时只记录新添加的首部的ip信息,这样就可以获取到客户端的真时ip地址。

nginx反向代理服务器的定义格式及常用配置参数
ngx_httpproxy module模块:nginx反向代理模块
格式为:

server{
            listen   port#;
            server_name
            location  /  {
                    proxy_pass http://upstream_server:port/;         //port可以省略
                        }
            }

例如将客户端的请求通过反向代理服务器发送到后端的web1主机,只需要在nginx的主配置文件的location字段中定义

location  /   {
                porxy_pass  http://web1/;
                proxy_set_header Host  $host;
        proxy_set_header X-Real-IP $remote_adrr;      //同时将客户端的真实IP地址与主机名添加在数据包首部,传递给后端服务器。
                    }

url的重定向

location /url {
            proxy_pass http://upstream_server:port/newurl;  表示客户端请求的是一个URL,然后调度器调度到一个新的URL上面去
                }

使用正则表达式进行url的匹配

location ~* \.(jpg|png|gif)$ {
                proxy_pass http://upstream_port;    //无论正则表达式匹配到的是什么都会自动补到ip地址的后面
                }

例如在后端服务器上的web目录下上传一张.jpg格式的文件,然后在nginx反向代理服务器的主配置文件中用正则表达式定义url

location ~* \.(jpg|png|gif)$ {
                proxy_pass   http://upstream_server;
                }

upstream负载均衡模块:只能定义在http中,内部使用server指令
例如我们有多台upstream server主机,此时反向代理服务器需要在http字段定义

upstream up_name {
            server upstream_server1;
            server upstream_server2;
            server upstream_server3;
            ……;
        }

当我们定义了upstream功能之后在调用时只需要在location中使用upstream定义字段的名字即可

location / {
                proxy_pass  http://up_name/;      //这样定义反向代理服务器在接收到客户端的请求之后会根据调度算法将请求传递给所有定义在upstream中的服务器。
        }

nginx反向代理的缓存功能定义
操作系统的缓存靠键值存储,其中键是存放在内存中的,值存放在磁盘中,内存中存放的键其实就是url加上磁盘存放的值对应的节点号,反向代理可以定义缓存在磁盘中存放时可以使用多少级子目录来存放值。
如果启用反向代理服务器的缓存功能需要在nginx的主配置文件中的http字段来定义,格式为

proxy_cache_path  path    levels=num:num keys_zone=cache_name:#m
具体事例
proxy_cache_path  /cache/ngxin  levels=1:1 keys_zone=mycache:32m   //表示定义一个名称为mycache的2级缓存,每级缓存使用1个字符进行标识,缓存路径为/cache/nginx,缓存空间大小为32M

使用缓存只需要在location中引用名称以及一些参数即可

location  /  {
                proxy_cache  mycache;
                proxy_cache_valid 200 1d;  //返回结果为200的缓存时间为1天;
                proxy_cache_valid  301 302 10m;  //返回结果为301,302的缓存时间为10分钟;
                prixy_cache_valid  ant 1m; //其它的缓存时间为1分钟;
                proxy_cache_use_stale  error  timeout; //如果返回结果为错误,或者请求超时则返回给客户端一个陈旧的缓存信息
                proxy_pass   http://up_upstream/;
        }

反向代理服务器为upstream server服务器做健康状态检查

upstream up_name  {
            server upstream_server1 max_fails=2 fail_timeout=1;   //单位周期为1的时间内,达到2次请求失败则标记为节点不可用,并等待下一个周期的检查,判断其是否恢复正常。
            server upstream_server2 max_fails=2 fail_timeout=1;
        }

备用服务器的标记

upstream up_name  {
            server upstream_server1 ;
            server upstream_server2 backup;    //标记此服务器为备用服务器,只有主服务器出现故障时,此服务器才会工作,否则处于待机状态。

其它一些配置定义在location的参数

proxy_connect_tineout:会话超时时长
proxy_read_tineout:等待响应会话时长
proxy_hide_header:隐藏由反向代理服务器响应给客户端时指定的首部

原文地址:http://blog.51cto.com/11970509/2342073

时间: 2024-12-08 00:31:11

nginx反向代理功能及常用配置的相关文章

FastDFS + Nginx 反向代理缓存 安装与配置

FastDFS + Nginx 反向代理缓存 安装与配置 作者:斯巴达克斯 时间:March 26, 2015 分类:存储 操作系统 CentOS release 6.5 (Final) 64 nginx相关软件 nginx-1.4.7 下载地址: http://nginx.org/en/download.html#nginx清除缓存模块 ngx_cache_purge-2.1 http://labs.frickle.com/nginx_ngx_cache_purge/pcre-8.36 ftp

Nginx反向代理功能

Nginx反向代理: 以入口点的方式接受来自客户端的请求,但是本身不存在任何数据,而是交由后端服务器进行处理后,再返回里客户端 请求            客户端发起请求------>代理服务器------------------------------>后端服务器 返回            后端服务器------------->代理服务器------------------------------>客户端 在这个过程客户端是不主动向后端服务器请求的,后端服务器也不直接向客户端返

nginx 反向代理实现负载均衡*配置实战

(接理论篇) 查看lb01的配置文件如下: cat /usr/local/nginx/conf/nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream www_server_pools { #默认调度算

Nginx反向代理以及负载均衡配置

前提:最近在研究nginx的用法,在windows上小试了一下,由于windows下不支持nginx缓存配置,所以本文主要是讲nginx,以及反向代理与负载均衡. [一.为什么要使用nginx] 要回答为什么要使用nginx,那就先说说nginx能做些什么. 首先,nginx能做反向代理,那么什么是反向代理呢,举个栗子,我想在本地使用 www.mickey.com 的域名去访问 www.taobao.com.那么这个时候我们就可以通过nginx去实现. 再者,nginx能实现负载均衡,什么是负载

Nginx反向代理2--配置文件配置

2.1Nginx的反向代理 什么是正向代理? 1.2   使用nginx实现反向代理 Nginx只做请求的转发,后台有多个http服务器提供服务,nginx的功能就是把请求转发给后面的服务器,决定把请求转发给谁. 1.2.1   安装tomcat 在一个虚拟机上创建两个tomcat实例,模拟多个服务器. 1.2.2   需求 通过访问不同的域名访问运行在不同端口的tomcat 8080.itheima.com   访问运行8080端口的tomcat 8081.itheima.com   访问运行

Nginx反向代理实现负载均衡配置图解

[导读] 负载均衡配置是超大型机器需要考虑的一些问题,同时也是数据安全的一种做法,下面我来介绍在nginx中反向代理 负载均衡配置图解,大家可参考本文章来操作. 首先简单的介绍下nginx作为反向代理实现负载均衡.反向负载均衡配置是超大型机器需要考虑的一些问题,同时也是数据安全的一种做法,下面我来介绍在nginx中反向代理 负载均衡配置图解,大家可参考本文章来操作. 首先简单的介绍下nginx作为反向代理实现负载均衡. 反向代理方式是指以反向代理服务器来接受互联网上的连接请求,然后将请求转发给内

nginx 反向代理http和https配置

nginx可以反向代理http,同样也可以代理https,只是需要ssl证书.这里推荐一个好用的证书: https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E 步骤非常详细. 安装nginx 参照: http://mrdeng.blog.51cto.com/3736360/1735313 编译的时候需要制定ssl模块: --with-http_ssl_module ,启用nginx对ssl的支持. 安装完成之后,配置反向代理的ngi

Nginx反向代理,负载均衡配置

主配置文件:nginx.conf # For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/ user www; worker_processes 2; error_log /var/log/nginx/error.lo

nginx反向代理与负载均衡配置

https://www.nginx.com/resources/admin-guide/reverse-proxy/ https://www.nginx.com/resources/admin-guide/load-balancer/