Nginx 学习笔记01

Nginx 学习笔记01

概念

  • Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今,凭借开源的力量,已经接近成熟与完善。

  • Nginx功能丰富,可作为HTTP服务器,也可作为反向代理服务器,邮件服务器。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。并且支持很多第三方的模块扩展。

  • Nginx的稳定性、功能集、示例配置文件和低系统资源的消耗让他后来居上,在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。

  • Nginx常用功能:

    • Http代理,反向代理:
      • 作为Web服务器最常用的功能之一,尤其是反向代理。
    • 负载均衡:
      • Nginx提供的负载均衡策略有2种:内置策略和扩展策略。
      • 内置策略:轮询,加权轮询,Ip hash
      • 扩展策略:自定义负载均衡算法
    • Web缓存:
      • Nginx可以对不同的文件做不同的缓存处理,配置灵活,并且支持FastCGI_Cache,主要用于对FastCGI的动态程序进行缓存。
      • 配合着第三方的ngx_cache_purge,对制定的URL缓存内容可以的进行增删管理。
  • Nginx的特点:

    • (1)跨平台:Nginx 可以在大多数 Unix like OS编译运行,而且也有Windows的移植版本。
    • (2)配置异常简单,非常容易上手。配置风格跟程序开发一样,神一般的配置
    • (3)非阻塞、高并发连接:数据复制时,磁盘I/O的第一阶段是非阻塞的。官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数.(这得益于Nginx使用了最新的epoll模型)
    • (4)事件驱动:通信机制采用epoll模型,支持更大的并发连接。
    • (5)master/worker结构:一个master进程,生成一个或多个worker进程
    • (6)内存消耗小:处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)
    • (7)成本低廉:Nginx为开源软件,可以免费使用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币
    • (8)内置的健康检查功能:如果 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问。
    • (9)节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。
    • (10)稳定性高:用于反向代理,宕机的概率微乎其微

安装教程

  • 参考地址:http://www.nginx.cn/doc/
  • 步骤:
    • 下载地址:
      • http://nginx.org/en/docs/windows.html
    • 解压
    • 基本属性配置:
      •   # 定义Nginx运行的用户和用户组
          #user  HymanHu admin;
          # Nginx进程数,建议设置为CPU总核心数
          worker_processes  2;
        
          #error_log  logs/error.log;
          #error_log  logs/error.log  notice;
          #error_log  logs/error.log  info;
          # 进程文件
          #pid        logs/nginx.pid;
        
          events {
          	# Nginx最大负载量
              worker_connections  1024;
          }
        
          http {
          	# mime type 映射
              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;
        
              #gzip  on;
          	# server 表示一个虚拟主机,一台服务器可配置多个虚拟主机
              server {
          		# 监听端口
                  listen       80;
          		# 识别的域名
                  server_name  localhost;
          		# 一个关键的设置,与URL参数乱码问题有关
                  charset utf-8;
        
                  #access_log  logs/host.access.log  main;
          		# 一个server有多个location,用来匹配 同一个域名下不同uri的访问
                  location / {
          			# 默认主页在nginx安装目录的html子目录
          			# root 表示本地的根目录 ,可以写相对路径 也可以写绝对路径如 e:/nginx/html ;
                      root   html;
          			# index :访问主页 后面如果跟有多个页面  则会依次判断 如果第一个不存在 则向后匹配;
                      index  index.html index.htm;
                  }
              }
          }
        
      • 配置详解:
        • main:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
        • events:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
        • http:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
        • server:配置虚拟主机的相关参数,一个http中可以有多个server。
        • location:配置请求的路由,以及各种页面的处理情况。
        • upstream:用于进行负载均衡的配置
    • 运行命令:
      • 开启:
        • 双击nginx.exe
        • start nginx
      • 关闭:
        • nginx.exe -s stop 快速停止
        • nginx -s quit 完整有序的停止
      • 修改配置后重新加载生效:
        • nginx -s reload
      • 重新打开日志文件:
        • nginx -s reopen
      • 测试nginx配置文件是否正确:
        • nginx -t -c /path/to/nginx.cof

Ubuntu16.04 安装Nginx步骤

  • 安装gcc g++的依赖库:

    •   apt-get install build-essential
        apt-get install libtool
      
  • 安装 pcre依赖库:

    •   sudo apt-get update
        sudo apt-get install libpcre3 libpcre3-dev
      
  • 安装 zlib依赖库:

    •   apt-get install zlib1g-dev
      
  • 安装 ssl依赖库:

    •   apt-get install openssl
      
  • 安装Nginx:

    •   #下载最新版本:
        wget http://nginx.org/download/nginx-1.14.2.tar.gz
        #解压:
        tar -zxvf nginx-1.14.2.tar.gz
        #进入解压目录:
        cd nginx-1.14.2
        #配置:
        ./configure --prefix=/usr/local/nginx
        #编辑nginx:
        make
        注意:这里可能会报错,提示“pcre.h No such file or directory”,具体详见:http://stackoverflow.com/questions/22555561/error-building-fatal-error-pcre-h-no-such-file-or-directory
        需要安装 libpcre3-dev,命令为:sudo apt-get install libpcre3-dev
        #安装nginx:
        sudo make install
        #启动nginx:
        sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
        注意:-c 指定配置文件的路径,不加的话,nginx会自动加载默认路径的配置文件,可以通过 -h查看帮助命令。
        #查看nginx进程:
        ps -ef|grep nginx
      
      
  • 所在目录:/usr/local/nginx/sbin/nginx

