Nginx反向代理教程 发表于2017-02-06|分类于||阅读次数: 本文字数:3.8k|阅读时长 ≈7 分钟
为什么需要反向代理? 有几种情况下你可能需要反向代理:
比如你在法国租用了一台服务器,国内速度太慢了,这时你就可以在香港找个vps反代这个法国服务器,这样你访问这个网站因为通过香港的中转速度就会变快。而且由于反代服务器对性能不要求,所以价格就很便宜。
如果你不想暴露真实的IP地址,那么就可以在前端搭建一个反向代理服务器,让用户都是访问反向代理服务器。
因为有些网站被墙了。。比如google。。你可以用没被墙的IP做个反代,这样大家访问这个网站就相当于访问google了。。
如何做反向代理? 反向代理应用最广的就是nginx了,所以这里以nginx为例。
最简单的反向代理代码 代码的位置是nginx的网站配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 server { listen 80 ; server_name icewx.yun; location / { proxy_pass http: 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的目的。 但这样就是直接连接,如果我们能把请求到的内容临时缓存在反代服务器上,那访问速度就更快了。比如你用香港反代法国的机子,如果请求一次后就缓存在香港服务器,那后面的人访问就是直接从香港服务器上取文件,速度就快多了。
首先我们需要建立用来存储缓存的目录:```arduino mkdir /home/cache/path -p
mkdir /home/cache/temp -p
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 ### 然后在nginx的配置文件httpd.conf里面增加缓存的设置 以下代码请插入http{ ##这里 },一般加在 log_format 上面或下面均可: ```sqf client\_body\_buffer_size 512k; proxy\_connect\_timeout 5; proxy\_read\_timeout 60; proxy\_send\_timeout 5; proxy\_buffer\_size 16k; proxy_buffers 464k; proxy\_busy\_buffers_size128k; proxy\_temp\_file\_write\_size128k; 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 32 33 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 6 7 server\_name icewx.org; proxy\_cache\_valid2003043d; proxy\_pass http://cache.icewx.org/; expires 10d; access_log /home/wwwlogs/vpsmm.log access;
当然你熟悉nginx的配置的话,根据以上代码还能实现只缓存图片,js或者只缓存某个目录等等。 需要注意的是,这个缓存设置完,他不到期是不会自动删除的。比如你缓存了首页3天,你更新了文章,就不会自动更新到缓存服务器上,用户访问到的永远都是3天前的内容。要解决这个问题。可以把缓存时间设短,比如1h(1小时)。或者直接手动清空上面设置的2个缓存文件夹的内容。至于使用程序来自动更新的时候清空相应缓存的方法属于高阶应用,后面如果有时间再教大家。。 下面是关于反向代理更详细的描述,方便大家对反向代理有个更深入的了解,我复制粘帖来的。。。 ======================================================================================
1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来 接受internet上的连接请求,然后将请求转发 给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器 。
从上图可以看出:反向代理服务器位于网站机房 ,代理网站Web服务器接收Http请求,对请求进行转发。
1.2 反向代理的作用 ①**保护网站安全:**任何来自Internet的请求都必须先经过代理服务器;
②**通过配置缓存功能加速Web请求:**可以缓存真实Web服务器上的某些静态资源,减轻真实Web服务器的负载压力;
③**实现负载均衡:**充当负载均衡服务器均衡地分发请求,平衡集群中各个服务器的负载压力;
2.1 Nginx是神马? Nginx是一款轻量级 的网页服务器、反向代理器以及电子邮件代理服务器。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。 说到Web服务器,Apache服务器和IIS服务器是两大巨头;但是运行速度更快、更灵活的对手:**Nginx **正在迎头赶上。
)上运行了3年时间,同时俄罗斯超过20%的虚拟主机平台采用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进程。
(6)**内存消耗小:*处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M 10=150M)。 (7)**内置的健康检查功能:**如果 Nginx 代理的后端的某台 Web 服务器宕机了,不会影响前端访问。 (8)**节省带宽:**支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。 (9)**稳定性高:**用于反向代理,宕机的概率微乎其微。