IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Nginx笔记 -> 正文阅读

[系统运维]Nginx笔记

1.nginx概述

  • nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
  • 其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
  • nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

2.nginx作为web服务器

  • nginx可以作为静态页面的web服务器,同时还支持CGI协议的动态语言,比如perl、php等。但是不支持Java,Java程序只能通过与tomcat配合完成。nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。

3.nginx安装

  • 安装nginx之前需要安装一些nginx需要的环境

    1. 安装gcc环境

      yum install -y gcc-c++
      
    2. 安装PCRE

      yum install -y pcre pcre-devel
      
    3. 安装zlib

      yum install -y zlib zlib-devel
      
    4. 安装openssl

      yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel
      
  • 下载nginx:http://nginx.org/en/download.html

    官网提供三种版本:

    • Mainline version:Mainline是nginx目前主力在做的版本,可以说是开发版
    • Stable version:最新稳定版,生产环境上建议使用的版本
    • Legacy versions:遗留的老版本的稳定版

    NginxDownload

  • 将下载好的nginx压缩包放到Linux中,解压到/usr/local下面

    tar -xvf nginx-1.14.0.tar.gz -C /usr/local
    
  • 进入到解压后的文件夹中执行./configure

    ./configure
    
  • 然后执行以下命令进行安装

    make && make install
    
  • 等待安装完成之后查看/usr/local目录下是否有nginx文件夹

    nginx安装成功

  • 进入/usr/local/nginx/sbin然后执行nginx脚本文件

    ./nginx
    
  • 然后执行以下命令查看是否启动成功

    ps -ef|grep nginx
    

    Nginx启动成功

    如果出现如图的两个进程,则说明启动成功

  • 设置Linux开放的端口号(如果是虚拟机自己练习可以直接关闭防火墙)

    #查看开放的端口号
    firewall-cmd --list-all
    
    #设置开放的端口号
    firewall-cmd --add-port=80/tcp --permanent
    
    #重启防火墙
    firewall-cmd --reload
    
    #关闭防火墙
    systemctl stop firewalld
    
    #设置开机不启动防火墙
    systemctl disable firewalld
    
  • 然后浏览器访问nginx,地址就是Linux的IP地址

    Nginx访问

4.nginx常用Linux命令

  • 在介绍常用命令,我们需要先配置环境变量,不然所有的命令都必须进入/usr/local/nginx/sbin目录下操作

    vim /etc/profile
    
  • 添加以下内容

    export NGINX_HOME=/usr/local/nginx
    export PATH=$PATH:$NGINX_HOME/sbin
    

    Nginx环境变量配置

  • 查看nginx的版本号

    nginx -v
    
  • 启动nginx

    nginx
    
  • 停止nginx

    nginx -s stop
    
  • 重新加载Nginx(修改配置文件后不想重启,可以使用重新加载命令)

    nginx -s reload
    

5.nginx配置文件简单介绍

  • nginx配置文件位置:/usr/local/nginx/conf/nginx.conf

  • nginx配置文件组成(nginx配置文件由三部分组成):

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

      比如:worker_process工作进程数,通常设置为cpu的核心数或核心数的2倍。

    • events块:events块涉及的指令主要影响nginx服务器与用户的网络连接

      比如:worker_connections单个工作进程可以允许同时建立外部连接的数量,数字越大,能同时处理的连接越多。

    • http块:nginx配置中最频繁配置的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里,需要注意的是:http块包括http全局块和server块

6.nginx反向代理

  1. 正向代理

    • nginx不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。

    正向代理

  2. 反向代理

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

      在这里插入图片描述

7.nginx配置实例1——反向代理

  • 实现效果:打开浏览器,在浏览器地址栏中访问www.123.com,跳转到Linux系统中的tomcat主页面中

    反向代理实现效果

  • 准备工作

    • 在Linux系统安装tomcat,默认端口号8080

      1. 下载tomcat:https://mirrors.bfsu.edu.cn/apache/tomcat/tomcat-9/v9.0.44/bin/apache-tomcat-9.0.44.tar.gz

      2. 将压缩包放入Linux中,并解压

        tar -xvf apache-tomcat-9.0.44.tar.gz
        
      3. 进入解压后的目录中的bin目录,执行startup.sh脚本文件

        ./startup.sh
        
      4. 通过浏览器访问:IP地址:8080,出现下面图片中的页面就说明tomcat启动成功

        tomcat首页

      5. 如果访问失败可能是防火墙问题,也可能是Java环境问题,防火墙问题按照nginx安装时候的解决,可以开放8080端口或者关闭防火墙,Java环境问题参考另一篇博客:博客链接

  • 具体操作步骤

    1. 在windows系统的hosts文件进行域名和IP对应关系的配置

      hosts文件路径
      在这里插入图片描述

      修改完后在浏览器访问www.123.com:8080

      域名访问tomcat

    2. 修改Nginx配置,达到访问www.123.com可以访问到tomcat页面

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

      反向代理nginx配置

    3. 然后启动nginx,浏览器默认80端口访问www.123.com
      直接访问域名

