• 喜欢前端以及PHP的朋友们可以加PHP同好会QQ群 点击加入qq群
  • 最近在写一个项目---"小A微信托管平台",大家可以去帮忙测试一下!功能在不断完善中,敬请关注!点击进入
  • 本站使用了PHP8.1与HTTP2.0协议,速度简直超级快有木有?

Nginx反向代理的高级应用

Linux Mr.Adam 4年前 (2020-11-14) 1217次浏览 已收录 0个评论

Nginx 反向代理的高级应用

Nginx 反向代理的高级应用

我们通常说的「代理」,都是指客户端向外界发起请求时,并不直接与目标服务器连接,而是将所有请求交给一个代理服务器,由它负责连接外界的目标服务器。同时,从服务器返回的数据,也经过代理服务器返回客户端。在外界看来,所有请求都来自这台代理服务器,这样,它就成功地将客户端隐藏在自己背后,起到了保护客户端的作用.

Nginx 反向代理的高级应用
虽然谈到反向代理必然会有负载均衡,在这里暂且只考虑反向代理,在 Nginx 中则是ngx_http_proxy_module模块
详情见 ngx_http_proxy_module 官方文档
以下是一些常用配置项说明

location / {	
    proxy_pass http://127.0.0.1:8080;	
    proxy_redirect off;
    proxy_set_header X-Real-IP $remote_addr;	
    #后端的 Web 服务器可以通过 X-Forwarded-For 获取用户真实 IP	
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    #以下是一些反向代理的配置,可选。	
    proxy_set_header Host $host;	
    client_max_body_size 10m; #允许客户端请求的最大单文件字节数	
    client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,

	
    ##代理设置 以下设置是 nginx 和后端服务器之间通讯的设置##	
    proxy_connect_timeout 90; #nginx 跟后端服务器连接超时时间(代理连接超时)	
    proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)	
    proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)	
    proxy_buffering on;    #该指令开启从后端被代理服务器的响应内容缓冲 此参数开启后 proxy_buffers 和 proxy_busy_buffers_size 参数才会起作用	
    proxy_buffer_size 4k;  #设置代理服务器(nginx)保存用户头信息的缓冲区大小	
    proxy_buffers 4 32k;   #proxy_buffers 缓冲区,网页平均在 32k 以下的设置	
    proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)	
    proxy_max_temp_file_size 2048m; #默认 1024m, 该指令用于设置当网页内容大于 proxy_buffers 时,临时文件大小的最大值。如果文件大于这个值,它将从 upstream 服务器同步地传递请求,而不是缓冲到磁盘	
    proxy_temp_file_write_size 512k; #这是当被代理服务器的响应过大时 nginx 一次性写入临时文件的数据量。	
    proxy_temp_path  /var/tmp/nginx/proxy_temp;    ##定义缓冲存储目录,之前必须要先手动创建此目录	
    proxy_headers_hash_max_size 51200;	
    proxy_headers_hash_bucket_size 6400;	
}	

以下是一些工作中用到的需求:

访问网站的一个资源,如果该资源不存在,则尝试通过反向代理访问

今天遇到一个需求,复制一个 wordpress 站点到一个测试的服务器,但是该网站下图片素材较多(可能 30-100g 以上) :???: ,所以只能规避 uploads 这个目录复制代码,在测试服务器上通过反向代理的方式加载静态资源等,但是在测试服务器上也需要上传静态资源,这就导致了一个问题,文件虽然上传了,但是如果 uploads 目录如果被反向代理到原网站则访问不到新上传的图片,所以需要一个判断,如果该资源存在,就访问自身的 uploads 目录,如果该目录下不存在该资源,则通过反向代理访问.
以下是我的配置

location /wp-content/uploads/ {
    try_files $uri $uri/ /index.php?args @proxy;
}   
location @proxy {   
    proxy_pass http://44.22.33.11;##原站所在服务器 ip
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Host www.xxx.com;##原站域名
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

在这里应用了 location @ 内部配置


小 A 空间 , 版权所有丨如未注明转载 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Nginx 反向代理的高级应用
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址