额,上次的文章写得不怎么样,不过小宏还是要更新的,一是为了自己方便记忆,另一个重要的原因还是希望能方便广大像小宏一样的菜鸟猿,嘻嘻。得了,少说废话,步入正题
--------------------------------------------------------------------------------------------------------------------------------
其实,上次的文章已经大体的将环境部署做完了,只不过里面还没有我们经常需要使用的稍微高级的服务,今天,小宏想给大家介绍的是这些高级部分的一部分,也是很常用的一部分----------nginx的反向代理和负载均衡。小宏那,仅仅是谈谈自己作为新手的理解和总结,希望大神多多提拔。。不对,多多指点。
--------------------------------------------------------------------------------------------------------------------------------
哦哦,对了。在我们开始说我们今天的正题之前呢,咱们先来稍稍深入的了解一下nginx。上篇文章咱们说了,linux给我们提供了Apache和Nginx两项服务。或许大家从学习中知道,其实二者可以实现的功能大致是相同的,那么我们使用其中的一个不就好了嘛?其实,二者还是有很大的区别地。在互联网初期,网站大小不是很大,访问量都很轻量,一个网站的访问量一天最多就几万IP,这个时候Apache完全可以满足需要,人们更多的是为它开发各种模块,像重写模块,访问控制列表,缓存模块等等。但是随着互联网的飞速发展,网站的访问量以指数增长,大型网站的除了加大硬件投入外,典型的Web服务器Apache这时候也力不从心了,于是Nginx开始崛起,最初的设计是俄罗斯工程师为大型网站解决高并发设计的。所以注定了高并发是它永恒的优点。再次就是反向代理,现在大型网站分工详细,哪些服务器处理数据流,哪些处理静态文件,这些谁指挥,一般都是用nginx反向代理到内网服务器,这样就起到了负载均衡分流的作用。其次,nginx高度模块化的设计,使得编写模块变得相对简单。
那咱们就不用Apache啦??不对滴,很多中小型网站都在用Apache,非常重要的原因是它出现时间较长,稳定,文档丰富,再次在重写方面相对nginx更强大,模块超多,基本只要你能想到的,就有人开发过。不过那,今天我们说的是nginx,就少说点Apache的好处吧,要不nginx就不开心咯。咳咳。。好啦,步入正题要紧。
(一),静态资源(js、css、img等)分布
额,在说反向代理之前呢,我们先来谈谈静态资源的分布问题。或许大家会问,这有啥子问题,各个项目的静态资源存在各个项目对应的images,css,js文件夹下就好了呀。其实不然,大家有没有想过,像jquery.js,bootstrap.js,还有一些常用图标的图片,我们是不是在每个项目中都会使用到他们?那好了,我们每个项目里都有这些文件,势必会造成资源上的浪费,要知道长时间下来,积累的项目过多,重复的文件也会越来越多,服务器也可能Hold不住的呀。所以,nginx给我们提供了静态资源服务。接下来咱们说说怎么操作哈。
既然是公共的静态资源,那咱们就不放在 /usr/share/nginx/html下面的项目里了哈。假设/var/www/html(小宏的是这个,大家也可自行选取哦)是静态资源所在的文件夹,那么可以通过修改配置文件来通过nginx处理这些静态资源。
配置文件位置: /etc/nginx/conf.d/default.conf(找不到的话,可以用find / -name default.conf 哦)
在配置文件中添加如下代码(写在server{ }里)
location /asset (小宏自己定义的,并不是啥子特殊的规则写法哈){
root /var/www/html;
index index.html;
}
然后在我们新建的文件test.html中写入
<img src=’/asset/1.png’>
测试成功的话,显示的图片就是我们/var/www/html中的图片了哦
¥¥注意,我们的location还支持正则表达式,我们可以用正则表达式来匹配html、css、js、png、jpg、gif、ico这些为扩展名的请求,在配置文件中添加
location ~* \.(html|css|js|png|jpg|gif|ico)$ {
root /var/www;
}
¥¥
(二),反向代理
nginx的另一大经典使用场景就是作为反向代理服务器将对应的请求转发到应用服务器处理然后将应用服务器的响应内容返回给客户端。通过配置location可以将客户端请求转发到配置的地址,通过nginx把客户端请求接受到 然后发到Apache服务器上或者tomcat服务器上。
在配置文件中添加如下代码(如果配置文件中有相同语句,注释掉就好了哦,如下图):
location / {
#转发的应用服务器路径
proxy_pass http://localhost:81;
}
¥¥哦哦,对了,有个很重要的问题,在上面的代码中我们修改了localhost的值为81,但是我们相关的配置文件里写的并不是这个,所以我们需要稍稍修改一下。
需要修改的配置文件 /etc/httpd/conf/httpd.conf
修改的地方:
Listen 80改为你设置的端口(81);
NameVirtualHost *:80改为你设置的端口(81);(这一行小宏没有尝试,如果大家出现了问题,可以尝试添加这行解决一下)
¥¥
(三),负载均衡
上面演示了如何反向代理,但是如果请求量过大的时候,一台应用服务器显然是不能满足需求的,所以就需要多台服务器来实现负载均衡。哎,代码你别抢啊,行,你抢你就直接上。
upstream local_servers {
server 192.168.1.180:81(这个是你设置的端口哈,记住,是不同于你当前操作的端口哦) weight=1(这个是权重,就是能够匹配到该服务器加载这个项目的机率,权重越大,请求转发到这台服务器上的概率越大
server 127.0.0.1:81(当前操作的端口,因为是在本机上操作,小宏就不改了啊) weight=1;
}
¥¥注意,上面的代码一定要写在server{ }外面哦,不然会报错的。如下图
对了,上图的location也是需要修改的地方。修改如下
location / {
proxy_pass http://local_servers; //转发的应用服务器路径
proxy_set_header Host $host; // $host就是nginx代理服务器
proxy_set_header X-Real-IP $remote_addr; //客户端真是ip
proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;
proxy_bufferingoff; //代理缓存删除
}
还有,还需要把当前nginx中对php的设置注释掉才可以哦。
还有一件事,复制上面的代码时,要把//后面的注释删掉哦,那可不是Linux的注释。。嘻嘻
--------------------------------------------------------------------------------------------------------------------------------
好啦,作为小白,小宏就简单介绍这么多哈,如果大神们有什么意见还请多指点。另外,如果觉得小宏说的不好,小宏还找到了几位大神的文章,在这里分享给大家
http://blog.csdn.net/z406245159/article/details/72821285
https://www.cnblogs.com/jsonhc/p/7199295.html?utm_source=itdadao&utm_medium=referral
谢谢大家喽,下一章见!!!