前言
一、Nginx反向代理
二、Nginx负载均衡
三、Nginx页面缓存
四、LNMP
yum安装lnmp
五、Nginx读写分离
六、Nginx限速设置
七、Nginx生产中配置实例
八、
前言
在上篇博文中我们主要学习了nginx的安装,nginx配置、优化,nginx作为web服务器的操作讲解在这一篇博客中我们主要讲解, nginx的反向代理、负载均衡、缓存、URL重写以及读写分离详解。
一、Nginx之反向代理
1、正向代理与反向代理
(1).正向代理的概念
正向代理:是一个位于客户端和原始服务器(origin
server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。代理的是客户端,客户端必须要进行一些特别的设置才能使用正向代理。
(2).反向代理的概念
反向代理正好相反,代理的是服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。
从安全性来讲:
正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。
2.nginx 代理模块
这个模块可以转发请求到其他的服务器。HTTP/1.0无法使用keepalive(后端服务器将为每个请求创建并且删除连接)。nginx为浏览器发送HTTP/1.1并为后端服务器发送HTTP/1.0,这样浏览器就可以为浏览器处理keepalive。
如下例:
nginx作为反向代理服务器时工作特性:
接收客户端请求时,缓存在本地接收全部请求后再发往后端服务器;
接收后端服务器响应时,边接收边发送给客户端;而squid代理2个阶段都是边接收别发送
1.proxy_pass uri
用来定义协议内容:路径映射和uri
格式:
Syntax:proxy_pass URL;
Default: —
Context:location, if in location, limit_except
Nginx通过proxy模块实现反向代理功能。在作为web反向代理服务器时,nginx负责接收客户请求,并能够根据URI、客户端参数或其它的处理逻辑将用户请求调度至上游服务器上(upstream server)。nginx在实现反向代理功能时的最重要指令为proxy_pass,它能够将location定义的某URI代理至指定的上游服务器(组)上。如下面的示例中,location的/uri将被替换为上游服务器上的/newuri。
1
2
3
4
5
|
location /bbs {
11 root /www/c .com/;
12 index index.html index.htm;
13 proxy_pass
14 }
|
注意:这里http://192.168.100.179/ 这个“/”一定要带,不带的访问的是http://192.168.100.179/bbs/,而不是把“/bbs”映射成“/”

不过,这种处理机制中有两个例外:
一个是如果location的URI是通过模式匹配定义的,其URI将直接被传递至上游服务器,而不能为其指定转换的另一个URI。例如下面示例中的/forum将被代理为http://www.magedu.com/forum。
1
2
3
|
location ~ ^ /bbs {
proxy_pass
}
|
第二个例外是,如果在loation中使用的URL重定向,那么nginx将使用重定向后的URI处理请求,而不再考虑上游服务器上定义的URI。如下面所示的例子中,传送给上游服务器的URI为
/index.php?page=<match>,而不是/index。
1
2
3
4
|
location / {
rewrite /(.*)$ /index .php?page=$1 break ;
proxy_pass http: //localhost :8080 /index ;
}
|
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 [default|off|redirect|replacement]:
当上游服务器返回的响应是重定向或刷新请求时,proxy_redirect会重写设定http首部的location或refresh;
proxy_send_timeout:在连接断开之前两次发送至upstream server的写操作的最大间隔时长;
proxy_read_timeout:在连接断开之前两次从接收upstream server接收读操作的最大间隔时长;
proxy_pass_header:发送给客户端的报文中不隐藏的首部;
porxy_pass_request_body:是否将http请求报文包体部分发往上游服务器
porxy_pass_request_header:是否将Http首部发往上游服务器
如下面的一个示例:
1
2
3
4
5
6
7
8
9
|
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 30;
proxy_send_timeout 15;
proxy_read_timeout 15;
|
2.proxy_set_header
Syntax:proxy_set_header field(自定义变量名) value;
Default:proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
Context:http, server, location
3.proxy_http_version #指定版本可以使代理服务和后端服务是否使用长连接
Syntax: proxy_http_version 1.0 | 1.1;
Default:proxy_http_version 1.0;
Context:http, server, location
二、Nginx之负载均衡
upstream #定义服务器组,可以被proxy_pass,fastcgi_pass,uwsgi_pass调用
使用注意
1)只能用于http上下文
2)各server只能直接使用IP或域名,不需要协议
3)默认为加权轮询
使用方法:
1)先在主配置文件的http段定义upstream:
1
2
3
4
|
42 upstream webservers(自定义的组名字) {
43 server 192.168.100.179 weight=2;
44 server 192.168.100.175;
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
|