nginx正向代理与反向代理详解
正向代理
就是假设有一个内网
内网有两台机器,这两台机器只有a可以上网
b不能上网,但是a和b通过网络相连接
这时如果b想访问外网,就可以通过a来正向代理访问外网
正向代理就是在内网中模拟目标服务器,把内网中其它机器的请求
转发给外网中的真正的目标服务器
所以正向代理是接受内网其它机器的请求的
反向代理则是反过来
也是一个内网,有几台机器,只有其中一台与外网连接
但是反向代理接受的不是内网机器的访问请求
反向代理接受的是外网过来的访问请求
然后把请求转发到内网中的其它机器上去
外网发出请求的用户并不知道反向代理的服务器把请求转发给了谁
要在一台机器上设置正向代理的功能
如图,编辑一个nginx配置文件
上图就是配置文件内容
如果配置一台服务器作为正向代理服务器
那么这个虚拟主机配置文件就必须是默认虚拟主机
因为所有访问这台机器的网络请求应该先访问这个虚拟主机才对
所以这里要设置default_server
然后还要把原来的默认虚拟主机配置文件名称修改掉
如图,把default.conf配置文件的名称修改一下
这样就取消了原来的默认虚拟主机配置文件了
因为默认的默认虚拟主机配置文件就是default.conf
配置文件里面的resolver119.29.29.29
意思是配置一个dns地址
因为是做正向代理,接受了内网请求的域名后
要把请求发送给真正要访问的服务器
但是内网发送的域名是没有包含ip地址的
所以还要把域名发送给dns服务器解析ip地址
拿到ip地址后才能转发到要访问的服务器上去
所以这里需要配置一个dns地址
接受了内网域名后,就会把域名发送到这个dns上去解析
下面的location按照图中设置就可以了
这样正向代理服务器接受内网机器请求后
就会把域名发到配置的dns上解析,然后访问真正的服务器
再把真正服务器返回的内容发送给发出请求的内网机器
nginx反向代理
做一个反向代理的例子
如图建立一个测试的虚拟主机配置文件
监听8080端口,域名为www.test.com
根目录是/data/wwwroot/test.com
访问虚拟主机显示的首页文件是index.html
如图,创建虚拟主机的根目录/data/wwwroot/test.com
然后使用echo"test.com_8080">!$/index.html
创建一个内容为test.com_8080的首页文件
这个文件在/data/wwwroot/test.com目录里面
如图,新建一个反向代理的虚拟主机配置文件
监听80端口,域名为www.test.com
下面的location/里面就是反向代理的配置
当访问这个虚拟主机的时候,就会把访问请求发送给127.0.0.1:8080
如图,使用curl访问127.0.0.1:8080虚拟主机
成功返回了test.com_8080这说明这个虚拟主机能够被访问
如图,再创建一个虚拟主机配置文件
跟之前的test虚拟主机差不多
但是这个虚拟主机并没有设置域名
location设置返回的内容是8080default字符串
保存退出,重载nginx
还要把test虚拟主机的defaultserver设置取消掉
那么现在127.0.0.1:8080对应两个虚拟主机
一个是test虚拟主机,另外一个是8080default虚拟主机
这两个虚拟主机的ip端口都是一模一样的
它们的区别是test虚拟主机是有域名的
而8080default虚拟主机是没有域名的
现在已经设置了8080default为默认虚拟主机
所以如果只访问127.0.0.1:8080的话
访问的一定是8080default虚拟主机
如果想访问test虚拟主机,就需要加上test虚拟主机的域名
才能成功访问test虚拟主机
如图,可以看到访问curl127.0.0.1:8080/返回的结果是8080default
使用curl-x127.0.0.1:8080www.test.com
这里带上了域名,返回的就是test.com_8080
说明想访问test虚拟主机,ip端口还需要绑定域名才行
如图,curl访问127.0.0.1:80域名www.test.com
返回的是test.com_8080说明这个反向代理成功了
我们访问的是80端口,实际却返回了8080端口的虚拟主机的内容
如图,这里把反向代理虚拟主机里面的proxy_pass行下面的都注释掉
保存退出,重载nginx
如图,再使用curl访问127.0.0.1:80域名www.test.com
实际返回的却是8080default
而我们想访问的却是test虚拟主机
如图,proxy_set_headerHost$host;
这一行代码就是指定访问的域名
上面设置了127.0.0.1:8080
反向代理的时候就会指向这个ip端口
如果不设置host那就只会访问127.0.0.1:8080的虚拟主机
如果设置了host,那么就会指向跟指定的host绑定的127.0.0.1:8080
这里的$host是系统变量,实际的值就是当前的虚拟主机的server_name
也就是www.test.com,server_name是什么,host的值就是什么
这里设置了host就相当于curl-x127.0.0.1:8080www.test.com
如果这里不设置host那么就只会访问127.0.0.1:8080
这样就可以把域名跟ip端口进行绑定
如图,除了写ip端口之外,proxy_pass也可以直接写域名
这里写的是www.123.com:8080/
但是这样写的话,nginx并不知道这个域名指向哪里
所以还需要在系统里面绑定对应的ip
例如在/etc/hosts文件里面,写入对应的域名和ip进行绑定
这样nginx里面的proxy_pass的域名系统就会解析出一个Ip地址
然后再访问这个ip端口
下面的proxy_headerHost作用就是设置一个域名
这个域名会与上面的ip端口绑定访问
如果上面的ip端口写的不是ip而是域名
跟下面指定的域名是不冲突的,因为上面写的域名的作用是用来解析ip的
下面指定的域名才会跟上面解析出来的ip端口进行绑定访问
这个例子使用的是$host这是nginx全局变量
这个变量实际是对应了一个值的,就是当前虚拟主机server_name的值
但是一般来说,还是直接写ip端口方便一些
上面就是指定ip端口
下面指定跟ip端口绑定的host域名
nginx反向代理02
如图,proxy_pass指令后面可以跟url
有三种格式,传输协议+域名+uri(访问路径)
传输协议+ip端口+uri
传输协议+socket
这里unix,http,https都是传输协议的种类
域名+uri和ip端口+uri还有socket都是访问的路径
socket一般是某个程序专用的访问端口
访问某个socket就是访问某个特定的程序,所以不需要使用路径
如图,写proxy_pass的时候,不同的写法有不同的结果
比如location/aming/
如果访问的路径包含/aming/就会触发
这里的proxy_pass就会执行
但是location里面的proxy_pass不同的写法会导致实际访问的路径有差别
虽然因为访问的路径包含/aming/目录才执行proxy_pass
但是实际访问的路径不一定包含/aming/
这个例子是访问虚拟主机内的/aming/a.html文件
根据proxy_pass的不同写法实际上会访问到不同的路径去
如果ip端口后面没有接任何目录符号
就会访问/aming/a.html,这是我们想要的
如果ip端口后面接了根目录符号/
那么就会直接访问根目录里面的a.html文件,这显然不对
ip端口后面接/linux/那么就会访问/linux/里面的a.html文件
如果ip端口后面是/linux最后没有跟目录符号/
就会访问/linuxa.html
所以如果想正确访问/aming/a.html
有两种写法,一种是ip端口后面不要加任何目录符号/
第二种是完整的写成ip端口/aming/这样写
根据上面示例可以发现,ip端口后面不管是什么目录
实际访问路径就会变成直接把最终要访问的文件名称a.html
直接添加到ip端口后面的目录上去
所以ip端口后面不写任何目录符号的话,系统才会自己添加/aming/a.html这个目录路径
一旦有任何目录符号存在,就会直接把a.html放在这个目录符号后面
第二种情况是,ip端口+/linux
实际结果是访问/linuxa.html
这可能是因为linux后面没有跟上任何目录符号/
所以系统把linux认为是一个没有写完的文件名称
然后就直接把a.html这个文件名称跟linux粘贴在一起
这样就变成了要访问的文件是/linuxa.html的形式
所以不管写什么路径,后面一定要跟上目录符号/
反向代理03
如图,proxy_set_header是设置被代理的服务器可以接收到的header信息的
比如有三台电脑abc
a是我们用来访问的电脑,我们从a发出访问请求
b是反向代理服务器,b接收我们发出的访问请求
c是被反向代理的服务器,也就是我们真正要访问的服务器
b会把我们的访问请求转发给c
如果不设置proxy_set_header的话,b转发请求给c的时候就不会带上相应的header信息
如果设置了这个参数,在转发请求的时候就会带上对应的header信息
其中$remote_addr和$proxy_add_x_forwarded_for这两个变量是nginx的内置变量
$remote_addr变量里面保存的是b反向代理服务器本身的ip地址
$proxy_add_x_forwarded_for变量里面保存的是a客户端电脑的ip地址
如果不设置这个变量的话,c服务器实际上是不知道访问请求的真实来源地址的
而设置了这个变量,c服务器就可以知道这个访问请求是哪一个ip地址发过来的
如图,编辑www.test.com虚拟主机的配置文件
假设这个虚拟主机是我们要访问的c服务器
location里面设置了两个echo显示访问请求的来源地址,和真实来源地址
$remote_addr记录了反向代理服务器的地址
$proxy_add_x_forwarded_for记录了访问请求的真实来源地址,也就是客户端的地址
这样设置,访问这个虚拟主机的时候,就会显示这两个变量里面保存的值
保存退出,然后重载配置文件
如图,编辑反向代理服务器虚拟主机的配置文件
如图,可以看到location里面
proxy_set_headerX-Real-IP和proxy_set_headerX-Forwarded-For这两行是被注释掉的
先做个测试,保存退出重载配置文件
如图,使用curl测试从192.168.133.140:80发出访问请求
192.168.133.140这个ip实际就是客户端ip
因为访问请求就是从这个ip发出来的
但是可以看到,测试之后,实际显示的却是两个127.0.0.1的回环地址
并没有192.168.133.140这个ip
在这个测试里面,反向代理服务器和真实服务器都在本机上面
所以真实服务器c接收的访问请求来源ip就是本机的回环地址
反向代理服务b发送请求给真实服务器c走的就是127.0.0.1的内部回环地址
因为这两个服务器都在本机上,本机上的程序之间通讯基本都是走127.0.0.1回环地址的
所以c的$remote_addr的值就是127.0.0.1
因为反向代理服务器b没有设置$proxy_add_x_forwarded_for
所以真实服务器c的接收到的$proxy_add_x_forwarded_for变量值就是请求发送过来的ip
也就是127.0.0.1
$proxy_add_x_forwarded_for这个变量实际上是记录了从客户端开始
请求总共经过了哪些ip地址的一个变量值,多个ip地址之间使用逗号分隔
如果发送的访问请求没有设置$proxy_add_x_forwarded_for这个变量的话
那么接收方的这个变量的值就只是访问请求发送过来的上一个ip,也就是跟remote_addr相同
比如访问请求从a到b到c
如果b设置了$proxy_add_x_forwarded_for的话
那么这个变量的格式就是a_ip,b_ip
也就是记录了a的ip和b的ip
如果中间还经过更多的服务器的话,那么它们的ip也会被记录下来,使用逗号分隔
当然每一台代理服务器都需要设置$proxy_add_x_forwarded_for这个变量才行
不然下一台代理服务器的$proxy_add_x_forwarded_for这个变量将不会记录到之前经过的ip
只能够记录到上一台服务器的ip
所以在这个测试里面,因为b没有设置$proxy_add_x_forwarded_for
所以c服务的$proxy_add_x_forwarded_for变量的值等于$remote_addr的值
如图,第二次测试,编辑反向代理服务器b的配置文件
把location里面的X-Real-IP和X-Forwarded-For两行注释去掉
保存退出重载配置文件
如图,再次测试
可以看到返回的结果,第一行remote_addr的值是127.0.0.1
这是代理服务器b的ip
第二行$proxy_add_x_forwarded_for的值是两个ip
curl命令里面,访问请求是从192.168.133.140发出的
也就是说,客户端a的ip就是192.168.133.140
b的ip就是127.0.0.1
$proxy_add_x_forwarded_for记录的是到达c的访问请求经过了哪些ip
访问请求是从a到b再从b到c的
所以$proxy_add_x_forwarded_for变量记录了a的ip和b的ip
因为访问请求在到达c之前经过了这两个ip地址
所以以后做反向代理的时候,这几行变量都要设置
后面的真实服务器才能够获取到访问请求的真实ip地址
反向代理04
如图,redirect应用的场景不多,主要有三种写法
功能是修改被代理的服务器返回的location和refresh头域信息
第一种写法,redirect是返回的头域信息
replacement是要修改的信息
redirect会被修改为replacement
第二种写法是default就是默认设置的意思
第三种off意思就是关闭redirect功能
如图,做一个测试,编辑代理服务器的配置文件
要测试成功有几个条件要达成
首先,location后面只能是根目录/不能是加别的
第二个条件是proxy_pass后面的url后面不能加/符号
正常来说是要/结尾的,但是这里不能用/结尾
然后访问的目录必须真实存在,如果不存在可以创建一个
然后再目录里面也可以创建一个index.html文件,里面编辑一些字符串内容
保存退出重载一下配置文件
如图,编辑被代理服务器的配置文件
写成如图所示的这种简单格式
保存退出重载配置文件
但是我们要访问的是目录本身,并不是里面的某个文件
所以crul的时候,访问的地址结尾不能加上/符号
这样就可以访问到aming目录了
可以看到,返回的代码是301表示永久重定向
下面的location后面的字段,是带端口8080的访问路径
如图,编辑被代理服务器的配置文件
添加access_log/tmp/456.log
这样就开启了服务器的访问日志,检查访问日志可以更清晰的了解访问过程
保存退出重载
如图,重新curl测试一次,这次测试aming结尾是带/符号的
cat查看/tmp/456.log访问日志
发现日志信息没有host和端口等信息
这种情况可以修改nginx.conf配置文件里面的format配置
如图,配置文件里面log_formatmain这三行本来是被注释掉的
现在把注释去掉,让这几行产生作用,这个就是日志返回信息的格式设置
如图,在最后面添加两个nginx变量$host$server_port这两个变量
然后保存退出重载一下,这样访问日志显示的信息里面,就会加上这两个变量的信息了
如图,编辑代理服务器配置文件,同样添加access_log配置
日志地址就是/tmp/proxy.log
后面加上main因为nginx.conf里面配置的格式是用main命名的
这里加上main表示使用main命名的格式来显示日志信息
如图,同样被代理服务器里面的access_log
后面也需要加上main表示使用main的格式显示日志信息
保存退出重载一下
如图,curl测试一下,这次测试是用/符号结尾的
查看456.log后端服务器的日志,可以看到,访问的是8080端口
查看proxy.log代理服务器日志,可以看到,访问的是80端口
网络代码都是200这样是正常的
如图,这次访问aming结尾不带/符号
可以看到返回的是301
查看proxy.log返回的也是301
如图,重新测试一下,再查看两个日志
看到301再到200的日志信息
总之确定了我们访问80端口,跳转到了8080端口
但是客户端是访问不到8080端口的
如图,解决这个问题可以使用proxy_redirect
这里是http://$host:8080//;
这样写可以把本来返回的8080端口信息给去掉
保存退出重载
如图,重新测试
可以看到,返回的是301
然后location后面的地址里面,也没有8080端口的信息存在了
反向代理05
proxy_buffering是缓冲的意思
缓冲就是在内存里面划一块区域,在里面写数据
写到一定量的时候,才会把缓冲里面的数据写进硬盘中
这样做的话,就可以大大减少硬盘的读写频率
如果不做缓冲,每产生一次数据都要读写一次硬盘,对于硬盘的负担就会很大
假设有三个对象,客户端a代理服务器b被代理服务器c
a发出请求,b接收请求,转发给c
c返回数据给b,然后b再把数据发给a
这是一般的运作情况,但是如果a发出许多访问请求
或者有很多个客户端发出访问请求
那么对于代理服务器b和被代理服务器c来说
每个请求都要按照这个流程处理一次,负担就会很重
proxy_buffering就是在代理服务器b的内存里面设置一个或多个缓冲区域
当缓冲区域数据量满了的时候,才把数据转发给相应的客户端
这样代理服务器b的数据转发次数就大大减少了,负担就下降了
当proxy_buffering开启的时候,由proxy_busy_buffer_size来决定何时把数据发送给a
在这个过程中,如果buffer区域被写满,有数据溢出
多出来的数据会被写入到temp_file也就是一个临时文件中去,这个文件会存储在硬盘上
如果proxy_buffering关闭的话,c反馈的数据就直接由b转发给a
而不会有别的操作发生
如图,不管proxy_buffering是on还是off的状态
proxy_buffer_size这个选项都是生效的,这个参数是用来设置一个buffer
这个buffer存储了服务器反馈的header信息
如果设置不够大,存储不了header信息的话,会出现502错误码
所以建议设置为4k
如图,proxy_buffers是定义每个请求的缓冲区个数和每个缓冲区的具体大小
这里定义了84k意思就是有8个缓冲区,每个缓冲区的大小为4k
那么总缓冲区的大小就是8*4=32k
假设有一万个请求,那么缓冲区就是8*10000个缓冲区了
因为这个设置是针对每个请求来的,而不是总共只有8个缓冲区
proxy_busy_buffer_size定义的是达到多少数据量,就把数据传输给客户端
这里定义的是16k,那么当b的属于这个请求的缓冲区接收到16k的数据量的时候
就会把数据转发给a
这里缓冲区有8个,总共32k的大小,缓冲区一般来说处于两种状态
一个是接收数据,一个是发送数据,并不能同时接收数据和发送数据
proxy_busy_buffer_size定义的就是发送数据的缓冲区的大小
所以proxy_busy_buffer_size的大小要比缓冲区的总大小要小才行
接收的数据达到proxy_busy_buffer_size设置的数据量的时候
这些缓冲区就进入发送数据的状态,剩下的缓冲区则是接收数据的状态
如果请求反馈的数据总量小于proxy_busy_buffer_size设置的值
那么b接收完成就会直接转发为a
如果请求反馈的数据总量大于proxy_busy_buffer_size设置的值
那么当缓冲区接收的数据量达到proxy_busy_buffer_size设置的值的时候
就会把这部分的数据先发送给a
如图,proxy_temp_path定义的是临时文件存放目录
举例,a发出请求,b代理服务器分配给a这个请求的缓冲区总大小为32k
但是c服务对这个请求反馈的数据量为100MB这么大,远远超过缓冲区的大小
这种情况下,b接收c的数据的过程中就会有很多数据溢出缓冲区
这些溢出的数据会被先保存到b的硬盘上的临时文件里面去
proxy_temp_path定义的就是这个临时文件存放的路径,还有子目录层级
这里定义的路径是/usr/local/nginx/proxy_temp这是一个目录名称
临时文件就会存放到这个目录里面去
后面的数字12表示子目录层级
前面的目录路径是由我们自己定义的,子目录是系统自动创建的
创建多少个子目录层级,可以通过后面的数字设置
比如只写一个1就表示子目录只有一层,子目录的名称为0-9的命名方式
根据定义,proxy_temp_path支持三级子目录,也就是可以写3个数字
比如写1子目录数量和命名方式就是0-9共10个
如果写2就是00-99共100个,如果写3就是000-999共1000个子目录
子目录名称也是根据这些数字来命名的
如果写13就表示子目录分两层,第一层是0-910个子目录
第二层是000-9991000个子目录,也可以反过来写31
这样第一层就是1000个子目录,每个目录下面第二层又有10个子目录
proxy_max_temp_file_size定义的是临时文件的总大小
比如这里设置为100M说明每个临时文件最大为100M
临时文件的数据如果传输完成,就会自动删除
proxy_temp_file_write_size定义的是同时写入临时文件数据量的总大小
这里定义一个值比如8k或者16k
如果同时写入的数据量低于这个值,那么就增加同时写入的数据量
如果高于这个值,那么就减少同时写入的数据量
因为同时写入的数据量太高,对于硬盘IO负担太大,而太小则没有充分用到硬盘的性能
所以设置一个值,既不会太快,也不会太慢,充分使用到硬盘的性能,又不会负担过重
如图,这是一个使用proxy_buffering的例子
首先是设置为on的状态,也就是打开buffer功能
头文件存储的buffer区域大小为4k
然后是其它数据的buffer区域为2个,每个大小为4k
然后是busy_buffers的数据量为4k
buffer接收的数据量达到4k时就会发送数据
然后是临时文件存放的路径定义,定义了两层子目录
分别是12也就是第一层有0-910个子目录
然后每个子目录下面第二层有00-99100个子目录
然后是每个临时文件的大小为20M
然后是临时文件同时写入的数据量定义为8k
反向代理06
如图,要使用proxy_cache首先要打开proxy_buffering功能
proxy_cache就是缓存功能
客户端a发出请求,如果a请求的数据已经保存到代理服务器b的缓存里面的话
那么b会把相关数据直接发送给a而不会去向服务器c请求数据
如果不开启缓存功能,那么a的每一次请求,代理服务器b都会向服务器c请求获取一次数据
如果a两次请求的数据是一样的,也会向服务器c请求两次数据
开启缓存功能的话,第一次请求的数据已经被保存到缓存里面了,第二次如果请求同样的数据
b就会直接从缓存里面获取,而不会去向c获取数据,这样就减轻了服务器c的负担
总结,缓冲可以减轻代理服务器b的负担,缓存可以减轻被代理服务器c的负担
如图,proxy_cache功能的开启与关闭
proxy_cacheoff意思就是关闭缓存功能
proxy_cachezone就是开启缓存区,zone就是缓存区的名称
缓存区名称是可以任意命名的,可以是zone也可以是123等任意名称
这里写一个缓存区名称就表示了开启一个以这个名称命名的缓存区
从nginx0.7.66版本开始,开启proxy_cache之后
还会检测被代理服务器的http响应头中的Cache-Control,Expire头域
如果cache-control的值为no-cache时,那么这个请求的数据是不会被缓存的
如图,curl-I一个网站请求数据
可以看到,返回的头文件信息,Cache-Control后面的值里面
存在no-cache,表示这个请求返回的数据是不会被缓存的
如图,proxy_cache_bypass这个参数是设置某种情况下
请求的数据不从cache中获取,而是直接从后端服务器中获取
这个参数后面的string一般为nginx的一些变量
比如proxy_cache_bypass$cookie_nocache$arg_nocache$arg_comment;
这样设置就表示,这三个变量的值,任意一个不为0或空的情况下
响应数据就不会从cache中获取,而是直接从后端服务器获取
暂时很少用到,了解一下即可
如图,proxy_no_cache跟上面的参数用法相似
主要是设置某种情况下,获取的数据不进行缓存
示例proxy_no_cache$cookie_nocache$arg_nocache$arg_comment;
这样设置就表示,当后面这三个变量任意一项的值不为0或者空的时候
获取的数据都不进行缓存
如图,这个参数格式跟上面的参数差不多,一般不需要设置,保持默认就可以了
如图,proxy_cache_path是设置缓存区具体配置的参数
缓存除了内存中的空间外,还可以在硬盘中划出一块空间来做缓存
path就是指定一个目录路径作为缓存路径,缓存会存放到这里面
levels=1:2这个表示目录层级,第一个数字设置的是第一层
第二个数字设置的是第二层
1表示0-9a-f总共16个字符,每个目录由单个字符组成,一共16个目录
2表示0-9a-f总共16个字符,但是每个目录由两个字符组成,00,01,04,2f之类的,有两百多种组合
总之这个参数是设置子目录层级,第一个数字表示第一层
第二个数字表示第二层
keys_zone是设置内存zone的名称和大小
keys_zone=my_zone:10m就表示zone的名称叫做my_zone
然后zone的大小是10MB
inactive是设置多长时间后,把缓存删除
比如图中设置为300s意思就是,如果数据在300秒内没有被访问过
那么这个数据就会从缓存中删除
max_size是设置硬盘中的缓存最多可以存储多少数据
比如这里设置为5g,上面设置的目录/data/nginx_cache/
这个硬盘上的目录,最多可以存放5g的数据,如果超过这个量
系统就会先把访问量最少的数据删除,再放新的数据进去
proxy_cache_path这行代码不能写在配置文件的server括号内
要写在http括号里面
举例说明,首先编辑nginx.conf配置文件
如图,在server的外面添加proxy_cache_path代码
因为指定的缓存目录/data/nginx_cache/不存在,所以这里要创建一下
如图,编译一个虚拟主机的配置文件,在location里面添加proxy_cachemy_zone;
这样这个虚拟主机接收请求的时候,就会使用my_zone这个缓存空间了
而my_zone缓存空间的具体定义已经在nginx.conf配置文件里面作了定义
nginx.conf里面的配置内容对所有虚拟主机都是有效的
所以在nginx.conf里面定义了my_zone的话
那么在所有虚拟主机配置文件里面使用proxy_cachemy_zone
这些虚拟主机就都可以使用到my_zone这个缓存空间
然后保存退出重载配置文件就可以生效了
平时使用,只需要添加这样两行代码就成功配置好缓存了
如图,还有一个问题就是,nginx服务本身的权限是nobody
刚才的目录是使用root权限创建的
所以这里要把缓存目录的所有者所属组修改成nobody
这样nginx服务操作这个目录的时候就不会有权限问题了
如图,查看/data/nginx_cache/目录内容
可以看到0-9a-f的第一级目录
进入0目录内查看,可以看到由两位数构成的第二级目录
总结,缓存空间配置主要就是定义proxy_cache_path
可以在nignx.conf里面定义,这样任何虚拟主机都可以使用到
定义好proxy_cache_path后,在需要使用缓存的虚拟主机server内
配置proxy_cachezone_name
zone_name就是proxy_cache_path里面定义好的缓存空间名称
这样对应的虚拟主机就可以使用这个缓存空间了
以上就是nginx正向代理与反向代理详解的详细内容,更多关于nginx正向代理与反向代理的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。