文章结构:
(本文使用的是win10本机,centos8虚拟机)
Nginx是什么;
如何在linux上下载与安装;
Nginx的使用
对Nginx的理解
以下是基于Nginx的主要应用上的理解
当我们网上冲浪的时候,实际上会访问服务器上的tomcat中部署的项目。此时有很多人一起和你网上冲浪,而tomcat能同时接收来自客户端的请求量(并发量)非常小,那可能有人就冲到404去了。
那么多弄点tomcat,这样并发量不就大了吗?但是我们网上冲浪所输入的网址(域名)都是一样的,那如何做到输入同一个域名访问到的是不一样的tomcat?
这个时候我们就需要一款反向代理软件Nginx来解决这个问题。这样浏览器的请求都会发到Nginx,然后再由Nginx去分发请求到不同tomcat。同时还可以给不同tomcat分配不同权重,使得某些tomcat能够处理更多请求。
所以Nginx主要是与tomcat集群一起使用的,Nginx的并发量为5万,所以后面还可以搭建Nginx集群。
Nginx的应用场景:
1、http服务器,它可以独立提供http服务,作为网页静态服务器。
2、虚拟主机,可以实现在一台服务器虚拟出多个网站。
3、反向代理,负载均衡(也就上文的理解)。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求,并需要用多台服务器集群时,可以使用Nginx做反向代理,并且多台服务器可以平均分担负载,不会因为某台服务器的负载高宕机而某台服务器闲置的情况。
Linux下安装
一般情况下Nginx是需要独立安装在一个服务器上没有其他软件。
首先需要安装四个环境来支撑:
- gcc环境
# yum install gcc-c++
- PCRE,一个Perl库,包括Perl兼容的正则表达式库,Nginx的http模块使用pcre来解析正则表达式,所以需要pcre库,同时pcre-devel这个库Nginx也需要使用。
# yum install -y pcre pcre-devel
- zlib,提供了很多种压缩和解压缩的方式,Nginx使用zlib对http包的内容进行gzip,所以需要在linux安装zlib。
# yum install -y zlib zlib-devel
- OpenSSL,一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。Nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以也需要安装该库。
# yum install -y openssl openssl-devel
Nginx1.8版本下载链接:链接:https://pan.baidu.com/s/1AN6t6b647TRriupwcqY0Qg 提取码:yzvv
(如果使用的虚拟机,需要上传到虚拟机上,上传文件的方法可以参考https://blog.csdn.net/qq_41020633/article/details/107318555中的“连接软件的下载与使用”)
一般都在/usr/local下进行解压:
# tar -zxvf nginx-1.8.1.tar.gz
解压完成后我们不能直接进入文件夹之后使用make,需要使用文件夹中的configure命令生成一个makefile文件,将以下命令在nginx-1.8.1文件夹下直接复制回车,复制前最好放到notepad中看看有没有非法字符:
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
敲完回车,就可以在文件夹里看到Makefile文件了,这时我们再make就可以了。
但可能有人会有报错,详细可参考https://www.jiweichengzhu.com/article/cc4ed4eeb4644586b81e9070a96c0bda(转载)
编译完成之后,我们再输入make install 进行安装,但还没有结束,之前我们配置文件中设置了一些临时路径,但是并没有创建过他们。
所以接下来需要将那些目录进行创建:
# mkdir /var/temp/nginx/client -p
创建完就可以在/usr/local/目录下看到nginx:
其中conf为配置文件目录,html为静态资源目录,sbin为启动文件目录。我们需要进入sbin文件,输入./nginx进行启动。
启动完成!(但这里在我第二次启动的是就报了错:/var/run/nginx/nginx.pid" failed (2: No such file or directory),原因:每次当我们停止nginx时(nginx -s stop) ,nginx 会把 /usr/local/var/run/ 路径下名为nginx.pid 的文件删掉。这个时候需要去/var/run/下面mkdir nginx,然后再去sbin下启动nginx即可)
接下来可以通过浏览器试一下,通过输入ip地址与默认端接口号80:
这就配置成功了!
如果要关掉nginx输入 ./nginx -s quit来正常退出,或者用reload,而stop属于非正常退出。
Nginx的使用
1 作为服务器与虚拟主机
都安装好了,nginx到底怎么使用?以下将会给出一个基础简单过程描述。
在使用前,如果是对使用服务器或者虚拟机的朋友建议大家可以使用notepad++来与它们进行连接,这样方便修改nginx的配置文件。如何使用notepad++连接可参考https://blog.csdn.net/weixin_42175570/article/details/83619668(转载)
打开nginx文件夹下的conf文件夹,找到nginx.conf:
其中server_name相当于我们输入的ip地址,端口号是默认80,location中的“/”表示没有写任何路径,这种情况下默认访问的是目录是html,这个目录就在nginx里,然后这个目录中默认访问的页面就是index.html和index.htm,就在html目录中。
如何放入你的静态网页项目
将你编写好的所有静态页面放到一个文件中,随后将该文件夹整个上传到nginx下与原html文件夹同级,比如这里我就放了一个我的测试文件myHtml1,里面有一个index.html。
然后将配置文件中的root html改成root 你的文件名(我这里就是 root myHtml1),将index后面的属性更改成你自己文件夹中的默认网页(我的是index.html)。
最后将nginx reload一下,再通过之前访问的方法访问,就可以看到你自己的网页了。
如何虚拟出两个主机(配置两个项目)
- 通过端口的方式:
同样更改nginx.conf配置文件,将server模块复制一下,修改监听端口,此处我修改成81,配置默认访问的文件夹(myHtml2)中的默认网页(index1.html)。这样直接访问ip地址加端口号就能进入对应的网页项目。
- 通过域名的方式:
由于本文主要为入门,写的都是demo,所以通过不同域名的方法是修改了本机C:\Windows\System32\drivers\etc下的hosts文件来实现的。
现在我想实现访问myHtml1与myHtml2中的默认网页,但是通过输入不同的网址,那就在hosts文件最底下填上ip地址与域名的映射关系(根据你虚拟机的ip填写)。
这一步配置完成可以先通过输入www.myHtml1.com进行检查,查看是否前往了虚拟机ip的默认端口80,也就是显示myHtml1这个网页。
ok之后我们再去配置服务器端(虚拟机)的nginx.conf,将端口都改回80,接着就将server_name修改成对应的域名。
nginx再reload一下,直接输入www.myHtml2.com就可以出现对应的网页内容了。
2 反向代理与负载均衡
反向代理
一般我们说的代理,代理的是客户端,而反向代理则代理的是服务端,具体理解在本文一开始的时候就有讲解。
一般服务器的功能都是划分清楚的,比如数据库服务器就只安装数据库,nginx服务器就只安装nginx。但由于本文主要介绍基础原理,所以讲tomcat与nginx都装在了一台虚拟机上。
tomcat的下载与安装可以参考https://blog.csdn.net/qq_41020633/article/details/107318555中的“Tomcat”
首先将项目打包成war包上传到服务器上,部署到tomcat的webapp/ROOT目录下,这里我就没有放项目了,然后通过bin目录下的./startup.sh启动tomcat之后,在浏览器中输入ip地址加上8080,就可以访问tomcat了。
然后要实现nginx作为方向代理,也就是我们要先访问nginx后再访问到tomcat,那我们就要去nginx的配置文件中告诉它要去访问哪个tomcat。
首先在nginx.conf中增加一块upstream,后面的名字可以按需求取名,里面写上server加上你的tomcat访问的地址和端口。
随后将server模块中的root一行注释掉,增加一行proxy_pass,其中http后的内容与你自己在upstream处取的一致。
reload一下nginx之后,我们通过在浏览器中输入www.myhtml1.com(这里我改成了myhtml3,你们可以不用改,要改的话记得windows中的hosts文件也要修改)就可以访问到tomcat的页面。
反向代理主要的流程就如下图所示:
负载均衡
在tomcat搭了集群之后,需要nginx让性能相同的tomcat都能获得相同的请求量,这就叫负载均衡。在资源有限的情况下,我是选择在同一台虚拟机中复制了三个tomcat,通过端口号的不同来做集群。
然后在notepad++中找到server.xml来挨个修改端口号,有端口号的都在原来的基础上增加1:
启动三个tomcat之后,我们再去nginx下的配置文件中修改upstream,再reload一下:
在还没有分配权重的时候每一个tomcat被访问的概率都为三分之一,但修改后我们再访问网页是看不出到底是访问了哪个tomcat,如果你想看出区别可以修改一下tomcat那只猫的页面的title,title有变化了说明每次访问的tomcat是不一样的。
如果以后哪台服务器的性能好,你想要的分配多一点的请求量,可以在后面加上weight=:
这样他们所被分配的比例就是2:1:1。
以上就是有关nginx的所有内容。