Dragon
主机之家测评主机之家测评  2019-08-22 14:59 主机之家测评 隐藏边栏 |   抢沙发  4 
文章评分 0 次,平均分 0.0

Nginx 反向代理、反代教程

反向代理

简单的理解,反向代理其实也是跳板,你访问 A 的时候, A 就会访问 B ,并把 B 的内容返回给你。更严谨的定义,看后我文章后面复制的其他网站的资料。。。。

为什么使用反向代理

有几种情况下你可能需要反向代理 :

  • 比如你在法国租用了一台服务器,国内速度太慢了,这时你就可以在香港找个 vps 反代这个法国服务器,这样你访问这个网站因为通过香港的中转速度就会变快。而且由于反代服务器对性能不要求,所以价格就很
  • 如果你不想暴露真实的 IP 地址,那么就可以在前端搭建一个反向代理服务器,让用户都是访问反向代理服务器。

nginx 反代

最简单的反向代理代码,代码的位置是 nginx 的网站配置文件,具体要看你安装的面板,例如:lnmp 面板是放在”/usr/local/apache/conf/vhost/域名.conf”,宝塔可以直接在面板里修改,并且之前有文章介绍过宝塔反代,今天主要介绍 nginx,当初如果你是手工安装编译 nginx 也可以。

 

1
2
3
4
5
6
7
8
9
10
11
server
{
listen          80;
server_name     771633.com;
location / {
proxy_pass          http://cache.771633.com/;
proxy_redirect      off;
proxy_set_header    X-Real-IP       $remote_addr;
proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

这个代码的意思就是,你访问 771633.com ,其实拿到的内容是 cache.771633.com 的内容。就成功实现了通过 771633.com 反向代理 cache.771633.com 的目的。

但这样就是直接连接,如果我们能把请求到的内容临时缓存在反代服务器上,那访问速度就更快了。比如你用香港反代法国的机子,如果请求一次后就缓存在香港服务器,那后面的人访问就是直接从香港服务器上取文件,速度就快多了。

前端缓存的反向代理代码

首先我们需要建立用来存储缓存的目录:

 

1
2
mkdir /home/cache/path -p
mkdir /home/cache/temp -p

然后在 nginx 的配置文件 httpd.conf 里面增加缓存的设置
以下代码请插入 http{ ## 这里 } ,一般加在 log_format 上面或下面均可:

 

1
2
3
4
5
6
7
8
9
10
client_body_buffer_size  512k;
proxy_connect_timeout    5;
proxy_read_timeout       60;
proxy_send_timeout       5;
proxy_buffer_size        16k;
proxy_buffers            4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_temp_path   /home/cache/temp;
proxy_cache_path  /home/cache/path levels=1:2 keys_zone=cache_one:100m inactive=7d max_size=5g;

#100m 是内存占用, 7d 是 7 天无访问删除, 5g 是缓存占具硬盘空间

最后在网站的配置文件里面增加缓存的设置

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server
{
listen          80;
server_name     771633.com;
location / {
proxy_cache cache_one;
proxy_cache_valid  200 304 3d;
proxy_cache_key $host$uri$is_args$args;
proxy_pass          http://cache.771633.com/;
proxy_redirect      off;
proxy_set_header    X-Real-IP       $remote_addr;
proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
expires 10d;
access_log  /home/wwwlogs/vpsmm.log  access;
}
}

几个配置的说明:
server_name 771633.com # 主机名
proxy_cache_valid 200 304 3d; # 正常状态缓存时间 3 天
proxy_pass http://cache.771633.com/; # 反代的网站
expires 10d; # 默认 10 天缓存
access_log /home/wwwlogs/fandai.log access; # 日志文件

当然你熟悉 nginx 的配置的话,根据以上代码还能实现只缓存图片, js 或者只缓存某个目录等等。

需要注意的是,这个缓存设置完,他不到期是不会自动删除的。比如你缓存了首页 3 天,你更新了文章,就不会自动更新到缓存服务器上,用户访问到的永远都是 3 天前的内容。要解决这个问题。可以把缓存时间设短,比如 1h ( 1 小时)。或者直接手动清空上面设置的 2 个缓存文件夹的内容。至于使用程序来自动更新的时候清空相应缓存的方法属于高阶应用,后面如果有时间再教大家。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

发表评论

扫一扫二维码分享