一、Rewrite功能配置
Rewrite
是
Nginx
服务器提供的一个重要基本功能,是
Web
服务器产品中
几乎必备的功能。主要的作用是用来实现
URL
的重写。
www.jd.com
注
意
:Nginx
服务器的
Rewrite
功能的实现依赖于
PCRE
的支持,因此在编译
安装
Nginx
服务器之前,需要安装
PCRE
库。
Nginx
使用的是
ngx_http_rewrite_module
模块来解析和处理
Rewrite
功能的相关配置。
Rewrite
的相关命令
set
指令
if
指令
break
指令
return
指令
rewrite
指令
rewrite_log
指令
Rewrite
的应用场景
域名跳转
域名镜像
独立域名
目录自动添加
"/"
合并目录
防盗链的实现
1.1Rewrite的相关指令
-
set指令
该指令用来设置一个新的变量。
variable:
变量的名称,该变量名称要用
"$"
作为变量的第一个字符,且不
要与
Nginx
服务器预设的全局变量同名。
value:
变量的值,可以是字符串、其他变量或者变量的组合等。
2.Rewrite常用全局变量
3.if指
该指令用来支持条件判断,并根据条件判断结果选择不同的 Nginx 配
置。
condition 为判定条件,可以支持以下写法:
1. 变量名。如果变量名对应的值为空或者是 0 , if 都判断为 false, 其他条
件为 true 。
if ($param){
}
2. 使用 "=" 和 "!=" 比较变量和字符串是否相等,满足条件为 true ,不满
足为 false
if ($request_method = POST){
return 405;
}
注意:此处和 Java 不太一样的地方是字符串不需要添加引号。
3. 使用正则表达式对变量进行匹配,匹配成功返回 true ,否则返回
false 。变量与正则表达式之间使用 "~","~*","!~","!~*" 来连接。
"~" 代表匹配正则表达式过程中区分大小写,
"~*" 代表匹配正则表达式过程中不区分大小写
"!~" 和 "!~*" 刚好和上面取相反值,如果匹配上返回 false, 匹配不上返
回 true
if ($http_user_agent ~ MSIE){
#$http_user_agent 的值中是否包含 MSIE 字符串,如果包含返回
true
}
注意:正则表达式字符串一般不需要加引号,但是如果字符串中包
含 "}" 或者是 ";" 等字符时,就需要把引号加上。
4. 判断请求的文件是否存在使用 "-f" 和 "!-f",
当使用 "-f" 时,如果请求的文件存在返回 true ,不存在返回 false 。
当使用 "!f" 时,如果请求文件不存在,但该文件所在目录存在返回
true, 文件和目录都不存在返回 false, 如果文件存在返回 false
if (-f $request_filename){
# 判断请求的文件是否存在
}
if (!-f $request_filename){
# 判断请求的文件是否不存在
}
5. 判断请求的目录是否存在使用 "-d" 和 "!-d",
当使用 "-d" 时,如果请求的目录存在, if 返回 true ,如果目录不存在
则返回 false
当使用 "!-d" 时,如果请求的目录不存在但该目录的上级目录存在则返
回 true ,该目录和它上级目录都不存在则返回 false, 如果请求目录存
在也返回 false.
6. 判断请求的目录或者文件是否存在使用 "-e" 和 "!-e"
当使用 "-e", 如果请求的目录或者文件存在时, if 返回 true, 否则返回
false.
当使用 "!-e", 如果请求的文件和文件所在路径上的目录都不存在返回
true, 否则返回 false
7. 判断请求的文件是否可执行使用 "-x" 和 "!-x"
当使用 "-x", 如果请求的文件可执行, if 返回 true, 否则返回 false
当使用 "!-x", 如果请求文件不可执行,返回 true, 否则返回 false
4.break指令
该指令用于中断当前相同作用域中的其他 Nginx 配置。与该指令处于同
一作用域的 Nginx 配置中,位于它前面的指令配置生效,位于后面的指
令配置无效。
例子 :
location /{
if ($param){
set $id $1;
break;
limit_rate 10k;
}
}
5.return指令
该指令用于完成对请求的处理,直接向客户端返回响应状态代码。在
return 后的所有 Nginx 配置都是无效的。
code: 为返回给客户端的 HTTP 状态代理。可以返回的状态代码为 0~999
的任意 HTTP 状态代理
text: 为返回给客户端的响应体内容,支持变量的使用
URL: 为返回给客户端的 URL 地址
location /testreturn {
return 200 success;
}
location /testreturn {
return https://www.baidu.com; // 302
重定向到百度
}
location /testreturn {
return 302 https://www.baidu.com;
}
location /testreturn {
return 302 www.baidu.com;//
不允许这么写
}
6.rewrite指令
该指令通过正则表达式的使用来改变
URI
。可以同时存在一个或者多个指
令,按照顺序依次对
URL
进行匹配和处理。
regex:
用来匹配
URI
的正则表达式
replacement:
匹配成功后,用于替换
URI
中被截取内容的字符串。如果
该字符串是以
"http://"
或者
"https://"
开头的,则不会继续向下对
URI
进行
其他处理,而是直接返回重写后的
URI
给客户端。
location rewrite {
rewrite ^/rewrite/url\w*$ https://www.baidu.com;
rewrite ^/rewrite/(test)\w*$ /$1;
rewrite ^/rewrite/(demo)\w*$ /$1;
}
location /test{
default_type text/plain;
return 200 test_success;
}
location /demo{
default_type text/plain;
return 200 demo_success;
}
flag:
用来设置
rewrite
对
URI
的处理行为,可选值有如下:
last:
终止继续在本
location
块中处理接收到的
URI
,并将此处重写的
URI
作为一个新的
URI
,使用各
location
块进行处理。该标志将重写后
的
URI
重写在
server
块中执行,为重写后的
URI
提供了转入到其他
location
块的机会。
location rewrite {
rewrite ^/rewrite/(test)\w*$ /$1 last;
rewrite ^/rewrite/(demo)\w*$ /$1 last;
}
location /test{
default_type text/plain;
return 200 test_success;
}
location /demo{
default_type text/plain;
return 200 demo_success;
}
访问
http://192.168.200.133:8081/rewrite/testabc
,
能正确访问
break
:将此处重写的
URI
作为一个新的
URI,
在本块中继续进行处理。
该标志将重写后的地址在当前的
location
块中执行,不会将新的
URI
转向其他的
location
块。
location rewrite {
#/test /usr/local/nginx/html/test/index.html
rewrite ^/rewrite/(test)\w*$ /$1 break;
rewrite ^/rewrite/(demo)\w*$ /$1 break;
}
location /test{
default_type text/plain;
return 200 test_success;
}
location /demo{
default_type text/plain;
return 200 demo_success;
}
访问
http://192.168.200.133:8081/rewrite/demoabc
,
页面报
404
错误
redirect
:将重写后的
URI
返回给客户端,状态码为
302
,指明是临时
重定向
URI,
主要用在
replacement
变量不是以
"http://"
或
者
"https://"
开头的情况。
location rewrite {
rewrite ^/rewrite/(test)\w*$ /$1 redirect;
rewrite ^/rewrite/(demo)\w*$ /$1 redirect;
}
location /test{
default_type text/plain;
return 200 test_success;
}
location /demo{
default_type text/plain;
return 200 demo_success;
}
访问
http://192.168.200.133:8081/rewrite/testabc
请求会被临时
重定向,浏览器地址也会发生改变
permanent
:将重写后的
URI
返回给客户端,状态码为
301
,指明是
永久重定向
URI,
主要用在
replacement
变量不是以
"http://"
或
者
"https://"
开头的情况。
location rewrite {
rewrite ^/rewrite/(test)\w*$ /$1 permanent;
rewrite ^/rewrite/(demo)\w*$ /$1 permanent;
}
location /test{
default_type text/plain;
return 200 test_success;
}
location /demo{
default_type text/plain;
return 200 demo_success;
}
访问
http://192.168.200.133:8081/rewrite/testabc
请求会被永久
重定向,浏览器地址也会发生改变
7.rewrite_log指令
该指令配置是否开启
URL
重写日志的输出功能。
开启后,
URL
重写的相关日志将以
notice
级别输出到
error_log
指令配置
的日志文件汇总。
rewrite_log on;
error_log logs/error.log notice;
1.2Rewrite的案例
-
域名跳转
》问题分析
先来看一个效果,如果我们想访问京东网站,大家都知道我们可以输入
www.jd.com
,
但是同样的我们也可以输入
www.360buy.com
同样也都能
访问到京东网站。这个其实是因为京东刚开始的时候域名就是
www.360
buy.com
,后面由于各种原因把自己的域名换成了
www.jd.com
,
虽然说
域名变量,但是对于以前只记住了
www.360buy.com
的用户来说,我们
如何把这部分用户也迁移到我们新域名的访问上来,针对于这个问题,
我们就可以使用
Nginx
中
Rewrite
的域名跳转来解决。
》环境准备
准备三个域名:
vim /etc/hosts
127.0.0.1 www.itcast.cn
127.0.0.1 www.itheima.cn
127.0.0.1 www.itheima.com
通过
Nginx
实现访问
www.itcast.cn
server {
listen 80;
server_name www.itcast.cn;
location /{
default_type text/html;
return 200 '<h1>welcome to itcast</h1>';
}
}
》通过
Rewrite
完成将
www.ithema.com
和
www.itheima.cn
的请求跳转
到
www.itcast.com
server {
listen 80;
server_name www.itheima.com www.itheima.cn;
rewrite ^/ http://www.itcast.cn;
}
问题描述
:
如何在域名跳转的过程中携带请求的
URI
?
修改配置信息
server {
listen 80;
server_name www.itheima.com www.itheima.cn;
rewrite ^(.*) http://www.itcast.cn$1
;
}
2.域名镜像
镜像网站指定是将一个完全相同的网站分别放置到几台服务器上,并分
别使用独立的
URL
进行访问。其中一台服务器上的网站叫主站,其他的
为镜像网站。镜像网站和主站没有太大的区别,可以把镜像网站理解为
主站的一个备份节点。可以通过镜像网站提供网站在不同地区的响应速
度。镜像网站可以平衡网站的流量负载、可以解决网络宽带限制、封锁
等。
而我们所说的域名镜像和网站镜像比较类似,上述案例中,将
www.ithei
ma.com
和
www.itheima.cn
都能跳转到
www.itcast.cn
,那么
www.itcas
t.cn
我们就可以把它起名叫主域名,其他两个就是我们所说的镜像域
名,当然如果我们不想把整个网站做镜像,只想为其中某一个子目录下
的资源做镜像,我们可以在
location
块中配置
rewrite
功能,比如
:
server {
listen 80;
server_name www.itheima.cn www.itheima.com;
location /user {
rewrite ^/user(.*)$ http://www.itcast.cn$1;
}
location /emp{
default_type text/html;
return 200 '<h1>emp_success</h1>';
}
}
3.独立域名
一个完整的项目包含多个模块,比如购物网站有商品搜索模块、商品详
情模块和购物车模块等,那么我们如何为每一个模块设置独立的域名。
需求:
http://search.itcast.com:81
访问商品搜索模块
http://item.itcast.com:82
访问商品详情模块
http://cart.itcast.com:83
访问商品购物车模块
server{
listen 81;
server_name search.itcast.com;
rewrite ^(.*) http://www.itcast.cn/search$1;
}
server{
listen 82;
server_name item.itcast.com;
rewrite ^(.*) http://www.itcast.cn/item$1;
}
server{
listen 83;
server_name cart.itcast.com;
rewrite ^(.*) http://www.itcast.cn/cart$1;
}
4.目录自动添加"/"
问题描述
通过一个例子来演示下问题
:
server {
listen 8082;
server_name localhost;
location /heima {
root html;
index index.html;
}
}
通过
http://192.168.200.133:8082/heima
和通过
http://192.168.200.133:8082/heima/
访问的区别?
如果不加斜杠,
Nginx
服务器内部会自动做一个
301
的重定向,重定向的
地址会有一个指令叫
server_name_in_redirect on|offff;
来决定重定向的
地址:
如果该指令为
on
重定向的地址为
: http://server_name:8082/
目录名
/;
http://localhost:8082/heima/
如果该指令为
off
重定向的地址为
: http://
原
URL
中的域名
:8082/
目录名
/;
http://192.168.200.133:8082/heima/
所以就拿刚才的地址来说,
http://192.168.200.133:8082/heima
如果不
加斜杠,那么按照上述规则,如果指令
server_name_in_redirect
为
on
,
则
301
重定向地址变为
http://localhost:8082/heima/,
如果为
offff
,则
301
重定向地址变为
http://192.168.200.133:8082/heima/
。后面这个是正
常的,前面地址就有问题。
注意
server_name_in_redirect
指令在
Nginx
的
0.8.48
版本之前默认都是
on
,之后改成了
offff,
所以现在我们这个版本不需要考虑这个问题,但是
如果是
0.8.48
以前的版本并且
server_name_in_redirect
设置为
on
,我们
如何通过
rewrite
来解决这个问题?
解决方案
我们可以使用
rewrite
功能为末尾没有斜杠的
URL
自动添加一个斜杠
server {
listen 80;
server_name localhost;
server_name_in_redirect on;
location /heima {
if (-d $request_filename){
rewrite ^/(.*)([^/])$ http://$host/$1$2/
permanent;
}
}
}
5.合并目录
搜索引擎优化
(SEO)
是一种利用搜索引擎的搜索规则来提高目的网站在有
关搜索引擎内排名的方式。我们在创建自己的站点时,可以通过很多中
方式来有效的提供搜索引擎优化的程度。其中有一项就包含
URL
的目录
层级一般不要超过三层,否则的话不利于搜索引擎的搜索也给客户端的
输入带来了负担,但是将所有的文件放在一个目录下又会导致文件资源
管理混乱并且访问文件的速度也会随着文件增多而慢下来,这两个问题
是相互矛盾的,那么使用
rewrite
如何解决上述问题
?
举例,网站中有一个资源文件的访问路径时
/server/11/22/33/44/20.html,
也就是说
20.html
存在于第
5
级目录下,如
果想要访问该资源文件,客户端的
URL
地址就要写成
http://192.168.200.133/server/11/22/33/44/20.html
,
server {
listen 8083;
server_name localhost;
location /server{
root html;
}
}
但是这个是非常不利于
SEO
搜索引擎优化的,同时客户端也不好记
.
使用
rewrite
我们可以进行如下配置
:
server {
listen 8083;
server_name localhost;
location /server{
rewrite ^/server-([0-9]+)-([0-9]+)-([0-9]+)-
([0-9]+)\.html$ /server/$1/$2/$3/$4/$5.html last;
}
}
这样的花,客户端只需要输入
http://www.web.name/server-11-22-33-
44-20.html
就可以访问到
20.html
页面了。这里也充分利用了
rewrite
指
令支持正则表达式的特性。
6.防盗链
防盗链之前我们已经介绍过了相关的知识,在
rewrite
中的防盗链和之前
将的原理其实都是一样的,只不过通过
rewrite
可以将防盗链的功能进行
完善下,当出现防盗链的情况,我们可以使用
rewrite
将请求转发到自定
义的一张图片和页面,给用户比较好的提示信息。下面我们就通过根据
文件类型实现防盗链的一个配置实例
:
location /images {
root html;
valid_referers none blocked www.baidu.com;
if ($invalid_referer){
#return 403;
rewrite ^/ /images/forbidden.png break;
}
}
二、Nginx反向代理
2.1Nginx反向代理概述
关于正向代理和反向代理,我们在前面的章节已经通过一张图给大家详
细的介绍过了,简而言之就是正向代理代理的对象是客户端,反向代理
代理的是服务端,这是两者之间最大的区别。
Nginx
即可以实现正向代理,也可以实现反向代理。
我们先来通过一个小案例演示下
Nginx
正向代理的简单应用。
先提需求:
(1)
服务端的设置:
http {
log_format main 'client send
request=>clientIp=$remote_addr serverIp=>$host';
server{
listen 80;
server_name localhost;
access_log logs/access.log main;
location {
root html;
index index.html index.htm;
}
}
}
(2)
使用客户端访问服务端,打开日志查看结果
(3)
代理服务器设置:
server {
listen 82;
resolver 8.8.8.8;
location /{
proxy_pass http://$host$request_uri;
}
}
(4)
查看代理服务器的
IP(192.168.200.146)
和
Nginx
配置监听的端口
(82)
(5)
在客户端配置代理服务器
(6)
设置完成后,再次通过浏览器访问服务端
通过对比,上下两次的日志记录,会发现虽然我们是客户端访问服务
端,但是如何使用了代理,那么服务端能看到的只是代理发送过去的请
求,这样的化,就使用
Nginx
实现了正向代理的设置。
但是
Nginx
正向代理,在实际的应用中不是特别多,所以我们简单了解
下,接下来我们继续学习
Nginx
的反向代理,这是
Nginx
比较重要的一个
功能。
2.2Nginx反向代理的配置语法
Nginx
反向代理模块的指令是由
ngx_http_proxy_module
模块进行解
析,该模块在安装
Nginx
的时候已经自己加装到
Nginx
中了,接下来我们
把反向代理中的常用指令一一介绍下:
proxy_pass
proxy_set_header
proxy_redirect
proxy_pass
该指令用来设置被代理服务器地址,可以是主机名称、
IP
地址加端口号
形式。
URL:
为要设置的被代理服务器地址,包含传输协议
(
http
,
https://
)
、
主机名称或
IP
地址加端口号、
URI
等要素。
举例:
proxy_pass http://www.baidu.com;
location /server{}
proxy_pass http://192.168.200.146;
http://192.168.200.146/server/index.html
proxy_pass http://192.168.200.146/;
http://192.168.200.146/index.html
大家在编写
proxy_pass
的时候,后面的值要不要加
"/"?
接下来通过例子来说明刚才我们提到的问题:
server {
listen 80;
server_name localhost;
location /{
#proxy_pass http://192.168.200.146;
proxy_pass http://192.168.200.146/;
}
}
当客户端访问
http://localhost/index.html,
效果是一样的
server{
listen 80;
server_name localhost;
location /server{
#proxy_pass http://192.168.200.146;
proxy_pass http://192.168.200.146/;
}
}
当客户端访问
http://localhost/server/index.html
这个时候,第一个
proxy_pass
就变成了
http://localhost/server/index.html
第二个
proxy_pass
就变成了
http://localhost/index.html
效果
就不一样了。
proxy_set_header
该指令可以更改
Nginx
服务器接收到的客户端请求的请求头信息,然后
将新的请求头发送给代理的服务器
需要注意的是,如果想要看到结果,必须在被代理的服务器上来获取添
加的头信息。
被代理服务器:
[192.168.200.146]
server {
listen 8080;
server_name localhost;
default_type text/plain;
return 200 $http_username;
}
代理服务器
: [192.168.200.133]
server {
listen 8080;
server_name localhost;
location /server {
proxy_pass
http://192.168.200.146:8080/;
proxy_set_header username TOM;
}
}
访问测试
proxy_redirect
该指令是用来重置头信息中的
"Location"
和
"Refresh"
的值。
》为什么要用该指令
?
服务端
[192.168.200.146]
server {
listen 8081;
server_name localhost;
if (!-f $request_filename){
return 302 http://192.168.200.146;
}
}
代理服务端
[192.168.200.133]
server {
listen 8081;
server_name localhost;
location / {
proxy_pass http://192.168.200.146:8081/;
proxy_redirect http://192.168.200.146
http://192.168.200.133;
}
}
》该指令的几组选项
proxy_redirect redirect replacement;
redirect:
目标
,Location
的值
replacement:
要替换的值
proxy_redirect default;
default;
将
location
块的
uri
变量作为
replacement,
将
proxy_pass
变量作为
redirect
进行替换
关闭
proxy_redirect
的功能
2.3Nginx反向代理实战
服务器1,2,3存在两种情况
第一种情况
:
三台服务器的内容不一样。
第二种情况
:
三台服务器的内容是一样。
1.
如果服务器
1
、服务器
2
和服务器
3
的内容不一样,那我们可以根据用
户请求来分发到不同的服务器。
代理服务器
server {
listen 8082;
server_name localhost;
location /server1 {
proxy_pass
http://192.168.200.146:9001/;
}
location /server2 {
proxy_pass
http://192.168.200.146:9002/;
}
location /server3 {
proxy_pass
http://192.168.200.146:9003/;
}
}
服务端
server1
server {
listen 9001;
server_name localhost;
default_type text/html;
return 200 '<h1>192.168.200.146:9001</h1>'
}
server2
server {
listen 9002;
server_name localhost;
default_type text/html;
return 200 '<h1>192.168.200.146:9002</h1>'
}
server3
server {
listen 9003;
server_name localhost;
default_type text/html;
return 200 '<h1>192.168.200.146:9003</h1>'
}
2.
如果服务器
1
、服务器
2
和服务器
3
的内容是一样的,该如何处理
?
2.4Nginx的安全控制
关于
web
服务器的安全是比较大的一个话题,里面所涉及的内容很多,
Nginx
反向代理是如何来提升
web
服务器的安全呢?
安全隔离
什么是安全隔离
?
通过代理分开了客户端到应用程序服务器端的连接,实现了安全措施。
在反向代理之前设置防火墙,仅留一个入口供代理服务器访问。
如何使用
SSL
对流量进行加密
翻译成大家能熟悉的说法就是将我们常用的
http
请求转变成
https
请求,
那么这两个之间的区别简单的来说两个都是
HTTP
协议,只不过
https
是
身披
SSL
外壳的
http.
HTTPS
是一种通过计算机网络进行安全通信的传输协议。它经由
HTTP
进
行通信,利用
SSL/TLS
建立全通信,加密数据包,确保数据的安全性。
SSL(Secure Sockets Layer)
安全套接层
TLS(Transport Layer Security)
传输层安全
上述这两个是为网络通信提供安全及数据完整性的一种安全协议,
TLS
和
SSL
在传输层和应用层对网络连接进行加密。
总结来说为什么要使用
https:
http
协议是明文传输数据,存在安全问题,而
https
是加密传输,相当于
http+ssl
,并且可以防止流量劫持。
Nginx
要想使用
SSL
,需要满足一个条件即需要添加一个模块
--
with
-
http_ssl_module
,
而该模块在编译的过程中又需要
OpenSSL
的支持,
这个我们之前已经准备好了。
nginx
添加
SSL
的支持
(1)完成
--
with
-
http_ssl_module
模块的增量添加
》将原有
/usr/local/nginx/sbin/nginx
进行备份
》拷贝
nginx
之前的配置信息
》在
nginx
的安装源码进行配置指定对应模块
./configure --
with-http_ssl_module
》通过
make
模板进行编译
》将
objs
下面的
nginx
移动到
/usr/local/nginx/sbin
下
》在源码目录下执行
make upgrade
进行升级,这个可以实现不停机添
加新模块的功能
Nginx
的
SSL
相关指令
因为刚才我们介绍过该模块的指令都是通过
ngx_http_ssl_module
模块
来解析的。
》
ssl:
该指令用来在指定的服务器开启
HTTPS,
可以使用
listen 443 ssl,
后
面这种方式更通用些。
server{
listen 443 ssl;
}
》
ssl_certifificate:
为当前这个虚拟主机指定一个带有
PEM
格式证书的证
书。
》
ssl_certifificate_key:
该指令用来指定
PEM secret key
文件的路径
》
ssl_session_cache:
该指令用来配置用于
SSL
会话的缓存
off:
禁用会话缓存,客户端不得重复使用会话
none:
禁止使用会话缓存,客户端可以重复使用,但是并没有在缓存中存
储会话参数
builtin:
内置
OpenSSL
缓存,仅在一个工作进程中使用。
shared:
所有工作进程之间共享缓存,缓存的相关信息用
name
和
size
来
指定
》
ssl_session_timeout
:开启
SSL
会话功能后,设置客户端能够反复使
用储存在缓存中的会话参数时间。
》
ssl_ciphers:
指出允许的密码,密码指定为
OpenSSL
支持的格式
可以使用
openssl ciphers
查看
openssl
支持的格式。
》
ssl_prefer_server_ciphers
:该指令指定是否服务器密码优先客户端
密码
生成证书
方式一:使用阿里云
/
腾讯云等第三方服务进行购买。
方式二
:
使用
openssl
生成证书
先要确认当前系统是否有安装
openssl
安装下面的命令进行生成
mkdir /root/cert
cd /root/cert
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey
server.key -out server.crt
开启
SSL
实例
server {
listen 443 ssl;
server_name localhost;
ssl_certificate server.cert;
ssl_certificate_key server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
(4)验证
反向代理系统调优
反向代理值
Buffffer
和
Cache
Buffffer
翻译过来是
"
缓冲
"
,
Cache
翻译过来是
"
缓存
"
。
总结下:
相同点
:
两种方式都是用来提供
IO
吞吐效率,都是用来提升
Nginx
代理的性能。
不同点
:
缓冲主要用来解决不同设备之间数据传递速度不一致导致的性能低的问
题,缓冲中的数据一旦此次操作完成后,就可以删除。
缓存主要是备份,将被代理服务器的数据缓存一份到代理服务器,这样的
话,客户端再次获取相同数据的时候,就只需要从代理服务器上获取,效
率较高,缓存中的数据可以重复使用,只有满足特定条件才会删除
.
(1)
Proxy Buffer
相关指令
》
proxy_buffering :
该指令用来开启或者关闭代理服务器的缓冲区;
》
proxy_buffers:
该指令用来指定单个连接从代理服务器读取响应的缓
存区的个数和大小。
number:
缓冲区的个数
size:
每个缓冲区的大小,缓冲区的总大小就是
number*size
》
proxy_buffer_size:
该指令用来设置从被代理服务器获取的第一部分响
应数据的大小。保持与
proxy_buffffers
中的
size
一致即可,当然也可以更
小。
》
proxy_busy_buffers_size
:该指令用来限制同时处于
BUSY
状态的缓
冲总大小。
》
proxy_temp_path:
当缓冲区存满后,仍未被
Nginx
服务器完全接受,
响应数据就会被临时存放在磁盘文件上,该指令设置文件路径
注意
path
最多设置三层。
》
proxy_temp_file_write_size
:该指令用来设置磁盘上缓冲文件的大
小。
通用网站的配置
proxy_buffering on;
proxy_buffer_size 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
根据项目的具体内容进行相应的调节。