Nginx(简介)

1.Nginx入门

内容简介 :

1、Nginx简介

  1. 介绍Nginx的应用场景和具体可以做什么
  2. 介绍什么是反向代理
  3. 介绍什么是正向代理
  4. 介绍什么是动静分离

2、Nginx安装

3、Nginx的常用命令和配置文件


  1. 介绍Nginx启动,关闭,重新加载命令
  2. 介绍Nginx的配置文件

4、nginx配置实例-反向代理

5、nginx配置实例-负载均衡

6、nginx配置实例-动静分离

7、nginx原理

1.1 Nginx 简介

Nginx是一个HTTP服务器,擅长处理静态资源文件(html,css,js,img),并且处理高并发能力比较强(50000个),tomcat是web服务器, 可以处理几百个(500-600)而tomcat擅长处理动态资源 。 中国大陆使用 nginx 网站用户有:百度、京东、新浪、网 易、腾讯、淘宝等。

Nginx 官网: http://nginx.org/

在这里插入图片描述

1.2Nginx优势

和其他web服务器(tomcat, Apache)相比有以下几个有点 :

  • 高并发
  • 热部署
  • 低功耗
  • 可反向代理、负载均衡、处理静态资源文件

1.3 Nginx安装

1.3.1 安装nginx所需要的预处理环境
  • gcc

安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,需要安装 gcc:

yum install gcc-c++

  • PCRE

PCRE(Perl Compatible Regular Expressions)是一个 Perl 库,包括 perl 兼容的正则表达式库。 nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库。

yum install -y pcre pcre-devel

注:cre-devel 是使用 pcre 开发的一个二次开发库。nginx 也需要此库

  • zlib

zlib 库提供了很多种压缩和解压缩的方式,nginx 使用 zlib 对 http 包的内容进行 gzip,所以需要在 linux 上安装 zlib 库。

yum install -y zlib zlib-devel

  • openssl

OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。 nginx 不仅支持 http 协议,还支持 https(即在 ssl 协议上传输 http),所以需要在 linux 安装 openssl 库。

yum install -y openssl openssl-devel

1.3.2 安装nginx步骤
将 nginx 压缩包拷贝至 linux 服务器,解压 nginx 压缩包。
  1. 解压并进入nginx安装目录

tar -zxvf nginx-1.12.2.tar.gz -C /opt/install

cd nginx-1.12.2

  1. 生成makefile文件

./configure --help 查询详细参数(参考本教程附录部分:nginx 编译参数) 参数设置如下:提示先创建该目录:mkdir -p /var/temp/nginx

/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
  1. 编译并安装

make

make install

  1. 复制nginx命令为全局命令

将 nginx 命令复制为全局命令之后,就可以在任意地方使用了。

cp /usr/local/nginx/sbin/nginx /usr/local/bin/

  1. 在Windows上测试nginx

192.168.52.5 (虚拟机的IP)

  • 注意打开nginx的端口号
  
  
   
  
  
```java
查看开放的端口号
    Firewall-cmd --list-all
设置开放的的端口号
    firewall-cmd -add-port=80/tcp --permanent
重启防火墙
    Firewall-cmd -reload

```




1.4 Nginx常用命令

在cd /usr/local/nginx/sbin/ 目录下执行 :

  • 启动
./nginx
  • 停止

./nginx -s stop

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

  • 停止(2)

