知识点系列~ Nginx知识点

1·Nginx-概述

1.1介绍

Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx的网站有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。

官网:nginx news

1.2 下载和安装

注意:该安装均是在LINUX环境下安装的。

1.2.1 下载

在Nginx的官网的下载页面中(nginx: download),就展示了当前Nginx版本,并提供了下载的连接。 如下:

ps:我选择的是1.16.按需即可

1.2.2 安装

1). 安装依赖包

由于nginx是基于c语言开发的,所以需要安装c语言的编译环境,及正则表达式库等第三方依赖库。

yum -y install gcc pcre-devel zlib-devel openssl openssl-devel

2). 下载Nginx安装包

 yum install wget
wget https://nginx.org/download/nginx-1.16.1.tar.gz

wget :

wget命令用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。

执行完wget指令后,就会在当前所在目录看到下载下来的文件。

3). 解压nginx压缩包

tar -zxvf nginx-1.16.1.tar.gz

4). 配置Nginx编译环境

cd nginx-1.16.1
./configure --prefix=/usr/local/nginx 

说明:

--prefix 指定的目录,就是我们安装Nginx的目录。

 5). 编译&安装

make & make install

1.3 目录结构

我们可以用 tree指令,该指令可以将我们指定的目录以树状结构展示出来。如果没有这个指令,可以通过以下指令进行安装

yum install tree

 安装完Nginx后,我们可以切换到Nginx的安装目录(/usr/local/nginx),先来熟悉一下Nginx的目录结构,如下图:

重点目录和文件如下:

这个简单看下即可,后续有应用与讲解

2. Nginx-命令

2.1 常用命令

Nginx中,我们的二进制可执行文件(nginx)存放在sbin目录下,虽然只有一个可执行文件,但是我们可以通过该指令配合不同的参数达到更加强大的功能。接下来,我们就演示一下Nginx常见指令, 在执行下面的指令时,都需要在/usr/local/nginx/sbin/目录下执行

1). 查看版本

./nginx -v

2). 检查配置文件

修改了nginx.conf核心配置文件之后,在启动Nginx服务之前,可以先检查一下conf/nginx.conf文件配置的是否有错误,命令如下:

./nginx -t 

3). 启动  

./nginx

启动之后,我们可以通过ps -ef指令来查看nginx的进程是否存在。  

 ps -ef|grep nginx        可只查询nginx相关内容,避免无用信息

 

注意: nginx服务启动后,默认就会有两个进程。

解析:Nginx服务启动后默认会有两个进程,是因为Nginx采用了多进程的工作方式。具体来说,Nginx在启动时,会首先运行一个master进程,这个master进程充当整个进程组与用户的交互接口,并对进程进行监护。同时,master进程会管理多个worker进程,这些worker进程用来处理基本的网络事件。

因此,当你看到Nginx服务启动后默认有两个进程,其中一个通常是master进程,另一个则是worker进程。worker进程是真正处理客户端请求的进程,它们之间彼此独立工作,不共享任何资源,因此不需要加锁,从而避免了多线程的上下文切换和锁带来的开销。当一个worker进程异常退出时,master进程会监控到并自动重新启动新的worker进程,确保服务的持续运行。

启动之后,我们可以直接访问Nginx的80端口 http://192.168.200.200 (根据自己ip修改即可)

 

注意:

要想正常访问Nginx,需要关闭防火墙或开放指定端口号,执行的指令如下:

A. 关闭防火墙

systemctl stop firewalld

B. 开放80端口

firewall-cmd --add-port=80/tcp --permanent

firewall-cmd --reload

4). 停止

./nginx -s stop

停止之后,我们可以查看nginx的进程:  

5). 重新加载

当修改了Nginx配置文件后,需要重新加载才能生效,可以使用下面命令重新加载配置文件:

./nginx -s reload 

2.2 环境变量配置

由于原来使用nginx命令相对繁琐,故修改环境变量,使其全局可用,简化书写

通过vim编辑器,打开/etc/profile文件, 在PATH环境变量中增加nginx的sbin目录,如 下:

vim /etc/profile

修改完配置文件之后,需要执行 source /etc/profile 使文件生效。 接下来,我们就可以在任意目录下执行nginx的指令了。

  

3. Nginx-应用

 3.1 配置文件结构

nginx的配置文件(conf/nginx.conf)整体上分为三部分: 全局块、events块、http块。这三块的分别配置什么样的信息呢,看下表:

具体结构图如下:

 在全局块、events块以及http块中,我们经常配置的是http块。

全局块与events块 初学者不用接触

在http块中可以包含多个server块,每个server块可以配置多个location块。 

3.2 部署静态资源

3.2.1 介绍

Nginx可以作为静态web服务器来部署静态资源。这里所说的静态资源是指在服务端真实存在,并且能够直接展示的一些文件,比如常见的html页面、css文件、js文件、图片、视频等资源。

相对于Tomcat,Nginx处理静态资源的能力更加高效,所以在生产环境下,一般都会将静态资源部署到Nginx中。

部署原则:
    动静分离:
        动态请求的资源:eg:/api/login 不同的人请求的参数不一致,且响应不一定一样 Tomcat比较合适;
        静态:html css js img video等,Nginx适合处理请求资源; 

将静态资源部署到Nginx非常简单,只需要将文件复制到Nginx安装目录下的html目录中即可。  

server {
    listen 80;                #监听端口    
    server_name localhost;    #服务器名称
    location / {            #匹配客户端请求url
        root html;            #指定静态资源根目录
        index index.html;    #指定默认首页
    }

3.2.2 测试

1). 将静态资源上传到 /usr/local/nginx/html 目录