Nginx反向代理

  • 反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

  • 通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。

  • 反向代理服务器的工作原理:

    • 反向代理服务器通常有两种模型,它可以作为内容服务器的替身,也可以作为内容服务器集群的负载均衡器。
      • 作内容服务器的替身:
        • 如果您的内容服务器具有必须保持安全的敏感信息,如信用卡号数据库,可在防火墙外部设置一个代理服务器作为内容服务器的替身。当外部客户机尝试访问内容服务器时,会将其送到代理服务器。实际内容位于内容服务器上,在防火墙内部受到安全保护。代理服务器位于防火墙外部,在客户机看来就像是内容服务器。
      • 作为内容服务器的负载均衡器:
        • 可以在一个组织内使用多个代理服务器来平衡各 Web 服务器间的网络负载。在此模型中,可以利用代理服务器的高速缓存特性,创建一个用于负载平衡的服务器池。此时,代理服务器可以位于防火墙的任意一侧。如果 Web 服务器每天都会接收大量的请求,则可以使用代理服务器分担 Web 服务器的负载并提高网络访问效率。
  • 配置:

    • nginx.cof: 在server上面添加下面配置
      • include reverse-proxy.conf;
    • reverse-proxy.conf: 引入代理的服务配置文件
      •   server{
          	listen 80;
          	server_name  HymanHu;
          	charset utf-8;
          	location / {
          		proxy_pass http://localhost:8080;
              }
          }
        
    • 访问 http://hymanhu 就会代理到 http://localhost:8080

nginx负载均衡

  • 负载均衡的功能:
    • 转发
    • 故障移除
    • 恢复添加
    • 高可用
  • 我们配置负载均衡的目的是在于当用户访问我们的服务器的时候, 首先会通过 Nginx服务器来决定转发到哪个Tomcat服务器上去给用户提供服务, 当然这个概率是我们通过权重来配置的. 经过Nginx指派之后, 我们就可以处理高并发的访问了, 这里就能达到负载均衡的目的.
  • 负载均衡算法:
    • 热备:如果你有2台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务。
      •   upstream mysvr {
                server 127.0.0.1:7878;
                server 192.168.10.121:3333 backup;  #热备
              }
        
    • 轮询:nginx默认就是轮询其权重都默认为1
      •   upstream mysvr {
                server 127.0.0.1:7878;
                server 192.168.10.121:3333;
              }
        
    • 加权轮询:跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。
      •   upstream mysvr {
                server 127.0.0.1:7878 weight=1;
                server 192.168.10.121:3333 weight=2;
          }
        
    • ip_hash:nginx会让相同的客户端ip请求相同的服务器。
      •   upstream mysvr {
                server 127.0.0.1:7878;
                server 192.168.10.121:3333;
                ip_hash;
              }
        
    • 最少连接数:把请求分配到连接数最少的server
      •   upstream  fengzp.com {
              least_conn;
              server   192.168.99.100:42000;
              server   192.168.99.100:42001;
          }
        

资源服务器

  • 路径配置:
  • root 代表路径:
    •   location /api/v1/upload {
             root /opt/edu/upload;
        }
        root 配置的意思是,会在root配置的目录后跟上URL,组成对应的文件路径。
        即我的访问
        http://localhost/api/v1/upload/api/v1/upload/course/logo/test.png
        最终去寻找的文件路径是
        /opt/edu/upload/api/v1/upload/course/logo/test.png
        而我想要的是
        /opt/edu/upload/course/logo/test.png
      
    • 表示文件放在 /opt/edu/upload 目录下
    •   Sets the root directory for requests. For example, with the following configuration
        location /i/ {
            root /data/w3;
        }
      
    • The /data/w3/i/top.gif file will be sent in response to the “/i/top.gif” request
  • alias 别名:
    •   Defines a replacement for the specified location. For example, with the following configuration
        location /i/ {
            alias /data/w3/images/;
        }
      
    • on request of “/i/top.gif”, the file /data/w3/images/top.gif will be sent.
  • 区别:
    •   当访问/i/top.gif时,root是去/data/w3/i/top.gif请求文件,alias是去/data/w3/images/top.gif请求,也就是说
        root响应的路径:配置的路径+完整访问路径(完整的location配置路径+静态文件)
        alias响应的路径:配置路径+静态文件(去除location中配置的路径)
      
  • 注意:
    • 使用alias时目录名后面一定要加“/”
    • 一般情况下,在location /中配置root,在location /other中配置alias

你可能感兴趣的:(nginx)