./nginx -s quit (推荐使用

此方式停止步骤是待Nginx进程处理任务完毕后进行停止

  • 重新加载命令
./nginx -s reload
  • 查看版本
./nginx -v
  • 查看进程
ps -ef | grep nginx

1.5 配置文件nginx.conf

  1. 全局块
    从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。

配置 :
Nginx(简介)教程

这是 Nginx 服务器并发处理服务的关键配置,worker\_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约。
  1. events块

配置 :
Nginx(简介)教程

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 work process 可以同时支持的最大连接数等。

上述例子就表示每个 work process 支持的最大连接数为 1024.

这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。

  1. http块

    这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。

    需要注意的是:http 块也可以包括http全局块、server 块

在这里插入图片描述

1 http 全局块

http全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

2 service 块

这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。

每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。

而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。

1、全局 server 块

最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。

2、location 块

一个 server 块可以配置多个 location 块。

这块的主要作用是基于 Nginx 服务器接收到的请求字符串

(例如 server\_name/uri-string),对虚拟主机名称(也可以是IP别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

2 Nginx虚拟主机

2.1 基于端口号的虚拟主机

  1. 复制一份server , 指定端口号为 :81
    server {
        listen       80;
        server_name  www.teacher.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

       location ~ /edu/ { 
            root html-1; #指定的是 nginx 安装目录下的某个文件夹的名字
            index index.html index.htm; 
       }
       
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
  1. 在nginx的安装目录下创建一个html-1文件夹,并设置index.html页面
  2. 重启nginx : ./nginx -s reload
  3. 防火墙释放81 端口号
  • firewall-cmd --add-port=81/tcp --permanent # 释放端口号
  • firewall-cmd --reload # 重新加载
  1. 在浏览器测试 :http://虚拟机 ip:80 , http:// 虚拟机 ip :81

2.2 基于域名的虚拟主机

  1. 配置nginx.conf 文件 ,指定不同的server的域名
    server {
        listen       80;
        server_name  www.tea.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

       location ~ /edu/ { 
            root html; #指定的是 nginx 安装目录下的某个文件夹的名字
            index index.html index.htm; 
       }
       
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    
    
    server {
        listen       80;
        server_name  www.stu.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
       
       location ~ /vod/ { 
            root html-1; #指定的是 nginx 安装目录下的某个文件夹的名字
            index index.html index.htm; 
       }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
  1. 重新加载nginx的配置文件
  2. 配置Windows 的C:\Windows\System32\drivers\etc 配置如下内容

Nginx(简介)教程

  1. 测试

3 Nginx配置实现

3.1 正向代理

Nginx不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。

正向代理:如果把局域网想象成一个巨大资源库,则局域网汇中的客户要访问Internet,则需要通过代理服务器来访问,这种情况称为正向代理.

简单理解:正向代理代理的是客户端。

在这里插入图片描述

3.2 反向代理

反向代理 : 其实客户端代理是无感知的,因为客户端不需要配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器 ,暴露的是代理服务器地址,隐藏真实的服务器地址的IP信息。

简单理解 : 反向代理代理的是服务器,可以帮助我们接收来自客户端发来的请求,帮助服务器请求转发,负载均衡等。

在这里插入图片描述

3.2.1反向代理 案例一

效果实现:使用nginx反向代理,访问www.teacher.com直接跳到192.168.52.4:8080

步骤一 :启动tomcat , 在浏览器输入192.168.52.4:8080 出现画面:

在这里插入图片描述

步骤二 : 修改本地的host (路径 :C:\Windows\System32\drivers\etc)

在这里插入图片描述

步骤三 : 修改nginx.conf 文件

在这里插入图片描述

步骤四 : 上传并重新加载 (比如位置 :cd /usr/local/nginx/sbin ./nginx -s reload)
3.2.2 反向代理案例二

目标效果 :

​ 使用nginx的反向代理,根据访问的路径跳转不同的端口的服务器

比如 :

http://www.teacher.com/edu/a.html 跳转端口号为8080

http://www.teacher.com/vod/a.html 跳转端口号为8081

在这里插入图片描述

步骤一 :准备tomcat

​ 准备两个tomcat,一个端口为8080,一个为8081,并准备好跳转页面

​ 注意修改 :

​ 1.修改第二个 tomcat 的三个端口号(8005、8080、8009)

​ 2.将/etc/profile 中的 tomcat 环境变量配置去掉,并刷新该文件、重启虚拟机

​ 3.在防火墙中放开新 tomcat 的访问端口号

步骤二 :修改nginx.conf 的配置文件

在这里插入图片描述

步骤三 :测试

​ 1 先在端口号为 8080的 tomcat 的 webapps目录里创建一个目录为 edu 的目录,在里面创 建a.html,写明 8080

2 再在端口号为 8081的 tomcat 的 webapps目录里创建一个目录为 vod 的目录,在里面创建a.html,写明 8081

3 测试 :

http://www.teacher.com/vod/a.html

http://www.teacher.com/edu/a.html

效果演示结果:

在这里插入图片描述

3.2.3 location 指令的说明

语法 :
Nginx(简介)教程

1、= 用于不含正则表达式,要求请求的字符集与uri严格匹配,若匹配成功就停止搜索,,继续向下进行处理该请求

2、~:用于表示 uri 包含正则表达式,并且区分大小写。

3、~ *:用于表示 uri 包含正则表达式,并且不区分大小写。

4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。

注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识

3.4 负载均衡

3.4.1 什么是负载均衡 :
将负载(访问请求)进行平衡,分摊到各个服务器进行执行。解决高性能,单个单点故障(高可用),扩展性(水平伸缩的)解决方案 。

操作步骤 :

步骤一 :准备两个 Tomcat,并在每个 tomcat 下的 ROOT 目录下分别添加有区分的 a.html

步骤二 :在 nginx.conf 中进行配置

在这里插入图片描述

步骤三 :测试 请求 192.168.52.4.80
3.4.2 nginx分配服务器策略
随着互联网信息的爆炸性增长,负载均衡(load balance)已经不再是一个很陌生的话题,顾名思义,负载均衡即是**将负载分摊到不同的服务单元,**既保证服务的可用性,又保证响应足够快,给用户很好的体验。快速增长的访问量和数据流量催生了各式各样的负载均衡产品,很多专业的负载均衡硬件提供了很好的功能,但却价格不菲,这使得负载均衡软件大受欢迎,nginx就是其中的一个,在linux下有Nginx、LVS、Haproxy等等服务可以提供负载均衡服务,而且Nginx提供了几种分配方式(策略):
3.4.2.1 轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

3.4.2.2weight

weight代表权,重默认为1,权重越高被分配的客户端越多

<!-- 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 -->    
upstream myserver {
        server 192.168.52.4:8080 weight=1;
        server 192.168.52.4:8081 weight=3;
    }
3.4.2.3 iphash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

理解 :用于用户第一次请求的服务器编号是002号,那么用户再次登录访问的还是002号服务器。

upstream myserver {
           ip_hash;
        server 192.168.52.4:8080;
        server 192.168.52.4:8081;
    }
3.4.2.4 fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配

upstream myserver {
        server 192.168.52.4:8080;
        server 192.168.52.4:8081;
        fair;
    }
3.4.2.5 其他参数
upstream myserver {
        server 192.168.52.4:8080 down;
        server 192.168.52.4:8081;
        server 192.168.52.4:8082 weight=3;
    }
1 : down 
    表示当前的server暂时不参与负载
2 :weight
    默认是1 ,weight越大,负载的权重越大
3 :其他所有的backup机器在down或者忙的时候, 请求backup机器。

3.5 动静分离

由于 nginx 擅长处理静态资源,而 tomcat 擅长处理动态资源,所以为了加快网站的解析速度,可以把动 态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。

在这里插入图片描述

Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx 处理静态页面,Tomcat处理动态页面。动静分离从目前实现角度来讲大致分为两种:

一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;

另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。

通过 location 指定不同的后缀名实现不同的请求转发。

通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。

具体 Expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。

此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用 Expires 来缓存),我这里设置 3d,表示在这 3 天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304,如果有修改,则直接从服务器重新下载,返回状态码 200。

步骤:

步骤一 :

​ 在tomcat的webapps的目录下index.jsp添加引用

在这里插入图片描述

步骤二 :

​ 在tomcat 的 /opt/install/tomcat7/webapps/ROOT (依照安装tomcat的位置而定)下面引入图片

步骤三 :

​ 在nginx.conf 的配置文件中配置信息 ,并在nginx的/sbin

Nginx(简介)教程
在这里插入图片描述

步骤四 :输入ip地址进行测试 结果如下

在这里插入图片描述
配置如下:再访问静态资源会访问,nginx下面的资源

在这里插入图片描述

标签: nginx, server, Nginx, 服务器, http, html, 简介

相关文章推荐

添加新评论,含*的栏目为必填