Nginx

Nginx基本概念

nginx是什么。做什么事情

  • nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,转为性能优化而生
  • 占有内存少、并发能力强
  • 网站用户有:百度、京东、新浪、网页、腾讯、淘宝
  • 可以支持高达50000个并发连接

反向代理

  • 正向代理

    • 如果说把局域网的Internet想象成一个巨大的资源库,则局域网中的客户端要访问internet,则需要通过代理服务器来访问,这种带代理服务器就称为正向代理
    • 简单的说就是通过代理服务器去访问需要访问的网址
    • 在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问
  • 反向代理
    • 其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器后去数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器的地址,隐藏了真是服务器的IP地址

负载均衡

  • 客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕之后,在将结果返回给客户端
  • 解决单个服务器解决不了的问题,改变单一服务器,增加服务器数量,然后将请求分发到各个服务器上,将原先请求集中到单个的服务器上的情况分发到多台服务器上

动静分离

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

Nginx 安装、常用命令和配置文件

在linux 系统中安装Nginx

  • 进入nginx官网下载 https://nginx.org/
  • nginx相关素材(依赖)
    • 安装pcre依赖

      • 把安装文件放在linux系统中
      • 解压压缩文件 tar -xvf +文件名
      • 进入解压之后目录,执行./configure
      • 使用 make&&make install 编译并安装
      • 查看pcre版本号:pcre-config --version
    • 安装openssl
    • 安装zlib
      • yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
    • 安装nginx
      • 把nginx安装文件放到linux系统
      • 解压压缩文件
      • 进入解压目录后 执行./congigure
      • make && make install
  • 安装成功之后,在user多出来一个文件夹local/nginx,sbin里边有启动脚本
  • firewall -cmd --list-all
  • 设置开放的端口号:
    • firewall-cmd --add-service=http -permanent
    • sudo firewall-cmd --add-port=80/tcp --permanent
  • 重启防火墙:firewall-cmd --reload

Nginx常用命令

  • 使用nginx操作命令前提条件:必须进入nginx目录
  • 查看nginx版本号
    • ./nginx -v
  • 启动nginx
    • ./nginx
  • 关闭nginx
    • ./nginx -s stop
  • 重新加载nginx(重新加载nginx.conf配置文件)
    • ./nginx -s reload

Nginx配置文件

  • 配置文件 nginx/conf
  • 配置文件组成(三部分)
    • 全局块:从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令

      • eg:worker_processes 1; 值越大,可支持的并发处理量也越多。依赖于硬件设备的支持
    • events块:主要影响nginx服务器与用户网络的连接
      • eg:worker_processes 1024; 支持最大连接数
    • http块:配置最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
      • 需要注意:http块也可以包括http全局块、server块

Nginx配置实例1-反向代理

  • 实现效果

    • 打开浏览器,在浏览器地址栏输入地址www.123.com 跳转linux系统Tomcat主页面中
  • 准备工作

    • 在linux系统安装tomcat,使用默认端口8080

      • 在Tomcat 压缩包放入linux中,解压
      • 进入Tomcat的bin目录中, ./startup.sh启动Tomcat服务器
    • 对外开放访问端口、重启防火墙
      • sudo firewall-cmd --add-port=8080/tcp --permanent
      • firewall-cmd --reload
    • 在Windows访问linux中Tomcat主页面
  • 具体步骤

    • 在Windows系统的host文件进行域名和ip对应的配置(让他求求www.123.com这个域名时直接访问nginx代理服务器)

      • 在host中添加内容:ip地址+访问路径
    • 在nginx中进行请求转发的配置

      • server_name:配置ip地址

      • proxy_pass http://127.0.0.1:8080 转发路径

      • 两个的话:

        location ~/edu/{proxy_pass http://127.0.0.1:8080
        }location ~/vod/{proxy_pass http://127.0.0.1:8081
        }
        
    • 重启nginx测试

Nginx 配置实例-2负载均衡

  • 实现效果

    • 浏览器地址栏输入地址 http://192.168.17.128/edu/a.html 实现均衡效果,平均8080和8081端口中
  • 配置(在http块中添加)

    upstream myserver{server 192.168.17.129:8080;server 192.168.17.129:8081;
    }
    server{listen 80;server_name 192.168.17.129location/{proxy_pass http:myserver}
    }
    
  • nginx分配服务器策略

    • 轮询(默认)

      • 每个请求按时间顺序逐一分配到不同的服务器中,如果服务器down掉了,能自动剔除
    • weight
      • weight代表权重,默认为1,权重越高被分配的客户端越多
    • ip_hash
      • 每个请求按照访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session问题
    • fair(第三方)
      • 按后端服务器的响应时间来分配请求,响应时间短的优先分配

Nginx配置实例3-动静分离

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

    • 一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;。
    • 另外一种方法就是动态跟静态文件混合在-起发布,通过nginx来分开。。
    • 通过location 指定不同的后缀名实现不同的请求转发。通过expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体Expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。( 如果经常更新的文件,不建议使用Expires来缓存),我这里设置3d,表示在这3天之内访问这个URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码200。。

Nginx配置高可用集群

  • 什么是nginx高可用

    • Tomcat 和nginx都可能会宕机 如果tomcat宕机的话nginx会自动剔除,但是nginx宕机怎么办? 高可用就是解决这个问题的
  • 准备工作
    • 需要两台nginx服务器
    • 需要keepalived(需要安装的)
      • yum install keeplived -y
    • 需要虚拟ip

