Nginx反向代理教程

什么是反向代理?

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

为什么需要反向代理?

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

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

如何做反向代理?

反向代理应用最广的就是nginx了,所以这里以nginx为例。

最简单的反向代理代码

代码的位置是nginx的网站配置文件

1
2
3
4
5
6
7
8
9
10
11
server
{
listen          80;
server_name     icewx.yun;
location / {
proxy_pass          http://cache.icewx.org/;
proxy_redirect      off;
proxy\_set\_header    X-Real-IP       $remote_addr;
proxy\_set\_header    X-Forwarded-For $proxy\_add\_x\_forwarded\_for;
}
}

这个代码的意思就是,你访问icewx.org,其实拿到的内容是cache.icewx.org的内容。就成功实现了通过icewx.org反向代理cache.icewx.org的目的。 但这样就是直接连接,如果我们能把请求到的内容临时缓存在反代服务器上,那访问速度就更快了。比如你用香港反代法国的机子,如果请求一次后就缓存在香港服务器,那后面的人访问就是直接从香港服务器上取文件,速度就快多了。

前端缓存的反向代理代码

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

1
2
3
4

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
11
12
13
14
15
16
17
18
19
20

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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
server

{

listen          80;

server_name     icewx.org;

location / {

proxy\_cache cache\_one;

proxy\_cache\_valid  200 304 3d;

proxy\_cache\_key $host$uri$is_args$args;

proxy_pass          http://cache.icewx.org/;

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;

}

}

几个配置的说明:

1
2
3
4
5
server\_name icewx.org; #主机名  
proxy\_cache\_valid 200 304 3d; #正常状态缓存时间3天
proxy\_pass http://cache.icewx.org/; #反代的网站
expires 10d; #默认10天缓存
access_log /home/wwwlogs/vpsmm.log access; #日志文件

当然你熟悉nginx的配置的话,根据以上代码还能实现只缓存图片,js或者只缓存某个目录等等。 需要注意的是,这个缓存设置完,他不到期是不会自动删除的。比如你缓存了首页3天,你更新了文章,就不会自动更新到缓存服务器上,用户访问到的永远都是3天前的内容。要解决这个问题。可以把缓存时间设短,比如1h(1小时)。或者直接手动清空上面设置的2个缓存文件夹的内容。至于使用程序来自动更新的时候清空相应缓存的方法属于高阶应用,后面如果有时间再教大家。。 下面是关于反向代理更详细的描述,方便大家对反向代理有个更深入的了解,我复制粘帖来的。。。 ======================================================================================

复制粘帖来的反向代理更详细的介绍

一、反向代理:Web服务器的“经纪人”

1.1 反向代理初印象

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器

Nginx反向代理教程/不开心,不聊扶墙聊建站

从上图可以看出:反向代理服务器位于网站机房,代理网站Web服务器接收Http请求,对请求进行转发。

1.2 反向代理的作用

保护网站安全:任何来自Internet的请求都必须先经过代理服务器;

Nginx反向代理教程/不开心,不聊扶墙聊建站

通过配置缓存功能加速Web请求:可以缓存真实Web服务器上的某些静态资源,减轻真实Web服务器的负载压力;

Nginx反向代理教程/不开心,不聊扶墙聊建站

实现负载均衡:充当负载均衡服务器均衡地分发请求,平衡集群中各个服务器的负载压力;

Nginx反向代理教程/不开心,不聊扶墙聊建站

二、初识Nginx:简单却不平凡

2.1 Nginx是神马?

Nginx反向代理教程/不开心,不聊扶墙聊建站

Nginx是一款轻量级的网页服务器、反向代理器以及电子邮件代理服务器。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。 说到Web服务器,Apache服务器和IIS服务器是两大巨头;但是运行速度更快、更灵活的对手:Nginx 正在迎头赶上。

2.2 Nginx的应用现状

Nginx 已经在俄罗斯最大的门户网站── Rambler Mediawww.rambler.ru)上运行了3年时间,同时俄罗斯超过20%的虚拟主机平台采用Nginx作为反向代理服务器。

Nginx反向代理教程/不开心,不聊扶墙聊建站

Nginx反向代理教程/不开心,不聊扶墙聊建站

Nginx反向代理教程/不开心,不聊扶墙聊建站

Nginx反向代理教程/不开心,不聊扶墙聊建站

Nginx反向代理教程/不开心,不聊扶墙聊建站

在国内,已经有 淘宝、新浪博客、新浪播客、网易新闻、六间房、56.com、Discuz!、水木社区、豆瓣、YUPOO、海内、迅雷在线 等多家网站使用 Nginx 作为Web服务器或反向代理服务器。

2.3 Nginx的核心特点

(1)跨平台:Nginx 可以在大多数 Unix like OS编译运行,而且也有Windows的移植版本;
(2)配置异常简单:非常容易上手。配置风格跟程序开发一样,神一般的配置;
(3)非阻塞、高并发连接:数据复制时,磁盘I/O的第一阶段是非阻塞的。官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。(这得益于Nginx使用了最新的epoll模型);
(4)事件驱动:通信机制采用epoll模型,支持更大的并发连接。 (5)Master/Worker结构:一个master进程,生成一个或多个worker进程。

Nginx反向代理教程/不开心,不聊扶墙聊建站

(6)内存消耗小:处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)。 (7)内置的健康检查功能:如果 Nginx 代理的后端的某台 Web 服务器宕机了,不会影响前端访问。
(8)节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。
(9)稳定性高:用于反向代理,宕机的概率微乎其微。

0%