8.nginx配置实例2——反向代理

  • 实现效果:使用nginx反向代理,根据访问的路径跳转到不同端口的服务中,访问http://127.0.0.1:9001/edu/直接跳转到127.0.0.1:8080,访问http://127.0.0.1:9001/vod/直接跳转到127.0.0.1:8081

  • 准备工作

    1. 准备两个tomcat服务器,一个默认8080端口启动,一个进入conf目录修改server.xml文件,8081端口启动

      在这里插入图片描述
      在这里插入图片描述

    2. 分别在两个tomcat下的webapps目录中创建对应的页面

      • tomcat8080下的webapps:

        mkdir edu
        cd edu
        vim a.html
        

        写入以下内容,保存退出

        tomcat8080页面

      • tomcat8081下的webapps:

        mkdir vod
        cd vod
        vim a.html
        

        写入以下内容,保存退出

        在这里插入图片描述

    3. 启动tomcat,使用命令查看启动的tomcat,可以看到成功启动了两个tomcat

      ps -ef|grep tomcat
      

      tomcat启动成功

  • nginx配置

    1. 修改nginx配置文件

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

      在这里插入图片描述

      location后的表达式规则:

      符号含义
      == 开头表示精确匹配
      ^~^~开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)
      ~~ 开头表示区分大小写的正则匹配
      ~*~* 开头表示不区分大小写的正则匹配
      !和!*!和!*分别为区分大小写不匹配及不区分大小写不匹配的正则
      /用户所使用的代理(一般为浏览器)
      $http_x_forwarded_for可以记录客户端IP,通过代理服务器来记录客户端的ip地址
      $http_referer可以记录用户是从哪个链接访问过来的
    2. 启动nginx

      nginx
      
    3. 浏览器访问查看效果

      在这里插入图片描述

      在这里插入图片描述

      访问不了可能是nginx的location配置有错或tomcat中页面存放位置问题或防火墙未关闭或端口未开放,防火墙和端口开放参考上面的配置

9.负载均衡

  • 客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端。

  • 这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的,成本也低。但是随着信息数量的不断增长,访问量和数据量的飞速增长,以及系统业务的复杂度增加,这种架构会造成服务器相应客户端的请求日益缓慢,并发量特别大的时候,还容易造成服务器直接崩溃。很明显这是由于服务器性能的瓶颈造成的问题,那么如何解决这种情况呢?

  • 我们首先想到的是升级服务器的配置,比如提高CPU执行效率,加大内存等提高机器的物理性能来解决此问题,但是我们知道摩尔定律的日益失效,硬件的性能提升已经不能满足日益提升的需求了。最明显的一个例子,天猫双十一当天,某个热销商品的瞬时访问量是极其庞大的,那么类似上面的系统架构,将机器都增加到现有的顶级物理配置,都是不能够满足需求的。那么怎么办呢?

  • 上面的分析我们去掉了增加服务器物理配置来解决问题的方法,也就是说纵向解决问题的办法行不通了,那么横向增加服务器的数量呢?这时候集群的概念就产生了,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡

负载均衡

10.nginx配置实例3——负载均衡

  • 实现效果:浏览器访问http://192.168.23.129/edu/a.html,实现负载均衡效果,将请求平均分配到8080和8081端口中

  • 准备工作

    1. 准备两台tomcat,端口分别为8080和8081,这个上面的操作已经准备好

    2. 在两台tomcat的webapps目录中都创建要访问的页面,上面已经创建好8080的,现在只需要创建8081下的,进入8081下的webapps目录

      mkdir edu
      cd edu
      #如果没有操作配置实例2就按照实例2中的命令创建
      cp ../vod/a.html ./
      
    3. 启动tomcat,如果之前已经启动,则直接访问就可以,不需要重启

  • nginx配置

    1. 编辑nginx配置文件

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

      负载均衡nginx配置

    2. 保存退出后,启动或者重加载nginx

    3. 浏览器访问查看效果,这里遇到个问题,谷歌浏览器达不到预期效果,火狐浏览器可以达到,查看日志发现谷歌每一次访问的返回状态码都是304说明都是缓存,而火狐的每一次访问都是200,百度也没有查到缓存的问题怎么解决。

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

      1. 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

      2. weight(权重):默认为1,权重越高被分配的客户端越多

        负载均衡策略——权重

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

        在这里插入图片描述

      4. fair(第三方,需要下载第三方包):按后端服务器的响应时间来分配请求,响应时间短的优先分配

        fair

10.动静分离

  • 为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。

    在这里插入图片描述

11.nginx配置实例4——动静分离

  • 准备工作

    1. 在Linux系统根目录下创建data目录

      cd /
      mkdir data
      
    2. data目录中新建image目录和www目录

      cd data
      mkdir image
      mkdir www
      
    3. 在image目录下放入一张图片,www目录下放入一个网页文件

      image目录

      在这里插入图片描述

  • nginx具体配置

    1. 修改nginx.conf文件,在server块中加入以下内容

      location /www/ {
          root  /data/;
          index   index.html index.htm;
      }
      
      location /image/ {
          root  /data/;
          autoindex  on;
      }
      
    2. 启动nginx

      nginx
      
    3. 访问浏览器,查看效果

      动静分离效果1
      动静分离效果2
      动静分离效果2

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-01 14:51:53  更:2021-08-01 14:53:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 11:15:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计