Nginx原理

  • master和 worker
  • worker 怎么进行工作的
    • master接收到请求后worker采用争抢机制,抢到后利用反向代理发送Tomcat
  • 一个master和多个worker
    • 可以使用nginx -s reload 热部署(不用重新不熟直接重新加载配置文件),利于nginx进行热部署操作
    • 对于每个worker来说都是互相独立的进程,不需要加锁,所以省掉了锁带来的开销
  • 设置多少worker是最合适的
    • Nginx同redis类似都采用了io多路复用机制,Windows无法发挥io多路复用机制
    • worker数和服务器的cpu数目相等为最适宜的
  • 连接数 worker_connection
    • 发送一个请求,占用了worker的几个连接数?

      • 答案:2个或者4个(静态资源2个动态4个)
    • nginx有一个master,有四个worker,每个worker支持最大的连接数据1024,支持最大并发数是多少?
      • 答案:worker支持最大连接数4*1024 除以2/4
      • 解析:普通的静态问问最大并发数是:worker_connectionsworker_processes/2,而如果是HTTP作为反向代理来说,最大并发数量应该是worker_connectionsworker_processes/4

Nginx基本知识及入门使用相关推荐

  1. Linux的slab和nginx的区别,Nginx核心知识100讲》nginx Slab管理器

    极客专栏<Nginx核心知识100讲>38小节的笔记 nginx 不同的worker之间需要共享信息的时候,只能通过共享内存.共享内存会使用链表,红黑树这样的数据结构.但是每个红黑树上有很 ...

  2. nginx学习笔记-01nginx入门,环境搭建,常见命令

    nginx学习笔记-01nginx入门,环境搭建,常见命令 文章目录 nginx学习笔记-01nginx入门,环境搭建,常见命令 1.nginx的基本概念 2.nginx的安装,常用命令和配置文件 3 ...

  3. [学习记录] macOS下的Nginx安装 Nginx基本知识

    [学习记录] macOS下的Nginx安装 && Nginx基本知识 一. 安装相关 1. 安装:直接通过brew安装即可 2. 启动: 3. 成功运行判断: 4. 改端口号:由于80 ...

  4. 知识图谱入门2-2:用户输入->知识库的查询语句

    注:欢迎关注datawhale:https://datawhale.club/ 系列: 知识图谱入门一:知识图谱介绍 知识图谱入门2-1:实践--基于医疗知识图谱的问答系统 知识图谱入门2-2:用户输 ...

  5. 知识图谱入门2-1:实践——基于医疗知识图谱的问答系统

    注:欢迎关注datawhale:https://datawhale.club/ 系列: 知识图谱入门一:知识图谱介绍 知识图谱入门2-1:实践--基于医疗知识图谱的问答系统 知识图谱入门2-2:用户输 ...

  6. 知识图谱入门一:知识图谱介绍

    知识图谱入门一: 一.知识图谱简介 1.1 引言 1.2 什么是知识图谱呢? 1.2.1 什么是图(Graph)呢? 1.2.2 什么是 Schema 呢? 1.3 知识图谱的价值在哪呢? 二.怎么构 ...

  7. 知识图谱入门学习笔记(二)-知识表示

    目录 1 知识表示的概念 1.1 知识表示方法 1.2 知识表示的分类观点 1.3 知识表示的发展 2.1 语义网络 2.2 产生式系统 2.3 框架系统(Frame Systems) 2.4概念图( ...

  8. 知识图谱入门 【九】- 知识问答

    知识图谱入门 [一]- 认识图谱技术 知识图谱入门 [二]- 知识表示与知识建模 知识图谱入门 [三]- 知识抽取 知识图谱入门 [四]- 知识挖掘 知识图谱入门 [五]- 知识存储 知识图谱入门 [ ...

  9. 计算机打字工作内容,计算机基础知识打字入门

    <计算机基础知识打字入门>由会员分享,可在线阅读,更多相关<计算机基础知识打字入门(1页珍藏版)>请在人人文库网上搜索. 1.计算机基础打字入门对于初学者而言,其实应该把打字作 ...

最新文章

  1. python json.loads()中文问题-解决Python下json.loads()中文字符出错的问题
  2. MyEclipse中的web项目之前有个感叹号
  3. 关于rc.local启动程序
  4. 共享一PYTHON 相关应用领域的介绍资料
  5. Java多线程之Synchronized和Lock的区别
  6. 1-jdk的安装与配置
  7. oracle数据库连接名是什么,连接到Oracle数据库的几种命名方式
  8. 初始JAVA--约定俗成的命名规则
  9. Qt 小技术总结-持续更新
  10. python之虚拟聊天室服务器详解
  11. unity2018设置雾在哪_【zSpace实操】Unity2018发布设置
  12. 【漏扫工具】AWVS12使用介绍
  13. 峰值信噪比和结构相似性
  14. MTK 平台屏蔽 factory mode
  15. Java黑皮书编程练习题6.08(摄氏度和华氏度之间的转换)
  16. python聊天机器人_用 Python 实现聊天机器人
  17. 当当网1000本同类别图书价格对比:matplotlib基本使用,plot-线段,bar-条形图,pie-饼图
  18. sqlalchemy 系列教程五-Session和scopedsession
  19. Docker夺命连环15问,你能坚持第几问?
  20. 大话设计模型 Task03:工厂、制造、观察

热门文章

  1. jquery 源码分析十一 - Sizzle
  2. anacnda软件打不开解决方法
  3. Android 高仿支付宝二维码扫描动画实现 3分钟学会 人脸识别扫描线
  4. 2022小美赛(认证杯)数学建模原创选题建议及D题初步思路来啦!
  5. 埃及分数 ← IDA*
  6. C++ 函数模板作为类模板的成员函数
  7. 机器学习算法工程师面试总结
  8. JAVA:实现Knuth-Morris-Pratt算法(附完整源码)
  9. CountDownLatch并发测试
  10. 爱奇艺er在家办公的第三周,想见你!