• nginx详解


    一,服务介绍

    是一个开源,支持高性能,高并发的www服务和代理服务软件,占用资源少,且功能丰富而逐渐流行起来,

    • web软件(apache.lls)
    • 反向代理负载均衡功能 (与lvs和haproxy专业代理软件)
    • 缓存服务功能(squid,varnish)

    二,服务功能以及特性

    nginx重要特性

      • 可针对静态资源做高并发访问及缓存
      • 可使用方向代理,并且可进行数据缓存
      • 具有简单负载均衡,节点健康检查和容错功能
      • 支持远程fastCGI服务的缓存加速
      • 支持fastCGI,Uwsgi,SCGI and memcached servers的加速和缓存
      • 支持ssl tls sni
      • 具有模块化的架构,过滤器包含gzip ranges 支持 chunked响应,xslt ssl及图像缩放等功能,在ssl过滤器中,一个包含多个ssl的页面,如果经过fastCGI或反向代理处理,可被并行处理

    他所具备的其他www服务特性如下:

      • 支持基于名字,端口以及IP的多虚拟主机站点
      • 支持keepalived 和pipelined
      • 可进行简单,方便,领过的配置和管理
      • 支持修改nginx配置,并且在代码上显示,可平滑重启,不中断业务访问
      • 可自定义访问日志格式,临时缓冲写日志操作,快速日志沦陷及通过rsyslog处理日志
      • 可利用信号控制nginx进程
      • 支持3xx-5xx状态吗重定向
      • 支持rewrite模块,支持URL重写及正则表达式匹配
      • 支持基于客户端IP地址和HTTP基本认证的访问控制
      • 支持PUT DELETE MKCOL COPY,以及MOVE等特殊的http请求方法
      • 支持FLV流和MP4流技术产品应用
      • 支持http响应速率限制
      • 支持同一IP地址的并发连接或请求数限制

    企业面试时需要解答如下步骤 nginx http服务器的特色及优点

      • 支持高并发:能支持几万并发连接(特别是静态小文件业务环境)
      • 资源消耗少:在三万并发连接下,开启10个nginx线程消耗不到200M内存
      • 可以做http反向代理及加速缓存,既负载均衡功能,内置对RS节点服务器健康检查共功能,这相当于专业的haproxy软件或lvs功能
      • 具备squid等专业软件的缓存功能
      • 支持异步网络IO实践模型epol

    nginx软件的主要企业功能应用

      • 作为web服务软件
        • 使用nginx运行html,js,css小图片等静态数据(次功能类似lighttpd软件)
        • nginx结合fast CGI运行PHP等动态程序(例如利用fastcgi_pass方式)
        • nginx结合tomcat/resin等支持java动态程序(常用proxy_pass方式)
      • 反向代理或负载均衡
      • 前端业务数据缓存服务

     

    三,服务区别

    apache:

    • 非常稳定
    • prefock模式取消了进程创建开销,性能很高
    • 处理动态业务时,因关联到后端的引擎和数据库,瓶颈不在于apache本身上
    • 高并发时消耗系统封资源相对多一些
    • 基于传统的select模型,高并发能力有限
    • 支持扩展库,可通过DSO,apxs方法编译安装额外的插件功能,不需要重新编译apache
    • 功能多,更稳定,更安全,插件也多

    nginx:

    • 基于异步网络I/O模型(epoll,kqueue)
    • 具有支持高性能,高并发的特性,并发连接可达数万
    • 对像文件(小于1mb的小文件)高并发支持很好,性能很高
    • 不支持类似apache的dso模式,扩展库必须编译进主程序(缺点)
    • 支持web,proxy,cache三大重点功能,并且很优秀
    • 市场份额逐年增加

    四,epoll模型和select模型区别形象比喻介绍

    • nginx     使用异步epoll模型
    • apache  使用同步select模型

    五,如何根据企业场景正确选择web服务器

    • 静态业务:若是高并发场景,尽量才有nginx
    • 动态业务:理论上采用nginx和apache均可,建议选择nginx,要避免相同业务服务软件多样化,额外增加维护成本,动态业务可以由nginx兼前端代理,再根据页面元素的类型或则目录,向后转发到后端相应的服务器进行处理
    • 既有静态又有动态业务:就采用nginx

    六,linux系统安装软件的多种方法

    1.rpm安装

      • rpm -ivh 包名.rpm(有依赖问题,安装A,A需要先安装B)

    2.yum安装

      • yum -y install 软件名 (解决rpm安装的依赖问题,安装更简安装)
      • 优点:简单,易用,高效
      • 缺点:不能定制

    3.编译安装(C语言源码,编译二进制等)

      • ./configure(配置),make(编译),make install(安装)
      • 优点:可以定制
      • 缺点:复杂,效率低

    4.企业定制化制作rpm包,搭建yum仓库,把我定制的rpm包放到yum仓库,进行yum安装

      • 优点:结合2.3的优点
      • 缺点:复杂

    七,安装nginxweb服务实战

    1.安装nginx做需的pcre库

    pcre中文perl监控正则表达式,安装pcre库就是为了使nginx支持具备URL重新功能的rewirte模块,如果不安装pcre库,则nginx无法使用rewrite模块功能,nginx的rewrite模块功能几乎是企业应用的必须,安装过程如下:

    a,yum -y install pcre pcre-devel   

     b.yum -y install openssl openssl-devel

     c.wegt xxx nginx-xxx.tar.gz

     d.tar xf nginx-xxx.tar.gz

     e.cd nginx-xxx

     f.useradd www -s /sbin/nologin -M

    ./configure  --help

     g./configure --user=www --group=www --prefix=/application/nginx-1.8.0/  --with-http_ssl_module  --with-http_stub_status_module

    h.echo $0  确定是否安装成功否

    make

    make install

    ln -s /application/nginx-1.8.0/ /application/nginx

     

    八,自定义站定目录以及简单编写开发网页内容详解

    • conf    配置文件

    egrep -v "^$|#" nginx.conf.default >nginx.conf  把开头是$|#去掉

    下面代表一个网站

     server {

            listen 80;

            server_name www.etiantian.com;   ###域名       

                    location / {                              #安装根目录                        

                     root html;                              #安装相对路径

                     index index.html index.htm;  #默认打开文件

            }

            error_page 500 502 503 504 /50x.html;

            location = /50x.html {               root html;

            }     }

     下面代表php安装情况

     <?php 
    phpinfo();
    ?> 

    sbin    执行文件

    log      日志文件

    html    站点目录

    九,nginx常用模块介绍

    核心模块

    标准模块

    十,nginx主配置文件默认参数详解

    worker_processes 1;             #---------------------------------->>>main区,nginx核心功能模块    进程数量1,worker数量很多
    events {
    worker_connections 1024;     #---------------------------------->>> 一个worker最大服务数量,同时可以接的数量,最大并发数worker*
    }                                              #---------------------------------->>>events区,nginx核心功能模块
    http {                                       #---------------------------------->>>http区,nginx核心功能模块
    include mime.types;               #---------------------------------->>>include包含,这个配置文件包含mime.types
    default_type application/octet-stream;
    sendfile on;                             #---------------------------------->>>开启高效传输模式,优化会讲
    keepalive_timeout 65;            #---------------------------------->>>超时时间,链接时间
    server {                                   #---------------------------------->>>一个server对应一个网站,
    listen 80;                                 #---------------------------------->>>端口必须有,每个server都有
    server_name localhost;          #---------------------------------->>>域名必须有,每个server都有
    location / {                               #---------------------------------->>>没有做任何匹配,默认找这个文件对应的内容
    root html;
    index index.html index.htm;
    }

    location /50z.html{                  #---------------------------------->>>如果匹配上了,默认就走这个文件
    root html;
    }
    error_page 500 502 503 504 /50x.html; #---------------------------------->>>出现错误,找这个文件,优雅匹配
    location = /50x.html {
    root html;
    }
    }
    }

    十一,虚拟主机概念和类型介绍

    所谓虚拟主机,再web服务里就是一个独立的网站站点,这个站点对应独立的域名,也可能是IP或则端口,具有独立的程序或资源目录,可以独立的对外提供服务供用户访问,这个独立的站点再配置上有一定格式的标签标记,

      • 对于apache软件来说,一个虚拟主机的标签段通常被包含再<virtualHost></virtualHost>内,
      • 而nginx软件则使用一个server{}标签来标示一个虚拟主机,

    一个web服务里可以有多个虚拟主机标签对,同时支持多个虚拟主机站点

    例子:blog.51cto.com www.51cto.com edu.51cto.com home.51cto.com

    十二,多种类型的虚拟主机详细介绍

    • 基于域名的虚拟主机,通过域名来区分,外部网站
      • nginx基于域名的虚拟主机实战
      • http {
            include mime.types;
            default_type application/octet-stream;
            sendfile on;
            keepalive_timeout 65;
            server {
                listen 80;
                server_name www.etiantian.org;
                location / {
                    root html/www;
                    index index.html index.htm;
                 }
        }
        server {
                listen 80;
                server_name bbs.etiantian.org;
                location / {
                    root html/bbs;
                    index index.html index.htm;
                }
        }
        server {
             listen 80;
            server_name blog.etiantian.org;

                autoindex on;    #可以避免403错误而且可以提供以恶喜爱啊

        location / {
            root html/blog;
            index index.html index.htm;
        }
    }
    }

     具体流程:   

    dns解析

    请求报文请求头里面有host,

    服务器接收到端口和域名,

    然后就从上往下走,

    因为只有一个localtion,

    就走默认的,/读配置,走下面配置,

    如果都没有就返回403错误

    • 基于端口的虚拟主机,通过端口来区分,内部网站,网站的后台
      • nginx基于端口的虚拟主机实战
        • http {
              include mime.types;
              default_type application/octet-stream;
              sendfile on;
              keepalive_timeout 65;
              server {
                  listen 80;
                  server_name www.etiantian.org;
                  location / {
                      root html/www;
                      index index.html index.htm;
                   }
          }
          server {
                  listen 81;
                  server_name www.etiantian.org;
                  location / {
                      root html/bbs;
                      index index.html index.htm;
                  }
          }
          server {
               listen 82;
              server_name www.etiantian.org;

                    autoindex on;    #可以避免403错误而且可以提供以恶喜爱啊

            location / {
                root html/blog;
                index index.html index.htm;
            }
        }
        }

    • 基于IP的的虚拟主机,基本不用
      • nginx基于ip的虚拟主机实战
    • http {
          include mime.types;
          default_type application/octet-stream;
          sendfile on;
          keepalive_timeout 65;
          server {
              listen 192.168.1.9;
              server_name www.etiantian.org;
              location / {
                  root html/www;
                  index index.html index.htm;
               }
      }
      server {
              listen 192.168.1.10;
              server_name www.etiantian.org;
              location / {
                  root html/bbs;
                  index index.html index.htm;
              }
      }
      server {
           listen 192.168.1.11;
          server_name www.etiantian.org;

                autoindex on;    #可以避免403错误而且可以提供以恶喜爱啊

        location / {
            root html/blog;
            index index.html index.htm;
        }
    }
    }

     

    十三,虚拟主机配置步骤检查及检测策略-配置文件优化等

    • include  /vhost/*.conf
    • 这个操作可以把server文件全部拷贝出来单独做成一个xxx.conf的文件

    十四,配置ngixn虚拟主机别名以及别人企业场景的应用说明

    server {
            listen 192.168.1.10;
            server_name www.etiantian.org etiantian.org;
            location / {
                root html/bbs;
                index index.html index.htm;
            }
    }

    十五,nginx状态模块详解与实战(前提是安装了nginx状态模块--with-http_stub_status_module)

      location / {
                stub_status on;
                access_log off;
            }

    十六,nginx日志及错误日志详解

    • error_log  /www/log/error.log crit;

    放在主配置文件俱佳

    十七,ngixn访问日志介绍与实践

    模板

    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

     

    十八,nginx日志轮询切割实战

    apache:cronlog rotate

    nginx:cron+scripts

    • cd /usr/local/nginx/logs
    • /bin/mv www_access.log www_access_$(date +%F).log
    • /usr/local/nginx/sbin/nginx -s reload 
    • rsync 。。。。。。同步到备份服务器
    • del date before 7 day

    crontab -e  定时任务 00 00 * * *  /bin/sh /server/scripts/cut_nginx_log.sh >/dev/null 2>&1

    十九,nginxlocation重要语法讲解及实践检验

    根据用户请求的URL来执行不同的应用,其实就是根据用户请求的网站地址URL匹配,匹配成功即进行相关的操作

    匹配语法:

    location[=|~|~*|^~]url                                {~}

    指令           匹配标识 匹配的网站网址                匹配URL后要执行的匹配段

    www.etiantian.org/oldboy/

    localtion /oldboy/ {

        do something

    }                                                          指定匹配

    location / {
       root html;
       index index.html index.htm;
     }                                                 默认匹配

    二十,nginxlocation重要实践及结论总结

    server{

    listen 80;

    server_name www.etiantian.org etiantian.org

    location / {
       return 401;
     }     

    location / {
       return 401;
     }  

    location  = / {
       return 402;
     }  

    location /documents/{
       return 403;
     }  

    location ^~ /images/ {
       return 404;
     }  

    location ~* . (gif/jpg/jpeg)$ {
       return 500;
     }  

    }

    第一名 “location=/{”  精确匹配/

    第二名 “location ^~/images/{” 匹配常规字符串,不做正则匹配检查

    第三名 “location~*.(gif|jpg|jpeg)${”  匹配正则

    第四名 “location/documents/{”  匹配常规字符串,如果有正则则优先匹配正则

    第五名 “location/{”  所有location 都不能匹配后的默认匹配

    二十一,nginxrewrite介绍及语法讲解

    主要功能也是实现URL地址重写,nginx的rewrite规则需要PRCE软件的支持,既通过perl兼容正则表达式语法进行匹配规则的。

    语法:rewrite regex replacement [flag]

    rewrite */(.*)http://blog.etiantian.org/$1 permanet;   $1就是(.*)

    location ^~ /images/ {
       rewrite */(.*)http://blog.etiantian.org/$1 permanet;   $1就是(.*);
     }  

    ngixnrewrite实战案例301及url跳转

     用别名和用跳转的区别

    别名 效果好

    301   能够看到域名

    域名跳转,当访问老域名的时候跳转到新域名

    nginx用户访问呢及密码验证实战

    location / {

    auth_basic       "oldboy train"

    auth_basic_user_file conf/htpasswd

    root html/www

    index index.html index.htm

    }

    一般内部网站使用得比较多

     

     

  • 相关阅读:
    PHP+shell实现多线程的方法
    【JavaScript】一个同步于本地时间的动态时间
    void 0 或者 undefined
    Android Activity间动画跳转
    如何申请微信公众平台接口測试帐号
    hdu 4862 KM算法 最小K路径覆盖的模型
    【Unity 3D】学习笔记三十三:游戏元素——天空盒子
    cocos2d-x-lua基础系列教程五(lua单例)
    技术走向管理一些思考(7)-激励成员
    Runtime.getRuntime().exec()----记录日志案例
  • 原文地址:https://www.cnblogs.com/qiulovelinux/p/10417477.html
Copyright © 2020-2023  润新知