网上一直说nginx很好用,也阅读过一些有关的文章。它最重要的功能是负载均衡和反向代理。
在没有接触过“负载均衡”以及“反向代理”之前,一直觉得这两个东西遥不可及。随着越来越深入的了解,也有了自己一些浅显的见解。
在初入项目开发的时候,一般不会接触到负载均衡这个名词。我们只做一些比较小的,或者说是访问量不大的程序。
例如个人博客,电商网站,校园内便捷应用(二手交易,校园商铺...)等这些练手的网站。
只需要创建一个项目,开发完成之后发布到linux上就已经觉得大功告成了(依稀还记得第一次将自己的项目发布到linux上的那种喜悦,原来网站时这么来的~)
这个时候,我们从来不会去考虑性能的问题,只觉得能用了就行了。
随着入行越来越深,便发现会有很多问题得不到解答,如
难道那么大的应用是全在一个项目里开发的么?那这个项目启动都要好久吧......
他这个项目是怎么访问到其他项目写好的程序的?真是奇怪啊......
如果一个项目的访问量瞬间爆发怎么办?我的服务器会不会死机....
这类问题越来越多,需要一个个去探索,而“负载均衡”就是解决上述瞬间访问量巨大的问题的。
(图片来源于网络,如有侵权,请告知删除)
nginx充当了一个代理服务器。我对“代理”这个词的理解是他可以帮忙拦截请求,帮我们真正的服务代劳接收这个请求,然后再分发给真正的服务器。
在没有nginx服务器之前,请求springBoot项目的接口,我们需要这样:http://ip:8084/testapi
在有nginx服务器之后,只需要这样:http://ip/testapi (nginx服务默认是80端口,所以可以省略)
这个时候,我就有疑问了,这只不过是隐藏了端口而已。然而他真正的作用不在于此。
当没有nginx服务器之前,我们只有一个项目接收客户端的请求,这样的问题会有很多。请求峰值过高导致服务响应慢,万一服务器宕机怎么办等等等等
这个时候就想起了nginx服务器,他既然能够拦截请求,分发请求,那我们需要多搞几台服务器,发布同样的服务,然后再服务集群到nginx服务器当中,这样nginx在接受了服务之后,就能将服务分散到各个不同的服务器上,既实现了请求的需求,又减小了服务器的压力。
这里还会涉及到各个服务的权重以及请求分发算法~(这个以后再写)
这就是负载均衡。
既然有反向也就有正向。
反向代理和正向代理的区别就是:正向代理代理客户端,反向代理代理服务器。
正向代理具有指向性,如访问外国网站YouTube,我们需要访问正向代理服务器,这个服务器具有指向性(指定网站YouTube返回数据给客户端)(其实访问YouTube的话,YouTube也有他的反向代理服务器,所以很多情况下,都是正向反向一起用的)
反向代理就是人在国外,直接访问YouTube,不需要经过指向性的正向代理了,我们面对的就是YouTube的服务器,具体要如何请求数据,网站的代理会完成。
1.下载安装包,如果需要特定版本的可以前往官网下载:Nginx官网
wget -c https://nginx.org/download/nginx-1.10.1.tar.gz
2.官网下载的是源码,需要先安装编译环境
yum install gcc-c++
3.安装依赖库
yum install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel
4.解压
tar -zxvf nginx-1.10.1.tar.gz
5.进入解压目录
cd nginx-1.10.1
6.配置(下面命令选一个)
./configure(默认配置)
./configure --prefix=/usr/local/nginx (指定安装目录)
7.编译安装nginx
make
make install
make && make install (上面两步可以合作一步)
编译安装完成后(如果是默认安装,返回上一级就可以看到多了个文件夹)(如果是指定的,可以看到指定文件夹内多了一些文件)
8./进入安装文件夹的sbin
cd /usr/local/nginx/sbin
9.启动nginx(可以配置全局变量,直接使用nginx命令启动,具体操作方法,文章第一点:环境变量配置)
./nginx
附上文章:配置详解
nginx的详细配置内容比较多,放到另一篇文章,这里只配置用到的地方,其他使用默认。
1.进入nginx目录的配置文件夹
cd /usr/local/nginx/conf
2.编辑nginx.conf
vim nginx.conf
主要修改两个地方,第一个框要自己手动加
第一个地方:server 后面配置的是项目访问的端口,配置多个可以让nginx通过请求分发算法去访问这些端口(实现负载均衡)
upstream name{
#ip_hash 这里可以配置请求分发算法
server xxx.xx.xxx.xx:端口
server xxx.xxx.xxx.xxx:端口
}
第二个地方:要往location /{ } 内添加的
location / {
#最后面的name 要和自己定义的对应,名字可以随意,只要对应即可
proxy_pass http://name;
proxy_redirect default;
}
配置完使用nginx -t 测试配置文件是否有误,测试没问题后使用 nginx -s reload 命令使配置文件生效,生效后便可以开始测试了↓
1.这是我原来的访问方式,当然配置了代理之后,还是可以通过这种方式访问
2.配置了nginx后,可以如下这么访问
直接省略端口,nginx会对请求进行过滤,将请求分发给配置好的服务器。
帮助命令:nginx -h
启动Nginx服务器 :nginx
查看进程: ps aux | grep nginx
配置文件路径:/usr/local/nginx/conf/nginx.conf
检查配置文件:nginx -t
指定启动配置文件:nginx -c /usr/local/nginx/conf/nginx.conf
暴力停止服务:nginx -s stop
优雅停止服务:nginx -s quit
重新加载配置文件:nginx -s reload