• nginx的5个特点


    nginx的5个特点(2017/11/16 转载)
    1.动静分离
    Nginx是一种轻量级,高性能,多进程的Web服务器,非常适合作为静态资源的服务器使用,而动态的访问操作可以使用稳定的Apache、Tomcat及IIS等来实现,
    这里就以Nginx作为代理服务器的同时,也使用其作为静态资源的服务器。
    静态资源通过绝对路径去访问,放在nginx服务器当中。
    动态资源通过url拼接字符串的方式去访问例如tomcat服务器
    2.负载均衡
    举个例子来说就是在配置三台nginx服务器,当在客户端访问nginx是刷新页面会出现三个不同的页面。
    (1)Nginx的upstream目前支持以下几种方式的分配
    1、轮询(默认)
    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
    2、weight
    指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
    2、ip_hash
    每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
    3、fair(第三方)
    按后端服务器的响应时间来分配请求,响应时间短的优先分配。
    4、url_hash(第三方)
    按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。



    (2)Session问题
    当我们确定一系列负载的服务器后,那我们的WEB站点会分布到这些服务器上。这个时候如果采用Test2 每一次请求随机访问任何一台服务器上,
    这样导致你访问A服务器后,下一次请求又突然转到B服务器上。这个时候与A服务器建立的Session,传到B站点服务器肯定是无法正常响应的。我们看一下常用的解决方案:

    Session或凭据缓存到独立的服务器
    Session或凭据保存数据库中
    nginx ip_hash 保持同一IP的请求都是指定到固定的一台服务器

    第一种缓存的方式比较理想,缓存的效率也比较高。但是每一台请求服务器都去访问Session会话服务器,那不是加载重了这台Session服务器的负担吗?

    第二种保存到数据库中,除了要控制Session的有效期,同时加重了数据库的负担,所以最终的转变为SQL Server 负载均衡,涉及读,写,过期,同步。

    第三种通过nginx ip_hash负载保持对同一服务器的会话,这种看起来最方便,最轻量。
    (3)文件上传下载

    如果实现了负载均衡,除了Session问题,我们还会碰到文件的上传下载问题。文件不可能上传不同的服务器上,这样会导致下载不到对应文件的问题。我们看一下下面的方案

    独立文件服务器
    文件压缩数据库

    两种方案都是常用的,我们来说一下文件压缩数据库,以前的方式都是将文件二进制压缩至关系型数据库,而现在NOSQL的流行,加上MongoDB处理文件又比较方便,
    所以文件压库又多了一种选择。毕竟文件服务器的效率和管理以及安全都不及数据库。
    3.反向代理
    反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,
    此时代理服务器对外就表现为一个服务器。
    通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。
    当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。
    4.单点故障
    某台节点服务器挂了,但是Nginx仍然会可能选中这个出故障的机器,然后就一直连接着是因为超时时间很长,具体多长不清楚,所以为了避免一直连接着,我们需要设置超时时间
    用Keepalived搭建双Nginx server集群,防止单点故障
    5.优化
    (1)高层的配置(nginx.conf)


    user www-data;
    pid /var/run/nginx.pid;
    worker_processes auto;
    worker_rlimit_nofile 100000;


    user和pid应该按默认设置 - 我们不会更改这些内容,因为更改与否没有什么不同。
    worker_processes 定义了nginx对外提供web服务时的worker进程数。最优值取决于许多因素,包括(但不限于)CPU核的数量、存储数据的硬盘数量及负载模式。
    不能确定的时候,将其设置为可用的CPU内核数将是一个好的开始(设置为“auto”将尝试自动检测它)。
    worker_rlimit_nofile 更改worker进程的最大打开文件数限制。如果没设置的话,这个值为操作系统的限制。设置后你的操作系统和Nginx可以处理比“ulimit -a”更多的文件,
    所以把这个值设高,这样nginx就不会有“too many open files”问题了。
    (2)Events模块
    events模块中包含Nginx中所有处理连接的设置。


    events {
    worker_connections 2048;
    multi_accept on;
    use epoll;
    }


    worker_connections 设置可由一个worker进程同时打开的最大连接数。如果设置了上面提到的worker_rlimit_nofile,我们可以将这个值设得很高。
    记住,最大客户数也由系统的可用socket连接数限制(~ 64K),所以设置不切实际的高没什么好处。
    multi_accept 告诉nginx收到一个新连接通知后接受尽可能多的连接。
    use 设置用于复用客户端线程的轮询方法。如果你使用Linux 2.6+,你应该使用epoll。如果你使用FreeBSD,你应该使用kqueue。
    (值得注意的是如果你不知道Nginx该使用哪种轮询方法的话,它会选择一个最适合你操作系统的)
    (3)HTTP 模块
    HTTP模块控制着Nginx http处理的所有核心特性。因为这里只有很少的配置,所以我们只节选配置的一小部分。所有这些设置都应该在http模块中,甚至你不会特别的注意到这段设置。


    http {
    server_tokens off;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    ...
    }


    server_tokens 并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的。
    sendfile 可以让sendfile()发挥作用。sendfile()可以在磁盘和TCP socket之间互相拷贝数据(或任意两个文件描述符)。Pre-sendfile是传送数据之前在用户空间申请数据缓冲区。
    之后用read()将数据从文件拷贝到这个缓冲区,write()将缓冲区数据写入网络。sendfile()是立即将数据从磁盘读到OS缓存。
    因为这种拷贝是在内核完成的,sendfile()要比组合read()和write()以及打开关闭丢弃缓冲更加有效(更多有关于sendfile)。
    tcp_nopush 告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送。
    tcp_nodelay 告诉nginx不要缓存数据,而是一段一段的发送--当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。


    access_log off;
    error_log /var/log/nginx/error.log crit;


    access_log 设置nginx是否将存储访问日志。关闭这个选项可以让读取磁盘IO操作更快(aka,YOLO)
    (4)error_log 告诉nginx只能记录严重的错误:


    keepalive_timeout 10;
    client_header_timeout 10;
    client_body_timeout 10;
    reset_timedout_connection on;
    send_timeout 10;

    具体优化:http://os.51cto.com/art/201404/434930.htm

  • 相关阅读:
    C#操作json
    sql server 2008 身份验证失败 18456
    MD5密码加密
    oracle dg 报错提示 涉及硬盘错误
    Rhel6.5 相关操作
    Centos6.9部署vnc
    Sqluldr2 libclntsh.so报错处理
    时钟服务器同步方法
    windows copy 和xcopy
    Linux 本地repo配置
  • 原文地址:https://www.cnblogs.com/ba1yang/p/7844841.html
Copyright © 2020-2023  润新知