• nginx介绍1


    1.1 nginx 是什么?

    是一个高性能的web服务器和反向代理服务器

    http://www.nginx.cn/
    nginx中文手册

    1.2 nginx的优点

    1 支持高并发:能支持几万并发连接(特别是静态小文件业务环境)

    2 资源消耗少: 在三万并发连接下,开启10个nginx线程消耗的内存不到200MB

    3 可以做HTTP反向代理及加速缓存、既负载均衡功能、内置对RS节点服务器健康检查功能、这相当于Haproxy软件或LVS的功能

    4 具备squid 等专业缓存软件等的缓存功能

    5 支持异步网络I/O事件横行epoll(linux2.6+)

    1.3 nginx的应用场景

    Nginx作为Web服务器的主要应用场景:

       1)使用Nginx运行HTML、JS、CSS、小图片等静态数据(此功能类似lighttpd软件)。

       2)Nginx结合FastCGI运行PHP等动态程序(例如使用fastcgi_pass方式)。

       3)Nginx结合tomcat/resin等支持Java动态程序(常用proxy_pass方式)。

    1.4 正向代理、反向代理、负载均衡

    正向代理 由内向外 代替局域网内pc,请求外部应用服务

    反向代理 由外向内 代替外部的用户 请求内部的应用服务器

    负载均衡 转发给内部的web服务器

    1.5 为什么Nginx总体性能比Apache高?

    Nginx使用最新的epoll(Linux2.6内核)和kqueue(freebsd)异步网络I/O模型,

    而Apache则使用的是传统的select模型。

    目前Linux下能够承受高并发访问的Squid、Memcached软件都采用的是epoll模型

    第一个比喻:

     

    假设你在大学读书,住的宿舍楼有很多房间,你的朋友要来找你。select版宿管大妈就会带着你的朋友到各房间挨个去找,直到找到你为止。而epoll版宿管大妈会先记下每位入住同学的房间号,你的朋友来找你时,只需告诉你的朋友你住在哪个房间即可,不用亲自带着你的朋友满宿舍楼找人了。如果同时来了100个人,都要找自己住这栋楼的同学,select版和epoll版宿管大妈,谁的效率更高,就很明显了。

     

    第二个比喻:

     

    select的调用复杂度是线性的,即O(n)。举个例子,一个保姆照看照看一群孩子,如果把孩子是否需要尿尿比作网络I/O事件,select的作用就好比这个保姆挨个询问每个孩子"你要尿尿吗?”如果孩子回答是,保姆则把孩子领出来放到另外一个地方。当所有孩子询问完之后,保姆领着这些要尿尿的孩子去上厕所(处理网络I/O事件).在epoll机制下,保姆不再需要挨个询问每个孩子是否需要尿尿。取而代之的是,如果孩子需要尿尿,他就自己主动站到事先约定好的地方,而保姆的职责就是查看事先约定好的地方是否有孩子。如果有小孩,则领着孩子去上厕所(网络事件处理)。因此,epoll的这种机制,能够高效地处理成千上万的并发连接,并且性能不会随着连接数増加而下降太多。

    1.5.1 IO的介绍

    IO 简单了解就是计算机的读写

    IO的类型(关注消息通知机制)

    同步IO

    调用方向被调用方发起请求 被调用方接受请求时不立即返回消息 但一旦返回 则返回最终结果

    异步IO

    调用方向被调用方发起请求 被调用方接收到请求后返回确认信息,但不是最终结果; 请求处理完后,通过通知机制通知调用者

    IO模型的介绍

    比如cat 查看一个数据由进程通知内核 内核将数据从磁盘加载至内核内存 内核空间将数据cp到进程内存。此时IO过程分为两步, ①数据从磁盘加载至内核内存 ② 从内核内存cp一份至进程内存

    阻塞IO : 进程在IO操作中 为挂起状态,进入不可中断睡眠状态 既阻塞IO

    非阻塞IO:进程在IO操作①中 可执行其他操作 但是需要不断查看内核是否操作成功,既忙等待状态,随后进入进入IO②操作中,又为阻塞状态

    多路复用IO:进程在IO操作中,加入select机制 通过select 同时处理多个IO 但是有上限1024 当并发超过1024后,又为阻塞状态

    事件驱动式IO: 加入通知机制 通知机制分为水平触发(多次通知),边缘触发(只通知一次)。进程在IO操作中,内核将数据加载至内核内存后,就通知进程。 

    异步IO:加入select机制 通知机制(边缘触发) 并且是内核将IO操作完成后 数据已经在进程内存了 再通知进程

    1.6 nginx的安装

    linux系统安装软件方法:

    1)yum install nginx -y(rpm包,自动解决所有依赖软件)

    简单,没法定制。

    2)rpm -ivh rpm包(自己解决所有依赖软件)

    简单,没法定制,没法自动解决所有依赖软件

    3)编译安装(c语言)

    可以定制,编译过程复杂,时间长。

    ./configure 配置

    make 编译

    make install 安装

    4)利用源码制作符合企业需求的rpm软件包,放到yum仓库里,最后yum安装。

    简单,可以随意定制。

    rpm包定制

    http://blog.oldboyedu.com/autodeploy-rpm/

    yum仓库搭建

    http://blog.oldboyedu.com/autodeploy-yum/

    mkdir /home/oldboy/tools

    cd /home/oldboy/tools

    wget http://nginx.org/download/nginx-1.14.0.tar.gz

    tar xf nginx-1.14.0.tar.gz

    cd nginx-1.14.0

    ====================================

    useradd -s /sbin/nologin www -M

    yum install pcre pcre-devel -y

    yum install openssl openssl-devel  -y

    ====================================

    ./configure  --user=www --group=www --prefix=/application/nginx-1.14.0/ --with-http_stub_status_module  --with-http_ssl_module --with-pcre

    make

    make istall

    ln -s /application/nginx-1.14.0/ /application/nginx

    echo $? 返回0代表步骤正确。

    验证:

    [root@web01 nginx-1.14.0]# ls /application/nginx/

    conf  html  logs  sbin

    [root@web01 nginx-1.14.0]# /application/nginx/sbin/nginx

    [root@web01 nginx-1.14.0]# lsof -i :80

    COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

    nginx   8898 root    6u  IPv4  23954      0t0  TCP *:http (LISTEN)

    nginx   8899  www    6u  IPv4  23954      0t0  TCP *:http (LISTEN)

    [root@web01 nginx-1.14.0]# wget 10.0.0.7

    --2018-06-22 12:36:30--  http://10.0.0.7/

    Connecting to 10.0.0.7:80... connected.

    HTTP request sent, awaiting response... 200 OK

    Length: 612 [text/html]

    Saving to: “index.html”

    OVER.

    --prefix=PATH  路径

    --user=USER    用户

    --group=GROUP  组

    --with-pcre    伪静态

    --with-http_stub_status_module 状态

    --with-http_ssl_module      加密 443

  • 相关阅读:
    "error while loading shared libraries: xxx.so.x" 错误的原因和解决办法 java程序员
    Android巴士转发 java程序员
    好记性不如烂笔头之 ——CP命令 java程序员
    linux之移植内核linux2.6.32psp03.00.01.06 编译出错 java程序员
    eoeAndroid社区转发 java程序员
    id 与 class的区别
    ASP+ACCESS转成ASP+SQL程序应如何修改
    怎么样才能让层显示在FLASH之上呢
    用Javascript作消息提示框(类似于QQ用户上线的消息提示)
    改善用户体验之Alert提示效果
  • 原文地址:https://www.cnblogs.com/koushuige/p/9215345.html
Copyright © 2020-2023  润新知