nginx(一)—Nginx 核心模块与配置实践

nginx概述

Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,nginx的性能在同类型的网页服务器中表现较好,本文将介绍nginx的基本特性和安装配置。

正向代理和反向代理

实现负载均衡,请求分发。LVS是直接将请求负载到直接的服务器,详解

nginx的工作进程

  • 一个master进程

    主进程的作用读取和评估配置,启动,终止及维护工作进程以及创建、绑定及关闭套接字。

  • 多个工作进程

    • 工作进程处理web请求。nginx的采用了基于事件的模型和操作系统相关的机制,有效地分配工作进程之间的请求。
    • 负责解析http协议;提供反向代理及过滤功能;nginx任何能完成的其它任务;
    • 工作进程的数量被定义在配置文件中,可以使用配置文件定义固定的数量,或根据可用的CPU内核数实现自动调整其数量。
  • 缓存加载器:

    • 检查缓存存储中的缓存对象;
    • 使用缓存元数据建立内存数据库;
    • 接收、传入并处理来自客户端的连接;
  • 缓存管理器

    • 缓存的失效及过期校验
  • 基于配置文件定义Nginx的工作方式
    nginx的工作方式及其模块的工作是在配置文件中确定的。缺省情况下,其配置文件为nginx.conf

nginx 安装

  • 安装依赖环境
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
  • 安装pcre

    • 下载pcre,点击这里
    • 解压,tar -zxvf pcre-8.35.tar.gz -C /opt/modules/pcre
    • 切换到/pcre-8.35目录下,运行 ./configure 进行pcre初始化配置
    • 进行编译和安装,make && make install
    • 验证,pcre-config –version
  • 安装nginx

    • 点击这里,下载nginx

    • 解压

      
      # tar zxvf nginx-1.6.2.tar
      
    • 切换到nginx解压目录,初始化nginx配置

      
      # ./configure --prefix=/opt/modules/nginx --with-http_stub_status_module --with-http_ssl_module
      
    • 编译安装

      
      # make && make install
      
    • 进入/opt/modules/nginx目录,验证

      
      # ./sbin/nginx -t
      
    • 启动

      
      # ./sbin/nginx
      
    • nginx的停止

      • stop — 快速停止,粗暴模式,不再接受新请求,已经处理的请求被强制关闭,示例如下
      
      #./sbin/nginx -s stop
      
      • quit — 优雅停止,不再接受新请求,等待当前的工作进程完成当前的服务器请求,并停止nginx
      
      # ./sbin/nginx -s quit
      
    • 配置文件重载

      
      # ./sbin/nginx -s reload
      
  • 安装tomcat

nginx配置结构图

这里写图片描述

配置文件结构说明

  • 配置说明

    • nginx配置文件由不同模块组成,通过模块化的方式实现不同的功能。
    • 配置指令分为简单指令和块指令。一个简单的指令,包括名称,用空格分隔参数,并用分号(;)结束。
    • 一个块指令由一个或多个简单具有相同的结构简单指令组合而成,使用一组用{}括号括起来表示块结束。
    • 上下文:一个块的指令包含有大括号其他指令,它被称为上下文(例如:事件,HTTP,服务器,和位置)。
      放置在配置文件中的任何上下文以外的指令都被认为是在主上下文。
    • 检查配置文件语法: nginx -t
    • 指定nginx要加载的配置文件:nginx -c
  • 配置文件构成

    • Nginx配置文件结构主要由以下几部分构成。
    ......
        events    #Events用于配置IO模型,如epoll、kqueue、select或poll等,它们是必备模块。
            {       
             ......
            }
    
        http              #http上下文专用于配置用于http的各模块           
            {               #包括客户端类指令,文件IO类指令,hash类指令,套接字类指令等 
             ......        
                    server     #用于定义虚拟服务器相关的属性,常见的指令有backlog、rcvbuf、bind及sndbuf等
                    {
                     ......
                    }
                    server
                    {
                     ......
                    }
              ......        
             }
  • 基本的nginx.conf配置描述
#user  nobody;        #指定运行worker进程的用户和组
worker_processes  1;  #worker线程的个数;通常应该为物理CPU核心个数减1;

#error_log  logs/error.log;        #配置错误日志文件位置及日志记录级别
#error_log  logs/error.log  notice;#可用于main、http、server及location上下文中
#error_log  logs/error.log  info;  #语法格式为error_log file |stderr [debug|info|notice|warn|error|crit|alert|emerg]

#pid        logs/nginx.pid;          #指定pid存放路径   

events {
    worker_connections  1024; 每个worker进程所能够响应的最大并发请求数;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    #此部分用于设置访问日志的格式及位置
    #access_log  logs/access.log  main;

    sendfile        on;    #文件发送
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;  #保持连接的超时时长,默认为65s

    #gzip  on;   #是否开启gzip压缩

    server {
        listen       80;        #定义监听的端口
        server_name  localhost; #定义监听的主机 

        #charset koi8-r;        #定义字符集

        #access_log  logs/host.access.log  main;  #访问日志文件存放路径

        location / {      #location通常用于server上下文中,用于设定某URI的访问属性。location可以嵌套。 
            root   html;  #默认首页文件位置
            index  index.html index.htm; #首页文件顺序,如果找不到index.html,则找index.htm
        }

        #以下部分根据http状态码重定向错误页面
        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
  • upstream 参数

    • keepalive 服务端与nignx的连接保存时间
    • queue 工作队列
    • service 反向服务地址 加端口
    • weight 权重
    • max_fails 失败多少次 认为主机已挂掉则,踢出
    • fail_timeout 踢出后重新探测时间
    • backup 备用服务
    • max_conns 允许最大连接数
    • slow_start 当节点恢复,不立即加入
  • 负责均衡算法

    • ll+weight 默认的负载算法:
    • ip_hash : 基于Hash 计算

    应用场景:保持session 一至性

  • url_hash: (第三方)
    应用场景:静态资源缓存,节约存储,加快速度
    缺点:应用挂掉影响资源响应
  • least_conn 最少链接

  • least_time 最小的响应时间,计算节点平均响应时间,然后取响应最快的那个,分配更高权重

  • server参数

    • location:可以有多个,相当于站点,根据location分发upstream,server,静态资源等

      • root:nginx的站点,可以配置到location之外或里面
      • index 首页文件顺序
      • proxy_set_header 代理头部设置,保存头部信息
      • proxy_pass,代理,可以代理指向upstream,指向完整的url路径。
  • 参考地址

    发布了91 篇原创文章 · 获赞 27 · 访问量 9万+

    猜你喜欢

    转载自blog.csdn.net/xhwwc110/article/details/79535738