Nginx入门

1、什么是Nginx

没有听过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使用基于事件驱动架构,使得其可以支持数以百万级别的TCP连接
  • 高度的模块化和自由软件许可证使得第三方模块层出不穷
  • Nginx是一个跨平台服务器,可以运行在Linux,Windows,FreeBSD,Solaris,AIX,Mac OS等操作系统上
  • 极大的稳定性

2、为什么使用Nginx

Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能 力强,事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 nginx 网站用户有:百度、京东、新浪、网易、腾讯、淘宝等
nginx作为服务器
Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php 等。但是不支持 java。Java 程序只能通过与 tomcat 配合完成。Nginx 专为性能优化而开发, 性能是其最重要的考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高 达 50,000 个并发连接数。 nginx可以7*24小时不间断运行

3、如何使用Nginx

1)安装依赖环境

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

2)Linux系统安装Nginx

① 将安装包上传到 /usr/java/nginx 目录中,
Nginx入门_第1张图片②解压文件

使用命令
 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入门_第2张图片关闭Nginx服务

#此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。
./nginx -s stop

#此方式停止步骤是待nginx进程处理任务完毕进行停止。
./nginx -s quit

重启Nginx服务

./nginx -s reload

4、Nginx的配置文件

首先我们进到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;
        }

5、反向代理实例

①创建一个springboot项目,
②使用idea将项目达成jar包
Nginx入门_第3张图片Nginx入门_第4张图片
③将打包好的项目发送到Linux上
Nginx入门_第5张图片
④使用java -jar XXX.jar 命令将项目部署到Tomcat上
Nginx入门_第6张图片
⑤修改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 ;
    }

⑥ 测试,浏览器访问
Nginx入门_第7张图片

6、负载均衡

1)什么是负载均衡

客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服 务器处理完毕后,再将结果返回给客户端。 这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的,成 本也低。但是随着信息数量的不断增长,访问量和数据量的飞速增长,以及系统业务的复杂 度增加,这种架构会造成服务器相应客户端的请求日益缓慢,并发量特别大的时候,还容易 造成服务器直接崩溃。很明显这是由于服务器性能的瓶颈造成的问题,那么如何解决这种情 况呢? 我们首先想到的可能是升级服务器的配置,比如提高 CPU 执行频率,加大内存等提高机 器的物理性能来解决此问题,但是,硬件的性能提升已经不能 满足日益提升的需求了。最明显的一个例子,天猫双十一当天,某个热销商品的瞬时访问量 是极其庞大的,那么类似上面的系统架构,将机器都增加到现有的顶级物理配置,都是不能 够满足需求的。那么怎么办呢? 上面的分析我们去掉了增加服务器物理配置来解决问题的办法,也就是说纵向解决问题 的办法行不通了,那么横向增加服务器的数量呢?
这时候集群的概念产生了,单个服务器解 决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上,将负载分发到不同的服务器,也就是我们 所说的负载均衡 将服务器接收到的请求按照规则分发的过程,称为负载均衡。

2)Nginx支持的负载均衡算法

Nginx支持的负载均衡调度算法方式如下:

  1. 轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
  2. weight轮询(常用,具有HA功效!):接收到的请求按照权重分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,Nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。
    这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。
  3. ip_hash(常用):每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。
  4. fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是Nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块。
  5. url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在Nginx作为静态服务器的情况下提高缓存效率。同样要注意Nginx默认不支持这种调度算法,要使用的话需要安装Nginx的hash软件包。

轮询算法的测试示例

① 创建两个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分次提供了服务
Nginx入门_第8张图片
Nginx入门_第9张图片

weight

只需要修改配置文件
在路由后添加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;
    }

ip_hash

只需在配置文件的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;
    }

你可能感兴趣的:(nginx,分布式,nginx)