自己编写个简单html页面即可

 注意上传文件的权限问题,否则可能访问拒绝!

更改权限 chmod 777 hello.html

2). 启动nginx  

 3). 访问   

http://192.168.200.200 访问该地址,访问的是nginx的默认首页  

 http://192.168.200.200/hello.html  访问静态资源

 

4). 配置首页  

此处我们发现配置页面 index  还是默认首页

 如果我们需要将hello.html作为nginx的首页,可以修改location的index指令,配置为hello.html,如下:

配置完毕后,我们可以通过指令,来检查配置文件是否配置正确: nginx -t  

 配置文件修改了,我们需要重新加载一下,才可以生效:nginx -s reload

5). 访问  

http://192.168.200.200  

3.3 反向代理

3.3.1 概念介绍

1). 正向代理

正向代理服务器是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。

正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。

正向代理一般是在客户端设置代理服务器,通过代理服务器转发请求,最终访问到目标服务器

正向代理,对于客户端来说,是知道请求访问的服务节点;  

 

2). 反向代理

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源,反向代理服务器负责将请求转发给目标服务器。用户不需要知道目标服务器的地址,也无须在用户端作任何设定,对于用户来说,访问反向代理服务器是完全无感知的。

 

 

在nginx中,我们可以在nginx.conf中配置反向代理:

进入nginx.conf: vi nginx.conf

修改完配置文件需要重新加载 nginx -s reload

另外,开放82端口,需要在防火墙设置。

server {
    listen 82;
    server_name localhost;
    location / {
        proxy_pass http://192.168.188.131:8080;     #反向代理配置,将请求转发到指定服务
    }

 上述配置的含义为: 当我们访问 192.168.200.200 的 82 端口时,根据 Nginx 的反向代理配置,Nginx 会将请求转发到 http://192.168.188.131:8080 对应的服务上

3.3.2 测试.

需求: 在192.168.188.131这台服务器中部署了java应用,运行端口为8080,并提供了一个可访问的链接 /hello。现在我们需要在访问nginx的82端口时,通过nginx将请求转发到192.168.188.131:8080的服务。  

1). 在192.168.188.131部署服务并启动  

 将jar包上传到服务器端,通过指令 java -jar helloworld-1.0-SNAPSHOT.jar 运行服务。

 ps:请自行打包jar包,可能会出现主清单配置错误。

2). 在192.168.200.200中的nginx.conf中配置反向代理  

进入nginx的安装目录,并编辑配置文件nginx.conf:  

cd /usr/local/nginx/conf/
vim nginx.conf 

在http块中,再添加一个server块虚拟主机的配置,监听82端口,并配置反向代理proxy_pass:  

 3). 检查配置文件,并重新加载

nginx -t
nginx -s reload 

4). 访问  

 

3.4 负载均衡

3.4.1 概念介绍

早期的网站流量和业务功能都比较简单,单台服务器就可以满足基本需求,但是随着互联网的发展,业务流量越来越大并且业务逻辑也越来越复杂,单台服务器的性能及单点故障问题就凸显出来了,因此需要多台服务器组成应用集群,进行性能的水平扩展以及避免单点故障出现。

应用集群:将同一应用部署到多台机器上,组成应用集群,接收负载均衡器分发的请求,进行业务处理并返回响应数据

负载均衡器:将用户请求根据对应的负载均衡算法分发到应用集群中的一台服务器进行处理

 

3.4.2 测试

1). 准备两个jar包,上传到192.168.200.201服务器上  

 ps:自己测试如果没有多余服务器,可以开启不同端口测试。在nginx.conf配置即可

 2). 运行上传上来的两个jar包,运行端口分别是 8080 , 8081

 

 3). 在nginx中配置负载均衡

打开nginx的配置文件nginx.conf并增加如下配置:  

#upstream 分流器 指令可以定义一组服务器
upstream targetserver{            #名字可以自行起
    server 192.168.200.201:8080;
    server 192.168.200.201:8081;
}

server {
    listen       8080;
    server_name  localhost;
    location / {
        proxy_pass http://targetserver;
    }
}

 

4). 重新加载nginx配置文件,访问          nginx -s reload

测试时,我们直接访问nginx的8080端口(http://192.168.200.200:8080), 此时nginx会根据负载均衡策略,将请求转发到后面的两台服务器。

我们看到请求均衡的转发到了8080和8081,因为模式的负载均衡策略是轮询。  (有不同策略)

.4.3 负载均衡策略

名称说明特点
轮询默认方式轮流均衡访问服务节点
weight权重方式根据权重分发请求,权重大的分配到请求的概率大
ip_hash依据ip分配方式根据客户端请求的IP地址计算hash值, 根据hash值来分发请求, 同一个IP发起的请求, 会发转发到同一个服务器上
least_conn依据最少连接方式哪个服务器当前处理的连接少, 请求优先转发到这台服务器
url_hash依据url分配方式(第三方)根据客户端请求url的hash值,来分发请求, 同一个url请求, 会发转发到同一个服务器上
fair依据响应时间方式(第三方)优先把请求分发给处理请求时间短的服务器(强调响应速度)

权重的配置:  

#upstream指令可以定义一组服务器
upstream targetserver{    
    server 192.168.200.201:8080 weight=10;
    server 192.168.200.201:8081 weight=5;

在访问时,80要比81多承担一倍的访问量。

 

 

 

 

 

 

 

 

 

  • 47
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值