【Nginx 学习笔记1 —— 入门和使用】

2,074 阅读8分钟
  1. nginx 基本概念
    1. 是什么,做什么
    2. 反向代理
    3. 负载均衡
    4. 动静分离
  2. nginx 软件安装、命令、配置文件
    1. 在linux 系统安装nginx
    2. nginx 常用命令
    3. nginx配置文件
  3. nginx 配置实例
    1. 反向代理
    2. 负载均衡
    3. 动静分离
    4. 配置高可用集群,处理高并发
  4. 原理

简介概念

​ Nginx 是一个高性能的HTTP 和反向代理的Web服务器。特点:占用内存少,并发能力强。

nginx做为HTTP服务器,有以下几项基本特性:

  • 处理静态文件,索引文件以及自动索引;打开文件描述符缓冲.
  • 无缓存的反向代理加速,简单的负载均衡和容错.
  • FastCGI,简单的负载均衡和容错.
  • 模块化的结构。包括gzipping, byte ranges, chunked responses,以及 SSI-filter等filter。如果由FastCGI或其它代理服务器处理单页中存在的多个SSI,则这项处理可以并行运行,而不需要相互等待。
  • 支持SSL 和 TLSSNI.
  • Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率 。它支持内核Poll模型,能经受高负载的考验,有报告表明能支持高达 50,000个并发连接数。

Nginx支持热部署。它的启动特别容易, 并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下,对软件版本进行进行升级。

反向代理

说反向代理,那就得先说说正向代理,nginx也是可以做正向代理提供上网功能的。

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

就是租房中介,比如我们要访问谷歌,需要翻墙,那可能要走香港的服务器或者国外,那这个服务器就是在做正向代理。

  • 反向代理:

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率

就是二手房东可能是他弟弟,房东的弟弟与你交互租房事理,你以为他就是房东,其实真正的房东是他哥,但你并不知道。

  • 区别:大概就是,正向你是知道你要访问目标服务器,但访问不到,自己配置国外服务器去访问,此时这个代理是你的代理,在帮你访问。而反向就是,你以为你访问的就是目标服务器,但他其实只是他的代理,你并不知道,这个代理是服务器的代理,掩藏真实的目标服务器,让你以为访问的就算目标服务器。

负载均衡

​ 负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

应用场景:在当业务系统服务器无法支撑当前的业务量时,用户可以选择更高性能的服务器。但更为合理的做法是通过在既有业务服务器基础上,增量的方式增加相同功能的服务器,将计算任务分摊到后台多台较低配置的服务器处理,每台服务器都可以响应服务请求。实现合理安排客户请求并加快了请求相应速度,来提高用户体验。而用户仅感受到是一台高性能服务器在提供服务。

大概:客户端请求,到反向代理服务器,反向代理服务器通过一定算法平均分配给服务器集群的各个服务器。

动静分离

【转载】java前后端 动静分离,JavaWeb项目为什么我们要放弃jsp?

​ 为了加快网站的解析速度,可以把动态页面也静态页面分配给不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。如下,也可以把静态资源直接放在nginx里

Nginx 的安装

他需要一些依赖,建议就这么按顺序装下来。

  1. 安装 pcre(Perl Compatible Regular Expressions) Perl库,包括 perl 兼容的正则表达式库

    yum install -y pcre pcre-devel 安装
    pcre-config --version 查看版本号
    
  2. 安装 zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip

    yum install -y zlib zlib-devel
    
  3. 安装 OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上

    yum install -y openssl openssl-devel
    
  4. 安装 Nginx,并解压

    wget http://nginx.org/download/nginx-1.17.5.tar.gz
    tar -xzvf nginx-1.17.5.tar.gz
    
  5. 配置

    1. 进入解压文件目录

      cd nginx-1.17.5
      
    2. 查看自己需要得配置,建议看看官网的参数说明根据你需要的情景使用配置

      ./configure  --help  
      
    3. 我们只设置安装目录,其他使用默认

      ./configure --prefix=/server/nginx
      也就是说我们把nginx安装在/server/下了,默认是/usr/local/
      
    4. 出现这个证明配置成功

      Configuration summary
        + using system PCRE library
        + OpenSSL library is not used
        + using system zlib library
      
        nginx path prefix: "/server/nginx"
        nginx binary file: "/server/nginx/sbin/nginx"
        nginx modules path: "/server/nginx/modules"
        nginx configuration prefix: "/server/nginx/conf"
        nginx configuration file: "/server/nginx/conf/nginx.conf"
        nginx pid file: "/server/nginx/logs/nginx.pid"
        nginx error log file: "/server/nginx/logs/error.log"
        nginx http access log file: "/server/nginx/logs/access.log"
        nginx http client request body temporary files: "client_body_temp"
        nginx http proxy temporary files: "proxy_temp"
        nginx http fastcgi temporary files: "fastcgi_temp"
        nginx http uwsgi temporary files: "uwsgi_temp"
        nginx http scgi temporary files: "scgi_temp"
      
  6. 编译和安装

    make && make install
    显示这个表示成功
    cp conf/nginx.conf '/server/nginx/conf/nginx.conf.default'
    test -d '/server/nginx/logs' \
    	|| mkdir -p '/server/nginx/logs'
    test -d '/server/nginx/logs' \
    	|| mkdir -p '/server/nginx/logs'
    test -d '/server/nginx/html' \
    	|| cp -R html '/server/nginx'
    test -d '/server/nginx/logs' \
    	|| mkdir -p '/server/nginx/logs'
    make[1]: Leaving directory `/opt/nginx-1.17.5'
    
    
  7. 测试

    cd /server/nginx/sbin    //这个是配置安装包时候的目录
    ./nginx  //启动
    
    
  8. 访问前得开放防火墙

    (1)、查看防火墙对外开放的端口

    firewall-cmd --zone=public --list-ports
    
    

    (2)、开启 web 端口

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

    (3)、重启 firewall

    firewall-cmd --reload
    
    

    买的服务器的话,得创建一个80端口得安全组规则。

  9. ip访问,http://ip 端口80可以不写,http默认80,显示如下成功。

常用命令

使用命令必须在nignx 的 /nginx/sbin 下才能使用

./nginx -v // 查看版本

./nginx // 启动

./nginx -s stop // 停止,直接停止

./nginx -s quit // 好好停止,处理完信息在停止,关闭服务

./nginx -s reload // 重新加载(修改配置文件后)

配置文件

在 /nginx/conf/nginx.conf

nginx 的配置文件由三部分组成:全局块、events 块、http 块。

  1. 全局块

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

worker_processes 1;

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

  1. events 块

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

events { worker_connections 1024; }

表示每个 work process 支持的最大连接数为 1024。

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

  1. 第三部分:http 块

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

(1)、http 全局块

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

(2)、server 块

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

每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。而每个 server 块也分为全局 server 块,以及可以同时包含多个 location 块。

①、全局 server 块:最常见的配置是本虚拟机主机的监听配置和本虚拟机主机的名称或 IP 配置。

②、location 块: 一个 server 块可以配置多个 location 块。这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如前面/uri_string)进行匹配,对待定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。