首页 > 代码库 > 马哥学习笔记二十八——nginx反向代理,负载均衡,缓存,URL重写及读写分离

马哥学习笔记二十八——nginx反向代理,负载均衡,缓存,URL重写及读写分离

Nginx反向代理

  Nginx通过proxy模块实现反向代理功能。在作为web反向代理服务器时,nginx负责接收客户请求,并能够根据URI、客户端参数或其它的处理逻辑将用户请求调度至上游服务器上(upstream server)。nginx在实现反向代理功能时的最重要指令为proxy_pass,它能够将location定义的某URI代理至指定的上游服务器(组)上。如下面的示例中,location的/uri将被替换为上游服务器上的/newuri。

  location /uri {   

    proxy_pass http://www.magedu.com:8080/newuri;  

  }  

  不过,这种处理机制中有两个例外。一个是如果location的URI是通过模式匹配定义的,其URI将直接被传递至上游服务器,而不能为其指定转换的另一个URI。例如下面示例中的/forum将被代理为http://www.magedu.com/forum。

  location ~ ^/bbs {   

    proxy_pass http://www.magedu.com;  

  }

  第二个例外是,如果在loation中使用的URL重定向,那么nginx将使用重定向后的URI处理请求,而不再考虑上游服务器上定义的URI。如下面所示的例子中,传送给上游服务器的URI为/index.php?page=<match>,而不是/index。

  location / {   

    rewrite /(.*)$ /index.php?page=$1 break;   

    proxy_pass http://localhost:8080/index;  

  }

proxy模块的指令

proxy模块的可用配置指令非常多,它们分别用于定义proxy模块工作时的诸多属性,如连接超时时长、代理时使用http协议版本等。下面对常用的指令做一个简单说明。

  proxy_connect_timeout:nginx将一个请求发送至upstream server之前等待的最大时长;

  proxy_cookie_domain:将upstream server通过Set-Cookie首部设定的domain属性修改为指定的值,其值可以为一个字符串、正则表达式的模式或一个引用的变量;

  proxy_cookie_path: 将upstream server通过Set-Cookie首部设定的path属性修改为指定的值,其值可以为一个字符串、正则表达式的模式或一个引用的变量;

  proxy_hide_header:设定发送给客户端的报文中需要隐藏的首部;

  proxy_pass:指定将请求代理至upstream server的URL路径;

  proxy_set_header:将发送至upsream server的报文的某首部进行重写;

  proxy_redirect:重写location并刷新从upstream server收到的报文的首部;

  proxy_send_timeout:在连接断开之前两次发送至upstream server的写操作的最大间隔时长;

  proxy_read_timeout:在连接断开之前两次从接收upstream server接收读操作的最大间隔时长;

upstream模块的负载均衡算法主要有三种:

  轮调(round-robin)

  ip哈希(ip_hash)

  最少连接(least_conn)