没有听过Nginx?那么一定听过它的"同行"Apache吧!
Nginx同Apache一样都是一种WEB服务器。
基于REST架构风格,以统一资源描述符(Uniform Resources Identifier)URI或者统一资源定位符(Uniform Resources Locator)URL作为沟通依据,通过HTTP协议提供各种网络服务。然而,这些服务器在设计之初受到当时环境的局限,例如当时的用户规模,网络带宽,产品特点等局限并且各自的定位和发展都不尽相同。这也使得各个WEB服务器有着各自鲜明的特点。 Apache的发展时期很长,而且是毫无争议的世界第一大服务器。它有着很多优点:稳定、开源、跨平台等等。它出现的时间太长了,它兴起的年代,互联网产业远远比不上现在。所以它被设计为一个重量级的。它是不支持高并发的服务器。在Apache上运行数以万计的并发访问,会导致服务器消耗大量内存。操作系统对其进行进程或线程间的切换也消耗了大量的CPU资源,导致HTTP请求的平均响应速度降低。 这些都决定了Apache不可能成为高性能WEB服务器,轻量级高并发服务器Nginx就应运而生了。 俄罗斯的工程师Igor Sysoev,他在为Rambler Media工作期间,使用C语言开发了Nginx。Nginx作为WEB服务器一直为Rambler Media提供出色而又稳定的服务。然后呢,Igor Sysoev将Nginx代码开源,并且赋予自由软件许可证。
优点:
Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能 力强,事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 nginx 网站用户有:百度、京东、新浪、网易、腾讯、淘宝等
nginx作为服务器
Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php 等。但是不支持 java。Java 程序只能通过与 tomcat 配合完成。Nginx 专为性能优化而开发, 性能是其最重要的考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高 达 50,000 个并发连接数。 nginx可以7*24小时不间断运行
gcc安装
yum install -y gcc-c++
PCRE安装:
pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式,所以需要安装pcre库。
安装命令: yum install -y pcre pcre-devel
zlib安装:
zlib库提供了很多种压缩和解压缩方式nginx使用zlib对http包的内容进行gzip。
安装命令: yum install -y zlib zlib-devel
OpenSSL安装:
penssl是web安全通信的基石,没有openssl,可以说我们的信息都是在裸奔。
安装命令:yum install -y openssl openssl-devel
① 将安装包上传到 /usr/java/nginx 目录中,
②解压文件
使用命令
tar -zxvf nginx-1.18.0.tar.gz
③ 进入到解压好的文件夹目录
cd /usr/java/nginx/nginx-1.18.0
④指定Nginx的安装目录
./configure --prefix=/usr/java/nginx
⑤ 进行安装
make install
⑥ 启动Nginx服务
#首先进入到sbin目录下
[root@localhost nginx]# cd /usr/java/nginx/sbin
[root@localhost sbin]# ll
total 3764
-rwxr-xr-x. 1 root root 3851592 Jun 21 18:51 nginx
#然后查看该目录下有可执行文件nginx 输入命令
./nginx
⑦ 查看是否启动成功
[root@localhost sbin]# ps -ef | grep nginx
root 1907 1 0 Jun21 ? 00:00:00 nginx: master process ./nginx
nobody 1942 1907 0 Jun21 ? 00:00:00 nginx: worker process
root 2002 1470 0 00:01 pts/0 00:00:00 grep --color=auto nginx
也可以通过浏览器访问Nginx
直接在浏览器地址栏输入Linux的IP地址+80端口号
#此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。
./nginx -s stop
#此方式停止步骤是待nginx进程处理任务完毕进行停止。
./nginx -s quit
重启Nginx服务
./nginx -s reload
首先我们进到Nginx的conf目录下
[root@localhost nginx]# cd conf/
[root@localhost conf]# ll
total 68
-rw-r--r--. 1 root root 1077 Jun 21 18:51 fastcgi.conf
-rw-r--r--. 1 root root 1077 Jun 21 18:51 fastcgi.conf.default
-rw-r--r--. 1 root root 1007 Jun 21 18:51 fastcgi_params
-rw-r--r--. 1 root root 1007 Jun 21 18:51 fastcgi_params.default
-rw-r--r--. 1 root root 2837 Jun 21 18:51 koi-utf
-rw-r--r--. 1 root root 2223 Jun 21 18:51 koi-win
-rw-r--r--. 1 root root 5231 Jun 21 18:51 mime.types
-rw-r--r--. 1 root root 5231 Jun 21 18:51 mime.types.default
-rw-r--r--. 1 root root 2768 Jun 21 23:57 nginx.conf
-rw-r--r--. 1 root root 2656 Jun 21 18:51 nginx.conf.default
-rw-r--r--. 1 root root 636 Jun 21 18:51 scgi_params
-rw-r--r--. 1 root root 636 Jun 21 18:51 scgi_params.default
-rw-r--r--. 1 root root 664 Jun 21 18:51 uwsgi_params
-rw-r--r--. 1 root root 664 Jun 21 18:51 uwsgi_params.default
-rw-r--r--. 1 root root 3610 Jun 21 18:51 win-utf
可以看到其中又nginx.conf的文件
我们使用vim编辑器打开该文件
[root@localhost conf]# vim nginx.conf
文件中的内容如下所示
server {
# 监听的端口号,默认为80 ,可以修改
listen 80;
# 服务的名字
server_name localhost;
location / {
# 如果请求路径为/ ,则找一下目录文件
# 指定的目录
root html;
# 指定目录下的文件
index index.html index.htm;
}
①创建一个springboot项目,
②使用idea将项目达成jar包
③将打包好的项目发送到Linux上
④使用java -jar XXX.jar 命令将项目部署到Tomcat上
⑤修改Nginx的配置文件nginx.conf
server {
# 监听的端口号,默认为80 ,可以修改
listen 80;
# 服务的名字
server_name localhost;
location / {
# 如果请求路径为/ ,则找一下目录文件
# 指定的目录
#root html;
# 指定目录下的文件
#index index.html index.htm;
proxy_pass http://192.168.75.34:8080 ;
}
客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服 务器处理完毕后,再将结果返回给客户端。 这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的,成 本也低。但是随着信息数量的不断增长,访问量和数据量的飞速增长,以及系统业务的复杂 度增加,这种架构会造成服务器相应客户端的请求日益缓慢,并发量特别大的时候,还容易 造成服务器直接崩溃。很明显这是由于服务器性能的瓶颈造成的问题,那么如何解决这种情 况呢? 我们首先想到的可能是升级服务器的配置,比如提高 CPU 执行频率,加大内存等提高机 器的物理性能来解决此问题,但是,硬件的性能提升已经不能 满足日益提升的需求了。最明显的一个例子,天猫双十一当天,某个热销商品的瞬时访问量 是极其庞大的,那么类似上面的系统架构,将机器都增加到现有的顶级物理配置,都是不能 够满足需求的。那么怎么办呢? 上面的分析我们去掉了增加服务器物理配置来解决问题的办法,也就是说纵向解决问题 的办法行不通了,那么横向增加服务器的数量呢?
这时候集群的概念产生了,单个服务器解 决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上,将负载分发到不同的服务器,也就是我们 所说的负载均衡 将服务器接收到的请求按照规则分发的过程,称为负载均衡。
Nginx支持的负载均衡调度算法方式如下:
① 创建两个springboot项目,端口号分别设置为8080 、8081
②将两个项目打成jar包,部署到Linux
③使用java -jar XXX.jar命令执行,分别将两个项目部署到Tomcat服务器
④修改配置文件nginx.conf
# 创建负载均衡的项目路径
upstream aaa {
server 192.168.75.34:8080 ;
server 192.168.75.34:8081 ;
}
server {
# 监听的端口号,默认为80 ,可以修改
listen 80;
# 服务的名字
server_name localhost;
location / {
# 指定自定义的负载均衡配置
proxy_pass http://aaa;
}
⑤启动nginx服务
⑥测试
访问同一个地址,8080、8081分次提供了服务
只需要修改配置文件
在路由后添加weight=值
若访问三次,则会命中8080两次,命中8081一次
# 创建负载均衡的项目路径
upstream aaa {
server 192.168.75.34:8080 weight=2 ;
server 192.168.75.34:8081 weight=1 ;
}
server {
# 监听的端口号,默认为80 ,可以修改
listen 80;
# 服务的名字
server_name localhost;
location / {
# 指定自定义的负载均衡配置
proxy_pass http://aaa;
}
只需在配置文件的upsteam中添加ip_hash
# 创建负载均衡的项目路径
upstream aaa {
server 192.168.75.34:8080 ;
server 192.168.75.34:8081 ;
ip_hash ;
}
server {
# 监听的端口号,默认为80 ,可以修改
listen 80;
# 服务的名字
server_name localhost;
location / {
# 指定自定义的负载均衡配置
proxy_pass http://aaa;
}