Nginx 百度百科:
    # 简介:
        Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
        Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。

其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。
        2011年6月1日,nginx 1.0.4发布。

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。
        其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,
        中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
    
    # 优点:
        Nginx 可以在大多数 Unix Linux OS 上编译运行,并有 Windows 移植版。
        Nginx 的1.20.0稳定版已经于2021年4月20日发布,一般情况下,对于新建站点,建议使用最新稳定版作为生产版本,已有站点的升级急迫性不高。
        Nginx 的源代码使用 2-clause BSD-like license。

Nginx 是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性:
            在连接高并发的情况下,Nginx是Apache服务不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。
            能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。

# 服务器:
        1.Nginx作为负载均衡服务:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务对外进行服务。
            Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。
        2.处理静态文件,索引文件以及自动索引;打开文件描述符缓冲。
        3.无缓存的反向代理加速,简单的负载均衡和容错。
        4.FastCGI,简单的负载均衡和容错。
        5.模块化的结构。包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter。
            如果由 FastCG或其它代理服务器处理单页中存在的多个 SSI,则这项处理可以并行运行,而不需要相互等待。
        6.支持 SSL 和 TLSSNI。

# 代码
        Nginx代码完全用C语言从头写成,已经移植到许多体系结构和操作系统,
        包括:Linux、FreeBSD、Solaris、Mac OS X、AIX以及Microsoft Windows。
        Nginx有自己的函数库,并且除了zlib、PCRE和OpenSSL之外,标准模块只使用系统C库函数。
        而且,如果不需要或者考虑到潜在的授权冲突,可以不使用这些第三方库。

# 代理服务器
        作为邮件代理服务:Nginx 同时也是一个非常优秀的邮件代理服务(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。
        Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务。
        Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。

Nginx
    俄罗斯人使用C语言编写的一款高性能,支持Http协议和反向代理的web服务器

特点:
    支持HTTP协议
    支持高并发、性能稳定、资源消耗低
    开源

环境配置:
    yum -y install autoconf automake make
    yum -y install gcc gcc-c++
    yum -y install pcre pcre-devel 
    yum -y install zlib zlib-devel
    yum install -y openssl openssl-devel

安装:
    cd /
    cd usr/local/
    tar zxvf nginx-1.9.15.tar.gz
    mkdir nginx
    cd nginx-1.9.15/
    ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
    make && make install

启动:
    cd /
    cd usr/local/nginx/sbin/
    ./nginx
停止:
    ./nginx -s stop        (停止)
    ./nginx -s quit        (退出)

修改文件后重新加载nginx
    ./nginx -s reload    (重新加载nginx.conf)
    ./nginx -t        (检测配置文件是否配置成功)

配置文件启动:(必须使用绝对路径)
    cd /
    cd usr/local/nginx/sbin/
    ./nginx -c /usr/local/nginx/conf/nginx.conf        (利用安装目录配置文件启动)
    ./nginx -c /usr/local/nginx-1.9.15/conf/nginx.conf    (利用解压目录配置文件启动)

查看nginx是否运行了
    ps -ef|grep nginx

复制nginx.conf文件
    cp -r nginx.conf ../nginxConf/myNginx.conf

--------------------------------------------------------------------------------------------------------------------------------------------

Nginx配置文件:
    main(全局)配置
        # user  nobody
            主模块命令, 指定Nginx的worker进程运行用户以及用户组,默认由nobody账号运行。

# 指定Nginx要开启的进程数,单个节点的nginx启动有1个master进程和n个worker进程
            # master
                1. 读取并验正配置信息;
                2. 创建、绑定及关闭套接字(Socket);
                3. 启动、终止及维护worker进程的个数;
                4. 无须中止服务而重新配置工作特性;
                5. 重新打开日志文件;
            # worker
                1. 接收、传入并处理来自客户端的连接;
                2. 提供反向代理及过滤功能;
                3. nginx任何能完成的其它任务;

# pid
            用来指定进程id的存储文件位置

event配置
        设定nginx的工作模式及连接数上限

# use Netty
            参数use用来指定nginx的工作模式(这里是epoll,epoll是多路复用IO(I/O Multiplexing)中的一种方式),
            nginx支持的工作模式有select ,poll,kqueue,epoll,rtsig,/dev/poll。
            其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,对于linux系统,epoll是首选。

# worker_connections
            设置nginx每个work进程最大的连接数,默认是1024,
            所以nginx最大的连接数 max_client=worker_processes * worker_connections <= 50000

http配置
        server(虚拟主机设置)
        upstream(上游服务器设置,主要为反向代理、负载均衡相关配置) 
        location(URL匹配特定位置后的设置)

# include mime.types
            指定nginx支持的多媒体文件类型
        
        # sendfile
            on:开启高效文件传输模式
        
        # keepalive_timeout
            客户端连接超时时间:
                如果客户端访问服务器的某个资源,服务器并没有给客户端响应,此时客户端并没有断开和服务器的请求连接,
                而是过一段时间再次发送请求,如果服务器长时间不发送请求,再中断请求
        
        # gzip
            on:设置是否开启gzip模块
        
        # server:虚拟主机
            同一个主机可以通过不同方式进行访问,物理主机只有一个
            1.通过IP+端口号配置虚拟主机
                server {
                    listen       88;
                    server_name  192.168.190.132;

location / {
                    root   html;
                    index  index.html index.htm;
                    }
                    error_page   500 502 503 504  /50x.html;
                    location = /50x.html {
                    root   html;
                    } 
                }
            2.通过域名配置
                需要修改window本地hosts文件,添加域名
                C:\Windows\System32\drivers\etc\hosts

nginx.conf:
                server {
                    listen       80;
                    server_name  www.nginx.com.cn;

location / {
                        root   html;
                        index  index.html index.htm;
                    }
                    error_page   500 502 503 504  /50x.html;
                    location = /50x.html {
                        root   html;
                    } 
                }
                hosts:
                192.168.190.129    www.nginx.com.cn

# Nginx多模块开发
            nginx.conf
            include /usr/local/nginx/config/server*.conf;

server1.conf
            server {
                listen       80;
                server_name  www.nginx.com.cn;

location / {
                    root   html;
                    index  index.html index.htm;
                }
                error_page   500 502 503 504  /50x.html;
                location = /50x.html {
                    root   html;
                } 
            }

--------------------------------------------------------------------------------------------------------------------------------------------

Location匹配规则
    通过location匹配来访问Nginx所在目录的资源文件以及Niginx所在操作系统的资源文件

# Nginx内部静态资源访问(访问Nginx安装目录的资源文件或者是Linux系统上其他目录的资源文件)
    1.总体匹配原则:root + location + index
        查找匹配的location,如果location后是/,直接从nginx根目录进行查找,如果location后有/a/b,
        会执行完location后再查找nginx安装目录下是否有/a/b

root不是nginx指令,是nginx的预制变量

Nginx默认根目录就是Nginx的安装根目录        /usr/local/nginx就是Nginx的根目录
        当前访问路径:/usr/local/nginx/html/index.html
            location / {
                root   html;
                index  index.html index.htm;
            }
        注意:如果root后面的目录没有\代表是相对于Nginx安装目录,如果有\代表从Linux的系统根目录开始查找
            
        如果想访问其它目录的资源文件,建议使用绝对路径
            location / {
                root   /usr/local/static;
                index  other.html;
            }
        
        我们也可以使用other.html进行首页访问,而在访问路径包含具体文件
            location /other.html {
                root   /usr/local/static;
            }
    
    2.另一种匹配规则:alias + location + index
        使用alias + root达到不同路径访问同一个资源文件
            location  / {
                alias  /usr/local/static/;
                index other.html;
            }

点拨:
            alias指定的目录是准确的,在location后加目录是不生效的
            使用root该种匹配方式location  /static是不生效的,具体路径由alias  /usr/local/static/;决定,

root的处理结果是:root路径+location路径
​            alias的处理结果是:alias后的所有绝对路径,location是不生效的
                如果location后路径是/;最后一个/不能少,/usr/local/static/
            
    # 关于location的路径匹配        
        =    开头表示精确匹配
        ^~    开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。
                nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)
        ~    开头表示区分大小写的正则匹配
        ~*    开头表示不区分大小写的正则匹配
        !~    区分大小写不匹配的正则
        !~*    不区分大小写不匹配的正则
        /    用户所使用的代理(一般为浏览器)
        
        匹配过程:
            **先精准匹配,再普通匹配,最后正则匹配,普通匹配按最大前缀匹配,正则匹配按配置文件中的物理顺序匹配**

优先级:
            精准匹配、普通匹配、正则匹配(物理顺序)
        
        # 精准匹配
            1.精准匹配到文件
                location =/static/other.html {
                    root   /usr/local;
                }

location / {
                    root   html;
                    index index.html;
                }
            2.精准匹配到目录
                location =/static {
                    root   /usr/local;
                    index other.html;
                }

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

location /static {
                    root   /usr/local/jingzhun;
                    index  index.html;
                }
            注意:如果精准匹配到目录,精准匹配结束后会接着匹配剩下的location,如果匹配上接着执行匹配刚匹配的location
                 如下这种情况会报错:因为Nginx虚拟主机有个默认匹配/,精准匹配完=/static后会继续匹配默认 的locaion /{}
                     location =/static {
                    root   /usr/local;
                    index other.html;
                }

location / {
                    root   /usr/local;
                    index other.html;
                }

# 普通url匹配  等同于"/"或者"^~ /"
            匹配最长的路径
            location /static {
                root  /usr/local;
                index other.html;
            }

location / {
                root   html;
                index index.html;
            }
            点拨:**从上图错误中可以看出普通url匹配会选择匹配中的最长的路径

# 正则匹配
            举例:正则匹配查看指定类型图片
            第一个.:任意一个字符 [abc][0-9][a-z][A-z]\w:[a-zA-Z0-9_] \d:[0-9]
                *:0-n个
                ?:0-1个
                +:1-n个
                abc123.jpg  .jpg   .* \.(jpg|png|bmp)
                .*\.(jpg|png)
                location ~ ^/resources/.*\.(jpg||png|bmp)$ {
                      root  /usr/local;
                      index other.html;
                 }

# 路由、反向代理访问[下面会有讲解]

# Nginx路由功能

# Nginx作为静态资源服务器
    通过案例演示
        winows打war包放入Linux中

# Nginx反向代理和负载均衡
    1.正向代理
        意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,
        客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。

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

反向代理:
            有服务器代理访问服务器(内部的代理)
        路由:
            反向代理访问服务器过程
        负载均衡:
            到底如何路由
    
        配置:
            server {
                listen       80;
                server_name  www.andy.com;

location /proxy-9001 {
                   proxy_pass http://192.168.202.132:9001;
                }
            }
    3.负载均衡:客户端访问量大,任务合理地分配给(微服务)集群服务器
        #负载均衡策略
        1. 轮询 (默认)
            每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
            upstream nginx {
                server 172.17.0.4:8081;
                server 172.17.0.5:8081;
            }

2. 权重 (weight)
            指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
        
        3. ip_hash (ip+hash:每次请求的都是同一台服务器)
            每个请求按访问ip的hash结果分配,这样同一客户端的请求总是发往同一个后端服务器,避免跨域,session。ip+hash 单点登陆
            upstream nginx {
                ip_hash;
                server 172.17.0.4:8081;
                server 172.17.0.5:8081;
            }
        
        4. fair (第三方)
            按后端服务器的响应时间来分配请求,响应时间短的优先分配。
            upstream backserver { 
                fair; 
                server server1; 
                server server2; 
            } 
        5. rl_hash (第三方)
            按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

--------------------------------------------------------------------------------------------------------------------------------------------

Nginx教学详解:
#大纲视图
    (一)基础篇
        一、Nginx的简介
            (1)Nginx出现的背景介绍
            (2)常见服务器对比
            (3)Nginx的功能总结
            (4)Nginx的常用功能
        二、环境准备
            (1)Nginx的历来版本介绍
            (2)获取Nginx不同版本的源码
            (3)在Centos上编译安装Nginx
            (4)Nginx服务的启停控制
                1.Nginx服务的信号控制
                2.Nginx服务的启动
                3.Nginx服务的关闭
                1.Nginx服务的重启
                4.Nginx服务器的升级
            (5)运行第一个Nginx程序
        三、结构分析
            (1)目录结构
            (2)配置文件结构
        四、基础配置
            (1)nginx.conf详解
            (2)Nginx服务器基础配置实例
    (二)进阶篇
        一、Nginx静态资源部署
            (1)静态资源概述
            (2)静态资源配置语法
            (3)静态资源压缩实战
            (4)浏览器缓存
            (5)静态资源跨域
            (6)静态资源防盗链
        二、Nginx后端服务器组的配置指令
            (1)5个常用指令
            (2)Rewrite功能的配置
                1."地址重写"与"地址转发"
                2.Rewrite规则
                3.if指令
                4.break指令
                5.rewrite指令
                6.rewrite_log指令
                7.set指令
                8.Rewrite常用全局变量
            (3)Rewrite的使用
                1.域名跳转
                2.域名镜像
                3.独立域名
                4.目录自动添加"/"
                5.目录合并
                6.防盗链
        三、Nginx反向代理
            (1)反向代理概述
            (2)反向代理配置语法
            (3)反向代理实战
            (4)upstream+proxy_pass
            (5)安全隔离
            (6)基于原始IP地址阻止流量及并发数
        四、Nginx负载均衡
            (1)负载均衡的概述
            (2)负载均衡的原理及处理流程
            (3)负载均衡状态
            (4)负载均衡的策略
            (5)负载均衡的四层流程与原理分析
            (6)配置实例一;对所有请求实现一般轮询规则的负载均衡
            (7)配置实例二;对所有请求实现加权轮询规则的负载均衡
            (8)配置实例三;对所有特定资源实现负载均衡
            (9)配置实例四;对所有不同域名实现负载均衡
            (10)配置实例五;实现带URL重写的负载均衡
        五、Nginx缓存集成
            (1)Nginx缓存概述
            (2)Nginx缓存设置语法
            (3)Nginx缓存案例
            (4)Nginx消除缓存
            (5)Nginx设置页面不缓存
    (三)架构篇
        一、Nginx集群
            (1)通过Nginx实现服务器集群搭建
        二、高可用解决方案
            方案介绍
            (1)keepalived高可用服务介绍
            (2)keepalived原理解析
            (3)VRRP原理解析
            (4)高可用环境搭建
                1.环境准备
                2.keepalived高可用配置文件详解
                3.效果解析
        三、Nginx制作下载站点模块
        四、Nginx用户认证模块
    (四)模块篇
        一、Lua
            (1)Lua的概述
            (2)Lua的语法
            (3)Lua的数据类型
            (4)Lua表达式
            (5)Lua变量
            (6)Lua流程控制
            (7)Lua函数
            (8)Lua其他操作
        二、Lua-Nginx-Module概述
        三、安装
            (1)lua-nginx-module
            (2)openResty
        四、ngx-lua指令分析
        五、ngx-lua应用场景
            (1)操作Mysql
            (2)操作Redis
        六、案例
            (1)Nginx+Lua实现Redis的缓存预热

---------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

#基础篇    
Nginx的简介    
    Nginx出现的背景介绍
        Nginx(“engine x”)一个具有高性能的【HTTP】和【反向代理】的【WEB服务器】,
        同时也是一个【POP3/SMTP/IMAP代理服务器】,是由伊戈尔·赛索耶夫(俄罗斯人)使用C语言编写的,
        Nginx的第一个版本是2004年10月4号发布的0.1.0版本。
        另外值得一提的是伊戈尔·赛索耶夫将Nginx的源码进行了开源,这也为Nginx的发展提供了良好的保障。

1. WEB服务器:
            WEB服务器也叫网页服务器,英文名叫Web Server,主要功能是为用户提供网上信息浏览服务。
        2. HTTP:
            HTTP是超文本传输协议的缩写,是用于从WEB服务器传输超文本到本地浏览器的传输协议,
            也是互联网上应用最为广泛的一种网络协议。
            HTTP是一个客户端和服务器端请求和应答的标准,客户端是终端用户,服务端是网站,
            通过使用Web浏览器、网络爬虫或者其他工具,客户端发起一个到服务器上指定端口的HTTP请求。
        3. POP3/SMTP/IMAP:
            POP3(Post Offic Protocol 3)邮局协议的第三个版本,
            SMTP(Simple Mail Transfer Protocol)简单邮件传输协议,
            IMAP(Internet Mail Access Protocol)交互式邮件存取协议,
            通过上述名词的解释,我们可以了解到Nginx也可以作为电子邮件代理服务器。
        4. 反向代理
           正向代理

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Nginx环境配置:
    uname -a
    ping www.baidu.com
    systemctl stop firewalld    临时关闭防火墙
    systemctl status firewalld    查看防火墙状态
    systemctl disbale firewalld    永久关闭防火墙
    sestatus            查看se的状态(selinux是linux史上最杰出的新安全子系统之一)
    vim /rtc/selinux/config        关闭se
        #SELINUX=enforcing
        SELINUX=disabled
        !wq
    sestatus            
    重启linux

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

yum install -y gcc
    gcc --version
    yum install -y core pcre-devel
    rpm -qa pcre pcre-devel
    yum install -y zlib zlib-devel
    rpm -qa zlib zlib-devel
    yum install -y openssl openssl-devel
    rpm -qa openssl openssl-devel

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

以上代码相当于下面一步
    yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
    gcc --version
    rpm -qa pcre pcre-devel zlib zlib-devel openssl openssl-devel

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

安装Nginx:
一、简单安装
    1.进入Nginx官网 http://nginx.org/en/download.html
    2.复制下载版本链接地址 http://nginx.org/download/nginx-1.18.0.tar.gz
    3.打开xshell,进入/usr/local/,使用wget命令
        cd /usr/loacl/
        wget http://nginx.org/download/nginx-1.18.0.tar.gz
    4.新建文件夹,将下载的压缩资源移入
        mkdir -p nginx/core
        mv nginx-1.18.0.tar.gz nginx/core
    5.解压缩,删除压缩包
        cd nginx/core
        tar zxvf nginx-1.18.0.tar.gz
        rm -tf nginx-1.18.0.tar.gz
    6.进入已解压文件夹
        cd nginx-1.18.0
    7.发现 configure 文件,运行
        ./configure (可以填写安装路径,默认安装路径 /usr/local/nginx/ )
    8.编译
        make
    9.安装
        make install
    10.进入 sbin 目录,运行 nginx
        cd sbin
        ./nginx
    11.打开浏览器,输入本地ip地址,访问nginx服务器
        192.168.240.128
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

二、yum安装
    1.打开Nginx官网的linux的centOS系统的安装说明,根据安装说明进行安装
        http://nginx.org/en/linux_packages.html#RHEL-CentOS
    2.进入xshell
        (1) sudo yum install yum-utils
            y
            y
        (2) vim /etc/yum.repos.d/nginx.repo
            在文件中输入以下内容
                [nginx-stable]
                name=nginx stable repo
                baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
                gpgcheck=1
                enabled=1
                gpgkey=https://nginx.org/keys/nginx_signing.key
                module_hotfixes=true

[nginx-mainline]
                name=nginx mainline repo
                baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
                gpgcheck=1
                enabled=0
                gpgkey=https://nginx.org/keys/nginx_signing.key
                module_hotfixes=true
            然后保存退出
                !wq
        (3) 可以通过下面的命令选择安装主线版本的Nginx,而不是稳定版,推荐使用稳定版
            sudo yum-config-manager --enable nginx-mainline
        (4) 在线安装
            sudo yum install nginx
            sudo yum install -y nginx    (添加-y确认下载过程中的所有请求)
        (5) 查看nginx安装的位置
            whereis nginx        (默认位置在 /usr/sbin/nginx )
                进入解压目录可以看到以下文件
                    auto:存放的是编译相关的脚本
                    CHANGES:版本变更记录
                    CHANGES.ru:俄罗斯文的版本变更记录
                    conf:nginx默认的配置文件
                    configure:nginx软件的自动脚本程序,是一个比较重要的文件,作用如下:
                    ​    (1)检测环境及根据环境检测结果生成C代码
                    ​    (2)生成编译代码需要的Makefile文件
                    contrib:存放的是几个特殊的脚本文件,其中README中对脚本有着详细的说明
                    html:存放的是Nginx自带的两个html页面,访问Nginx的首页和错误页面
                    LICENSE:许可证的相关描述文件
                    man:nginx的man手册
                    README:Nginx的阅读指南
                    src:Nginx的源代码
        (6) 进入sbin目录,运行nginx
            cd /usr/sbin/
            ./nginx
        (7).打开浏览器,输入本地ip地址,访问nginx服务器
            192.168.240.128
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

三、Nginx源码复杂安装
    与简单安装差不多,在第7步可以根据需要添加 ./configure 命令的运行参数(100多个)
        1.与PATH相关的,用户设置路径
        2.--with相关的,用于添加模块
        3.--without相关的,用于排除模块
        4.--user,用于指定当前启动Nginx的用户
        5.--group,用于指定该用户对应的组
        
        --prefix=PATH
            指向Nginx的安装目录,默认值为/usr/local/nginx   
        --sbin-path=PATH
            指向(执行)程序文件(nginx)的路径,默认值为<prefix>/sbin/nginx
        --modules-path=PATH
            指向Nginx动态模块安装目录,默认值为<prefix>/modules
        --conf-path=PATH
            指向配置文件(nginx.conf)的路径,默认值为<prefix>/conf/nginx.conf
        --error-log-path=PATH 
            指向错误日志文件的路径,默认值为<prefix>/logs/error.log
        --http-log-path=PATH  
            指向访问日志文件的路径,默认值为<prefix>/logs/access.log
        --pid-path=PATH
            指向Nginx启动后进行ID的文件路径,默认值为<prefix>/logs/nginx.pid
        --lock-path=PATH
            指向Nginx锁文件的存放路径,默认值为<prefix>/logs/nginx.lock

要想使用,需要卸载Nginx,再输入可以通过如下命令
            ./configure --prefix=/usr/local/nginx \
            --sbin-path=/usr/local/nginx/sbin/nginx \
            --modules-path=/usr/local/nginx/modules \
            --conf-path=/usr/local/nginx/conf/nginx.conf \
            --error-log-path=/usr/local/nginx/logs/error.log \
            --http-log-path=/usr/local/nginx/logs/access.log \
            --pid-path=/usr/local/nginx/logs/nginx.pid \
            --lock-path=/usr/local/nginx/logs/nginx.lock

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Nginx卸载
    步骤一:需要将nginx的进程关闭
        ./nginx -s stop
    步骤二:将安装的nginx进行删除
        rm -rf /usr/local/nginx
    步骤三:将安装包之前编译的环境清除掉
        make clean
    
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Nginx目录结构分析
    先安装tree插件,查看目录的工具
        yum install -y tree

tree /usr/local/nginx
        结果:    
            /usr/local/nginx
            ├── client_body_temp
            ├── conf
            │   ├── fastcgi.conf            fastcgi相关配置文件
            │   ├── fastcgi.conf.default        fastcgi.conf的备份文件
            │   ├── fastcgi_params            fastcgi的参数文件
            │   ├── fastcgi_params.default        fastcgi的参数备份文件
            │   ├── koi-utf                与编码转换映射相关的配置文件,用来将一种编码转换成另一种编码
            │   ├── koi-win                与编码转换映射相关的配置文件,用来将一种编码转换成另一种编码
            │   ├── mime.types            记录的是HTTP协议中的Content-Type的值和文件后缀名的对应关系
            │   ├── mime.types.default        mime.types的备份文件
            │   ├── nginx.conf            这个是Nginx的核心配置文件,这个文件非常重要,也是我们即将要学习的重点
            │   ├── nginx.conf.default        nginx.conf的备份文件
            │   ├── scgi_params            scgi的参数文件
            │   ├── scgi_params.default        scgi的参数备份文件
            │   ├── uwsgi_params            uwsgi的参数文件
            │   ├── uwsgi_params.default        uwsgi的参数备份文件
            │   └── win-utf                与编码转换映射相关的配置文件,用来将一种编码转换成另一种编码
            ├── fastcgi_temp
            ├── html
            │   ├── 50x.html
            │   └── index.html
            ├── logs                记录入门的文件,当nginx服务器启动后,这里面会有 access.log error.log 和nginx.pid三个文件出现。
            │   ├── access.log
            │   ├── error.log
            │   └── nginx.pid
            ├── nginxConf
            │   └── myNginx.conf
            ├── proxy_temp
            ├── sbin                是存放执行程序文件nginx
            │   └── nginx
            ├── scgi_temp
            └── uwsgi_temp

10 directories, 21 files
    
    CGI(Common Gateway Interface)
        通用网关【接口】,主要解决的问题是从客户端发送一个请求和数据,
        服务端获取到请求和数据后可以调用调用CGI【程序】处理及相应结果给客户端的一种标准规范。

more nginx/conf/mime.types
        文件记录了nginx可以处理的数据类型
    
    more nginx/logs/nginx.pid
        查看当前nginx运行的pid
    
    tail -f nginx/logs/access.log
        查看访问日志信息
    
    tail -f nginx/logs/error.log
        查看错误日志信息

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Nginx服务器启停命令
1.Nginx服务的信号控制
    查看当前运行的nginx的pid
        ps -ef | grep nginx
        等同于`more /usr/local/nginx/logs/nginx.pid`

规则:kill signal pid(master的pid)

kill -TERM 13872(master的pid)    强制退出
    kill -INT 8257(master的pid)    强制退出

kill -QUIT 8517(master的pid)    优雅退出

kill -HUP 8145(master的pid)    发送HUP信号给master进程,master进程会把控制旧的work进程不再接收新的请求,
                    等处理完请求后将旧的work进程关闭掉,然后根据nginx的配置文件重新启动新的work进程

kill USER1 `more /usr/local/nginx/logs/nginx.pid`
                    发送USR1信号给master进程,告诉Nginx重新打开日志文件

kill WINCH 8645(master的pid)    发送WINCH信号给master进程,让master进程控制不让所有的work进程在接收新的请求了,请求处理完后关闭work进程。
                    注意master进程不会被关闭掉

kill USER2 14750(master的pid)    发送USR2信号给master进程,告诉master进程要平滑升级,这个时候,会重新开启对应的master进程和work进程,
                    整个系统中将会有两个master进程,并且新的master进程的PID会被记录在`/usr/local/nginx/logs/nginx.pid`
                    而之前的旧的master进程PID会被记录在`/usr/local/nginx/logs/nginx.pid.oldbin`文件中,
                    接着再次发送QUIT信号给旧的master进程,让其处理完请求后再进行关闭

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

2.Nginx的命令行控制
    ./nginx -h    显示帮助信息
    ./nginx -?    显示帮助信息

./nginx -v    打印版本号信息
    ./nginx -V    打印版本号信息和配置信息

./nginx -t    校验 /usr/local/nginx/conf/nginx.conf 目录下配置文件的syntax
    ./nginx -T    校验 /usr/local/nginx/conf/nginx.conf 目录下配置文件的syntax并列出用到的配置文件信息

./nginx -q    在配置测试期间禁止显示非错误消息

规则:./nginx -s signal
    ./nginx -s stop        强制退出
    ./nginx -s quit        优雅退出
    ./nginx -s reopen    重新打开日志文件
    ./nginx -s reload    根据nginx的配置文件重新启动新的work进程

./nginx -p 路径        指定Nginx的prefix路径,(默认为: /usr/local/nginx/)(安装目录)
    ./nginx -c 文件        指定Nginx的配置文件路径,(默认为: conf/nginx.conf)
                注意:tc一般配合使用

./nginx -g 配置文件    用来补充Nginx配置文件,向Nginx服务指定启动时应用全局的配置

cp /usr/local/nginx/conf/nginx.conf /usr/local/abc.conf 复制配置文件

./nginx -g "pid logs/abc.pid;"  更改nginx.pid的文件为abc.pid
        这样不能使用./nginx -s stop关闭nginx

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Nginx服务器版本升级和新增模块
    如果想对Nginx的版本进行更新,或者要应用一些新的模块,最简单的做法就是停止当前的Nginx服务,然后开启新的Nginx服务。
        但是这样会导致在一段时间内,用户是无法访问服务器。
        为了解决这个问题,我们就需要用到Nginx服务器提供的平滑升级功能。
        这个也是Nginx的一大特点,使用这种方式,就可以使Nginx在7*24小时不间断的提供服务了。
    
    接下来我们分析下需求:
        Nginx的版本最开始使用的是Nginx-1.14.2,由于服务升级,需要将Nginx的版本升级到Nginx-1.16.1,要求Nginx不能中断提供服务。
    为了应对上述的需求,这里我们给大家提供两种解决方案:
        方案一:使用Nginx服务信号完成Nginx的升级
        方案二:使用Nginx安装目录的make命令完成升级

#环境准备
        (1)先准备两个版本的Nginx分别是 1.14.2和1.16.1
        (2)使用Nginx源码安装的方式将1.14.2版本安装成功并正确访问
            进入安装目录
                ./configure
                make && make install
        (3)将Nginx1.16.1进行参数配置和编译,不需要进行安装。
            进入安装目录
                ./configure
                make

#方案一:使用Nginx服务信号进行升级
        第一步:将1.14.2版本的sbin目录下的nginx进行备份
            cd /usr/local/nginx/sbin
            mv nginx nginxold
        第二步:将Nginx1.16.1安装目录编译后的objs目录下的nginx文件,拷贝到原来`/usr/local/nginx/sbin`目录下
            cd ~/nginx/core/nginx-1.16.1/objs
            cp nginx /usr/local/nginx/sbin
        第三步:发送信号USR2给Nginx的1.14.2版本对应的master进程
            kill -USER2 `cat /usr/local/logs/nginx.pid`
        第四步:发送信号QUIT给Nginx的1.14.2版本对应的master进程
            kill -QUIT `more /usr/local/logs/nginx.pid.oldbin`

#方案二:使用Nginx安装目录的make命令完成升级
        第一步:将1.14.2版本的sbin目录下的nginx进行备份
            cd /usr/local/nginx/sbin
            mv nginx nginxold
        第二步:将Nginx1.16.1安装目录编译后的objs目录下的nginx文件,拷贝到原来`/usr/local/nginx/sbin`目录下
            cd ~/nginx/core/nginx-1.16.1/objs
            cp nginx /usr/local/nginx/sbin
        第三步:进入到安装目录,执行更新
            cd /usr/local/nginx/
            make upgrade
        第四步:查看是否更新成功
            ./nginx -v

在整个过程中,其实Nginx是一直对外提供服务的。
            并且当Nginx的服务器启动成功后,我们是可以通过浏览器进行直接访问的,
            同时我们可以通过更改html目录下的页面来修改我们在页面上所看到的内容,
            那么问题来了,为什么我们要修改html目录下的文件,能不能多添加一些页面是Nginx的功能更加丰富,
            还有前面聊到Nginx的前端功能又是如何来实现的,这就需要我们对Nginx的核心配置文件进行一个详细的学习。

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Nginx核心配置文件结构
    Nginx的核心配置文件默认是放在 /usr/local/nginx/conf/nginx.conf

读取Nginx自带的Nginx配置文件,删除其中#注释的部分。指令的设置为       指令名  指令值;  
        
        -----------------------------------------------------------------------------------------------------------------
        #全局块,主要设置Nginx服务器整体运行的配置指令
        worker_processes  1;
        
        #events块,主要设置Nginx服务器与用户的网络连接,这一部分对Nginx服务器的性能影响较大
        events {        
            worker_connections  1024;
        }
        
        #http块,是Nginx服务器配置中的重要部分,代理、缓存、日志记录、第三方模块配置...
        http {
            include  mime.types;
            default_type application/octet-stream;
            sendfile on;
            keepalive_timeout 65;

#server块,是Nginx配置和虚拟主机相关的内容
            server {
                listen       80;
                server_name  localhost;

#location块,基于Nginx服务器接收请求字符串与location后面的值进行匹配,对特定请求进行处理
                location / {
                    root   html;
                    index  index.html index.htm;
                }
                error_page   500 502 503 504  /50x.html;
                location = /50x.html {
                    root   html;
                }
            }
        }
        -----------------------------------------------------------------------------------------------------------------
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

全局块

(1)user:用于配置运行Nginx服务器的worker进程的用户和用户组。
        使用user指令可以指定启动运行工作进程的用户及用户组,这样对于系统的权限访问控制的更加精细,也更加安全。

| 语法   | user user [group] |
        | ------ | ----------------- |
        | 默认值 | nobody            |
        | 位置   | 全局块            |

该属性也可以在编译的时候指定,语法如下 
            ./configure --user=user --group=group 
        如果两个地方都进行了设置,最终生效的是配置文件中的配置。
        该指令的使用方法:
            user zhangsan;
            添加的用户在linux中必须存在,如果不存在,则需要添加用户
                useradd zhangsan
    
    (2)work process指令
        1.master_process:用来指定是否开启工作进程。

| 语法   | master_process on|off; |
            | ------ | ----------------------- |
            | 默认值 | master_process on;      |
            | 位置   | 全局块                  |

2.worker_processes:用于配置Nginx生成工作进程的数量,这个是Nginx服务器实现并发处理服务的关键所在。
            理论上来说workder process的值越大,可以支持的并发处理量也越多,
            但事实上这个值的设定是需要受到来自服务器自身的限制,建议将该值和服务器CPU的内核数保存一致。

| 语法   | worker_processes     num/auto; |
            | ------ | ------------------------------ |
            | 默认值 | 1                              |
            | 位置   | 全局块                         |

如果将worker_processes设置成2,则会有两个worker进程

(3)daemon:设定Nginx是否以守护进程的方式启动。
        守护式进程是linux后台执行的一种服务进程,特点是独立于控制终端,不会随着终端关闭而停止。

| 语法   | daemon on|off; |
        | ------ | --------------- |
        | 默认值 | daemon on;      |
        | 位置   | 全局块          |

(3)pid:用来配置Nginx当前master进程的进程号ID存储的文件路径。

| 语法   | pid file;                              |
        | ------ | -------------------------------------- |
        | 默认值 | 默认为:/usr/local/nginx/logs/nginx.pid |
        | 位置   | 全局块                                 |

该属性可以通过 ./configure --pid-path=PATH 来指定

(4)error_log:用来配置Nginx的错误日志存放路径

| 语法   | error_log  file [日志级别];     |
        | ------ | ------------------------------- |
        | 默认值 | error_log logs/error.log error; |
        | 位置   | 全局块、http、server、location  |

该属性可以通过 ./configure --error-log-path=PATH 来指定

其中日志级别的值有:debug|info|notice|warn|error|crit|alert|emerg,
        翻译过来为         调试|信息|通知  |警告|错误 |临界|警报 |紧急,
        日志级别越高,打印信息越少
        这块建议大家设置的时候不要设置成info以下的等级,因为会带来大量的磁盘I/O消耗,影响Nginx的性能。

(5)include:用来引入其他配置文件,使Nginx的配置更加灵活

| 语法   | include file; |
        | ------ | ------------- |
        | 默认值 | 无            |
        | 位置   | any           |

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

events块
    (1)accept_mutex:用来设置Nginx网络连接序列化

| 语法   | accept_mutex on|off; |
        | ------ | --------------------- |
        | 默认值 | accept_mutex on;      |
        | 位置   | events                |

这个配置主要可以用来解决常说的"惊群"问题。
        大致意思是在某一个时刻,客户端发来一个请求连接,Nginx后台是以多进程的工作模式,也就是说有多个worker进程会被同时唤醒,
        但是最终只会有一个进程可以获取到连接,如果每次唤醒的进程数目太多,就会影响Nginx的整体性能。
        如果将上述值设置为on(开启状态),将会对多个Nginx进程接收连接进行序列号,一个个来唤醒接收,就防止了多个进程对连接的争抢。

(2)multi_accept:用来设置是否允许同时接收多个网络连接

| 语法   | multi_accept on|off;  |
        | ------ | --------------------- |
        | 默认值 | multi_accept off;     |
        | 位置   | events                |

如果multi_accept被禁止了,nginx一个工作进程只能同时接受一个新的连接。否则,一个工作进程可以同时接受所有的新连接

(3)worker_connections:用来配置单个worker进程最大的连接数

| 语法   | worker_connections number; |
        | ------ | -------------------------- |
        | 默认值 | worker_commections 512;    |
        | 位置   | events                     |

这里的连接数不仅仅包括和前端用户建立的连接数,而是包括所有可能的连接数。
        另外,number值不能大于操作系统支持打开的最大文件句柄数量。 
        worker_connections number*worker_processes < 50000

(4)use:用来设置Nginx服务器选择哪种事件驱动来处理网络消息。

| 语法   | use  method;   |
        | ------ | -------------- |
        | 默认值 | 根据操作系统定 |
        | 位置   | events         |

注意:此处所选择事件处理模型是Nginx优化部分的一个重要内容
        method的可选值有select/poll/epoll/kqueue等
        之前在准备centos环境的时候,我们强调过要使用linux内核在2.6以上,就是为了能使用epoll函数来优化Nginx。

另外这些值的选择,我们也可以在编译的时候使用以下参数来设置是否需要将对应的事件驱动模块编译到Nginx的内核。
            --with-select_module        --without-select_module
            --with-poll_module        --without-poll_module
            --with-epoll_module        --without-epoll_module
            --with-kqueue_module        --without-kqueue_module
        
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

http块
    #定义MIME-Type
    我们都知道浏览器中可以显示的内容有HTML、XML、GIF等种类繁多的文件、媒体等资源,浏览器为了区分这些资源,就需要使用MIME Type。
    所以说MIME Type是网络资源的媒体类型。Nginx作为web服务器,也需要能够识别前端请求的资源类型。

在Nginx的配置文件中,默认有两行配置
        include mime.types;
        default_type application/octet-stream;    //以二进制流进行处理

(1)default_type:用来配置Nginx响应前端请求默认的MIME类型。

| 语法   | default_type mime-type;   |
        | ------ | ------------------------- |
        | 默认值 | default_type text/plain; |
        | 位置   | http、server、location    |

在default_type之前还有一句 include mime.types ,include之前我们已经介绍过,
        相当于把mime.types文件中MIMT类型与相关类型文件的文件后缀名的对应关系加入到当前的配置文件中。

举例来说明:
        有些时候请求某些接口的时候需要返回指定的文本字符串或者json字符串,
        如果逻辑非常简单或者干脆是固定的字符串,那么可以使用nginx快速实现,
        这样就不用编写程序响应请求了,可以减少服务器资源占用并且响应性能非常快。

如何实现:
        1.网页加载html数据
        location /get_text {
            default_type text/html;    #这里也可以设置成text/plain
            return 200 "This is nginx's text";
        }
        
        2.网页加载json数据
        location /get_json{
            default_type application/json;    #这里也可以设置成application/json
            return 200 '{"name":"TOM","age":18}';
        }

#自定义服务日志
    Nginx中日志的类型分access.log、error.log。
        access.log:用来记录用户所有的访问请求。
        error.log:记录nginx本身运行时的错误信息,不会记录用户的访问请求。
    Nginx服务器支持对服务日志的格式、大小、输出等进行设置,需要使用到两个指令,分别是access_log和log_format指令。

(2)access_log:用来设置用户访问日志的相关属性。日志打印遵守就近原则

| 语法   | access_log path[format[buffer=size]] |
        | ------ | ------------------------------------ |
        | 默认值 | access_log logs/access.log combined; |
        | 位置   |  http ,  server ,  location          |

(3)log_format:用来指定日志的输出格式。

| 语法   | log_format name [escape=default\|json\|none] string....; |
        | ------ | -------------------------------------------------------- |
        | 默认值 | log_format combined "...";                               |
        | 位置   | http                                                     |

#其他配置指令
    (4)sendfile:用来设置Nginx服务器是否使用sendfile()传输文件,该属性可以大大提高Nginx处理静态资源的性能

| 语法   | sendfile on|off;     |
        | ------ | ---------------------- |
        | 默认值 | sendfile off;          |
        | 位置   | http、server、location |

(5)keepalive_timeout:用来设置长连接的超时时间。

| 语法   | keepalive_timeout time; |
        | ------ | ----------------------- |
        | 默认值 | keepalive_timeout 75s;  |
        | 位置   | http、server、location  |

为什么要使用keepalive?
            我们都知道HTTP是一种无状态协议,客户端向服务端发送一个TCP请求,服务端响应完毕后断开连接。
            如果客户端向服务端发送多个请求,每个请求都需要重新创建一次连接,效率相对来说比较多,使用keepalive模式,
            可以告诉服务器端在处理完一个请求后保持这个TCP连接的打开状态,若接收到来自这个客户端的其他请求,
            服务端就会利用这个未被关闭的连接,而不需要重新创建一个新连接,提升效率,
            但是这个连接也不能一直保持,这样的话,连接如果过多,也会是服务端的性能下降,这个时候就需要我们进行设置其的超时时间。

(6)keepalive_requests:用来设置一个keep-alive连接使用的次数。

| 语法   | keepalive_requests number; |
        | ------ | -------------------------- |
        | 默认值 | keepalive_requests 100;    |
        | 位置   | http、server、location     |

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

server块和location块
    server块和location块都是我们要重点讲解和学习的内容,因为我们后面会对Nginx的功能进行详细讲解,所以这块内容就放到静态资源部署的地方给大家详细说明。

本节我们主要来认识下Nginx默认给的nginx.conf中的相关内容,以及server块与location块在使用的时候需要注意的一些内容。
        server {
            listen       80;
            server_name  localhost;
            location / {
                root   html;
                index  index.html index.htm;
            }

error_page   500 502 503 504 404  /50x.html;
            location = /50x.html {
                root   html;
            }
        }

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

#Nginx进阶篇
Nginx服务器基础配置实例
    前面我们已经对Nginx服务器默认配置文件的结构和涉及的基本指令做了详细的阐述。
    通过这些指令的合理配置,我们就可以让一台Nginx服务器正常工作,并且提供基本的web服务器功能。

接下来我们将通过一个比较完整和最简单的基础配置实例,来巩固下前面所学习的指令及其配置。
    需求如下:
        (1)有如下访问:
            http://192.168.240.129:8081/server1/location1
                访问的是:index_sr1_location1.html
            http://192.168.240.129:8081/server1/location2
                访问的是:index_sr1_location2.html
            http://192.168.240.129:8082/server2/location1
                访问的是:index_sr2_location1.html
            http://192.168.240.129:8082/server2/location2
                访问的是:index_sr2_location2.html
        (2)如果访问的资源不存在,
            返回自定义的404页面
        (3)将/server1和/server2的配置使用不同的配置文件分割
            将文件放到/home/www/conf.d目录下,然后使用include进行合并
        (4)为/server1和/server2各自创建一个访问日志文件

准备相关文件,目录如下:
        www
        ├── conf.d
        │   ├── server1.conf
        │   └── server2.conf
        └── myweb
            ├── 404.html
            ├── server1
            │   ├── location1
            │   │   └── index_sr1_location1.html
            │   ├── location2
            │   │   └── index_sr1_location2.html
            │   └── logs
            │       └── access.log
            └── server2
            ├── location1
            │   └── index_sr2_location1.html
            ├── location2
            │   └── index_sr2_location2.html
            └── logs
                └── access.log

配置的内容如下:
        
        user www;    #配置允许运行Nginx工作进程的用户和用户组    需要在linux添加www用户
        worker_processes 2;    #配置运行Nginx进程生成的worker进程数
        error_log logs/error.log;    #配置Nginx服务器运行对错误日志存放的路径
        pid logs/nginx.pid;    #配置Nginx服务器允许时记录Nginx的master进程的PID文件路径和名称
        #daemon on;    #配置Nginx服务是否以守护进程方法启动
            
        events{
            accept_mutex on;    #设置Nginx网络连接序列化
            multi_accept on;    #设置Nginx的worker进程是否可以同时接收多个请求
            worker_connections 1024;    #设置Nginx的worker进程最大的连接数
            use epoll;    #设置Nginx使用的事件驱动模型
        }

http{
            include mime.types;    #定义MIME-Type
            default_type application/octet-stream;
        
            sendfile on;    #配置允许使用sendfile方式运输
        
            keepalive_timeout 65;    #配置连接超时时间

log_format server1 '===>server1 access log';    #配置请求处理日志格式
            log_format server2 '===>server2 access log';

include /home/www/conf.d/*.conf;
        }
        
    server1.conf
        server{
            listen 8081;    #配置监听端口
            server_name localhost;    #配置主机名称
            access_log /home/www/myweb/server1/logs/access.log server1;    #配置请求处理日志存放路径
            error_page 404 /404.html;    #配置错误页面

location /server1/location1{    #配置处理/server1/location1请求的location
                root /home/www/myweb;
                index index_sr1_location1.html;
            }
            
            location /server1/location2{    #配置处理/server1/location2请求的location
                root /home/www/myweb;
                index index_sr1_location2.html;
            }
            
            location = /404.html {        #配置错误页面转向
                root /home/www/myweb;
                index 404.html;
            }
        }
    
    server2.conf
        server{
        
            listen 8082;    #配置监听端口
            server_name localhost;    #配置主机名称
            access_log /home/www/myweb/server2/logs/access.log server2;    #配置请求处理日志存放路径
            error_page 404 /404.html;    #配置错误页面,对404.html做了定向配置
            
            location /server2/location1{    #配置处理/server1/location1请求的location
                root /home/www/myweb;
                index index_sr2_location1.html;
            }
            
            location /server2/location2{    #配置处理/server2/location2请求的location
                root /home/www/myweb;
                index index_sr2_location2.html;
            }
            
            location = /404.html {        #配置错误页面转向
                root /home/www/myweb;
                index 404.html;
            }
        }
    
    访问测试:
        http://192.168.240.129:8081/server1/location1
        http://192.168.240.129:8081/server1/location2
        http://192.168.240.129:8082/server2/location1
        http://192.168.240.129:8082/server2/location2

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Nginx服务操作的问题
    经过前面的操作,我们会发现,如果想要启动、关闭或重新加载nginx配置文件,都需要先进入到nginx的安装目录的sbin目录,
    然后使用nginx的二级制可执行文件来操作,相对来说操作比较繁琐,这块该如何优化?
    另外如果我们想把Nginx设置成随着服务器启动就自动完成启动操作,又该如何来实现?
    这就需要用到接下来我们要讲解的两个知识点:
        Nginx配置成系统服务
        Nginx命令配置到系统环境

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

#Nginx配置成系统服务
    把Nginx应用服务设置成为系统服务,方便对Nginx服务的启动和停止等相关操作,具体实现步骤:
    (1) 在 /usr/lib/systemd/system 目录下添加nginx.service,内容如下:
        vim /usr/lib/systemd/system/nginx.service
        
        [Unit]
        Description=nginx web service
        Documentation=http://nginx.org/en/docs/
        After=network.target

[Service]
        Type=forking
        PIDFile=/usr/local/nginx/logs/nginx.pid
        ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
        ExecStart=/usr/local/nginx/sbin/nginx
        ExecReload=/usr/local/nginx/sbin/nginx -s reload
        ExecStop=/usr/local/nginx/sbin/nginx -s stop
        PrivateTmp=true

[Install]
        WantedBy=default.target
    
    (2)添加完成后如果权限有问题需要进行权限设置
        chmod 755 /usr/lib/systemd/system/nginx.service
    
    (3)使用系统命令来操作Nginx服务
        启动: systemctl start nginx
        停止: systemctl stop nginx
        重启: systemctl restart nginx
        重新加载配置文件: systemctl reload nginx
        查看nginx状态: systemctl status nginx
        开机启动: systemctl enable nginx
        开机不启动: systemctl disable nginx

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

#Nginx命令配置到系统环境
    前面我们介绍过Nginx安装目录下的二级制可执行文件`nginx`的很多命令,要想使用这些命令前提是需要进入sbin目录下才能使用,很不方便,
    如何去优化,我们可以将该二进制可执行文件加入到系统的环境变量,这样的话在任何目录都可以使用nginx对应的相关命令。
    具体实现步骤如下:

演示可删除
        /usr/local/nginx/sbin/nginx -V
        cd /usr/local/nginx/sbin  nginx -V
        如何优化???
    
        (1)修改 /etc/profile 文件
            vim /etc/profile
            在最后一行添加
            export PATH=$PATH:/usr/local/nginx/sbin
        (2)使之立即生效
            source /etc/profile
        (3)执行nginx命令
            nginx -V

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Nginx静态资源部署
#Nginx静态资源概述
    上网去搜索访问资源对于我们来说并不陌生,通过浏览器发送一个HTTP请求实现从客户端发送请求到服务器端获取所需要内容后并把内容回显展示在页面的一个过程。
    这个时候,我们所请 求的内容就分为两种类型,一类是静态资源、一类是动态资源。

静态资源即指在服务器端真实存在并且能直接拿来展示的一些文件,比如常见的html页面、css文件、js文件、图 片、视频等资源;
    动态资源即指在服务器端真实存在但是要想获取需要经过一定的业务逻辑处理,根据不同的条件展示在页面不同这 一部分内容,
    比如说报表数据展示、根据当前登录用户展示相关具体数据等资源;

Nginx处理静态资源的内容,我们需要考虑下面这几个问题:
        (1)静态资源的配置指令
        (2)静态资源的配置优化
        (3)静态资源的压缩配置指令
        (4)静态资源的缓存处理
        (5)静态资源的访问控制,包括跨域问题和防盗链问题

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

#Nginx静态资源的配置指令
    (1)listen指令:用来配置监听端口。

| 语法   | listen address[:port][default_server]...;<br/>listen port [default_server]...; |
        | ------ | ------------------------------------------------------------------------------ |
        | 默认值 | listen *:80 \| *:8000                                                          |
        | 位置   | server                                                                         |

listen的设置比较灵活,我们通过几个例子来把常用的设置方式熟悉下:

listen 127.0.0.1:8000; // listen localhost:8000 监听指定的IP和端口
            listen 127.0.0.1;    监听指定IP的所有端口
            listen 8000;    监听指定端口上的连接
            listen *:8000;    监听指定端口上的连接

default_server属性是标识符,用来将此虚拟主机设置成默认主机。
        所谓的默认主机指的是如果没有匹配到对应的address:port,则会默认执行的。
        如果不指定默认使用的是第一个server。

server{
                listen 8080;
                server_name 127.0.0.1;
                location /{
                    root html;
                    index index.html;
                }
            }

server{
                listen 8080 default_server;
                server_name localhost;
                default_type text/plain;
                return 444 'This is a error request';
            }

(2)server_name指令:用来设置虚拟主机服务名称。

127.0.0.1 、 localhost 、域名[www.baidu.com | www.jd.com]

| 语法   | server_name  name ...;<br/>name可以提供多个中间用空格分隔 |
        | ------ | --------------------------------------------------------- |
        | 默认值 | server_name  "";                                          |
        | 位置   | server                                                    |

关于server_name的配置方式有三种,分别是:
            精确匹配
            通配符匹配
            正则表达式匹配

配置方式一:精确匹配
            如:

server {
                    listen 80;
                    server_name www.itcast.cn www.itheima.cn;
                    ...
                }

补充小知识点:
                hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,
                其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,
                当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从hosts文件中寻找对应的IP地址,
                一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。

host文件的位置:
                windows:C:\Windows\System32\drivers\etc
                centos:/etc/hosts

因为域名是要收取一定的费用,所以我们可以使用修改hosts文件来制作一些虚拟域名来使用。需要修改  /etc/hosts 文件来添加
                vim /etc/hosts
                127.0.0.1 www.baidu.com
                127.0.0.1 www.qq.com

配置方式二:使用通配符配置
            
            server_name中支持通配符"*",但需要注意的是通配符不能出现在域名的中间,只能出现在首段或尾段,如:

server {
                    listen 80;
                    server_name  *.itcast.cn    www.itheima.*;
                    # www.itcast.cn abc.itcast.cn www.itheima.cn www.itheima.com
                    ...
                }

下面的配置就会报错

server {
                    listen 80;
                    server_name  www.*.cn www.itheima.c*
                    ...
                }

配置方式三:使用正则表达式配置

server_name中可以使用正则表达式,并且使用 ~ 作为正则表达式字符串的开始标记。

常见的正则表达式

| 代码  | 说明                                                       |
                | ----- | ---------------------------------------------------------- |
                | ^     | 匹配搜索字符串开始位置                                     |
                | $     | 匹配搜索字符串结束位置                                     |
                | .     | 匹配除换行符\n之外的任何单个字符                           |
                | \     | 转义字符,将下一个字符标记为特殊字符                       |
                | [xyz] | 字符集,与任意一个指定字符匹配                             |
                | [a-z] | 字符范围,匹配指定范围内的任何字符                         |
                | \w    | 与以下任意字符匹配 A-Z a-z 0-9 和下划线,等效于[A-Za-z0-9_] |
                | \d    | 数字字符匹配,等效于[0-9]                                  |
                | {n}   | 正好匹配n次                                                |
                | {n,}  | 至少匹配n次                                                |
                | {n,m} | 匹配至少n次至多m次                                         |
                | *     | 零次或多次,等效于{0,}                                     |
                | +     | 一次或多次,等效于{1,}                                     |
                | ?     | 零次或一次,等效于{0,1}                                    |

配置如下:

server{
                    listen 80;
                    server_name ~^www\.(\w+)\.com$;
                    default_type text/plain;
                    return 200 $1  $2 ..;
                }
                注意 ~后面不能加空格,括号可以取值

匹配执行顺序

由于server_name指令支持通配符和正则表达式,因此在包含多个虚拟主机的配置文件中,
            可能会出现一个名称被多个虚拟主机的server_name匹配成功,当遇到这种情况,当前的请求交给谁来处理呢?

举例:

server{
                    listen 80;
                    server_name ~^www\.\w+\.com$;
                    default_type text/plain;
                    return 200 'regex_success';
                }

server{
                    listen 80;
                    server_name www.itheima.*;
                    default_type text/plain;
                    return 200 'wildcard_after_success';
                }

server{
                    listen 80;
                    server_name *.itheima.com;
                    default_type text/plain;
                    return 200 'wildcard_before_success';
                }

server{
                    listen 80;
                    server_name www.itheima.com;
                    default_type text/plain;
                    return 200 'exact_success';
                }

server{
                    listen 80 default_server;
                    server_name _;
                    default_type text/plain;
                    return 444 'default_server not found server';
                }

结论:
            exact_success
            wildcard_before_success
            wildcard_after_success
            regex_success
            default_server not found server!!

No1:准确匹配server_name
            No2:通配符在开始时匹配server_name成功
            No3:通配符在结束时匹配server_name成功
            No4:正则表达式匹配server_name成功
            No5:被默认的default_server处理,如果没有指定默认找第一个server

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

location指令:用来设置请求的URI

server{
        listen 80;
        server_name localhost;

location / {
        
        }

location /abc{
        
        }
        ...
    }

| 语法   | location [  =  \|   ~  \|  ~*   \|   ^~   \|@ ] uri{...} |
    | ------ | -------------------------------------------------------- |
    | 默认值 | —                                                        |
    | 位置   | server,location                                          |

uri变量是待匹配的请求字符串,可以不包含正则表达式,也可以包含正则表达式,
    那么nginx服务器在搜索匹配location的时候,是先使用不包含正则表达式进行匹配,
    找到一个匹配度最高的一个,然后在通过包含正则表达式的进行匹配,如果能匹配到直接访问,
    匹配不到,就使用刚才匹配度最高的那个location来处理请求。

属性介绍:

1. 不带符号,要求必须以指定模式开始

server {
                listen 80;
                server_name 127.0.0.1;
                location /abc{
                    default_type text/plain;
                    return 200 "access success";
                }
            }

以下访问都是正确的
            http://192.168.200.133/abc
            http://192.168.200.133/abc?p1=TOM
            http://192.168.200.133/abc/
            http://192.168.200.133/abcdef

2. = :  用于不包含正则表达式的uri前,必须与指定的模式精确匹配

server {
                listen 80;
                server_name 127.0.0.1;
                location =/abc{
                    default_type text/plain;
                    return 200 "access success";
                }
            }

可以匹配到
            http://192.168.200.133/abc
            http://192.168.200.133/abc?p1=TOM
            匹配不到
            http://192.168.200.133/abc/
            http://192.168.200.133/abcdef

3. ~ : 用于表示当前uri中包含了正则表达式,并且区分大小写

server {
                    listen 80;
                    server_name 127.0.0.1;
                    location ~^/abc\w${
                        default_type text/plain;
                        return 200 "access success";
                    }
                }

4. ~*:  用于表示当前uri中包含了正则表达式,并且不区分大小写

server {
                listen 80;
                server_name 127.0.0.1;
                location ~*^/abc\w${
                    default_type text/plain;
                    return 200 "access success";
                }
            }

换句话说,如果uri包含了正则表达式,需要用上述两个符合来标识

5. ^~: 用于不包含正则表达式的uri前,功能和不加符号的一致,唯一不同的是,如果模式匹配,那么就停止搜索其他模式了。

server {
                listen 80;
                server_name 127.0.0.1;
                location ^~/abc{
                    default_type text/plain;
                    return 200 "access success";
                }
            }

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

设置请求资源的目录root / alias

root:设置请求的根目录

| 语法   | root path;             |
        | ------ | ---------------------- |
        | 默认值 | root html;             |
        | 位置   | http、server、location |

path为Nginx服务器接收到请求以后查找资源的根目录路径。

alias:用来更改location的URI

| 语法   | alias path; |
        | ------ | ----------- |
        | 默认值 | —           |
        | 位置   | location    |

path为修改后的根路径。

以上两个指令都可以来指定访问资源的路径,那么这两者之间的区别是什么?

举例说明:

(1)在 /usr/local/nginx/html 目录下创建一个 images目录,并在目录下放入一张图片`mv.png`图片

location /images {
            root /usr/local/nginx/html;
        }

访问图片的路径为:
            http://192.168.200.133/images/mv.png

(2)如果把root改为alias

location /images {
            alias /usr/local/nginx/html;
        }

再次访问上述地址,页面会出现404的错误,查看错误日志会发现是因为地址不对,所以验证了:

root的处理结果是: root路径+location路径
            /usr/local/nginx/html/images/mv.png
            alias的处理结果是:使用alias路径替换location路径
            /usr/local/nginx/html/images

需要在alias后面路径改为

location /images {
                alias /usr/local/nginx/html/images;
            }

(3)如果location路径是以/结尾,则alias也必须是以/结尾,root没有要求

将上述配置修改为

location /images/ {
                alias /usr/local/nginx/html/images;
            }

访问就会出问题,查看错误日志还是路径不对,所以需要把alias后面加上 /

小结:
        root的处理结果是: root路径+location路径
        alias的处理结果是:使用alias路径替换location路径
        alias是一个目录别名的定义,root则是最上层目录的含义。
        如果location路径是以/结尾,则alias也必须是以/结尾,root没有要求

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

index指令:设置网站的默认首页

| 语法   | index file ...;        |
    | ------ | ---------------------- |
    | 默认值 | index index.html;      |
    | 位置   | http、server、location |

index后面可以跟多个设置,如果访问的时候没有指定具体访问的资源,则会依次进行查找,找到第一个为止。

举例说明:

location / {
            root /usr/local/nginx/html;
            index index.html index.htm;
        }

访问该location的时候,可以通过 http://ip:port/,地址后面如果不添加任何内容,则默认依次访问index.html和index.htm,找到第一个来进行返回

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

error_page指令:设置网站的错误页面

| 语法   | error_page code ... [=[response]] uri; |
    | ------ | -------------------------------------- |
    | 默认值 | —                                      |
    | 位置   | http、server、location......           |

当出现对应的响应code后,如何来处理。

举例说明:
        (1)可以指定具体跳转的地址

server {
                error_page 404 http://www.itcast.cn;
            }

(2)可以指定重定向地址

server{
                error_page 404 /50x.html;
                error_page 500 502 503 504 /50x.html;
                location =/50x.html{
                    root html;
                }
            }

(3)使用location的 @符合完成错误信息展示

server{
                error_page 404 @jump_to_error;
                location @jump_to_error {
                    default_type text/plain;
                    return 404 'Not Found Page...';
                }
            }

可选项`=[response]`的作用是用来将相应代码更改为另外一个

server{
                error_page 404 =200 /50x.html;
                location =/50x.html{
                    root html;
                }
            }

这样的话,当返回404找不到对应的资源的时候,在浏览器上可以看到,最终返回的状态码是200,
            这块需要注意下,编写error_page后面的内容,404后面需要加空格,200前面不能加空格

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

静态资源优化配置语法

Nginx对静态资源如何进行优化配置。这里从三个属性配置进行优化:
        sendfile on;
        tcp_nopush on;
        tcp_nodeplay on;

(1)sendfile:用来开启高效的文件传输模式。

| 语法   | sendfile on | off;          |
        | ------ | ------------------------- |
        | 默认值 | sendfile off;               |
        | 位置   | http、server、location... |

请求静态资源的过程:
            客户端通过网络接口向服务端发送请求,操作系统将这些客户端的请求传递给服务器端应用程序,
            服务器端应用程序会处理这些请求,请求处理完成以后,操作系统还需要将处理得到的结果通过网络适配器传递回去。

如:

server {
                listen 80;
                server_name localhost;
                location / {
                    root html;
                    index index.html;
                }
            }

在html目录下有一个welcome.html页面,访问地址
                http://192.168.200.133/welcome.html

(2)tcp_nopush:该指令必须在sendfile打开的状态下才会生效,主要是用来提升网络包的传输'效率'

| 语法   | tcp_nopush on | off;   |
        | ------ | ---------------------- |
        | 默认值 | tcp_nopush off;         |
        | 位置   | http、server、location |

(3)tcp_nodelay:该指令必须在keep-alive连接开启的情况下才生效,来提高网络包传输的'实时性'

| 语法   | tcp_nodelay on\|off;   |
        | ------ | ---------------------- |
        | 默认值 | tcp_nodelay on;        |
        | 位置   | http、server、location |

经过刚才的分析,"tcp_nopush"和”tcp_nodelay“看起来是"互斥的",那么为什么要将这两个值都打开,
        这个大家需要知道的是在linux2.5.9以后的版本中两者是可以兼容的,
        三个指令都开启的好处是,sendfile可以开启高效的文件传输模式,tcp_nopush开启可以确保在发送到客户端之前数据包已经充分“填满”, 
        这大大减少了网络开销,并加快了文件发送的速度。
        然后,当它到达最后一个可能因为没有“填满”而暂停的数据包时,Nginx会忽略tcp_nopush参数,然后,tcp_nodelay强制套接字发送数据。
        由此可知,TCP_NOPUSH可以与TCP_NODELAY一起设置,它比单独配置TCP_NODELAY具有更强的性能。所以我们可以使用如下配置来优化Nginx静态资源的处理
            sendfile on;
            tcp_nopush on;
            tcp_nodelay on;

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Nginx静态资源压缩实战 
    经过上述内容的优化,我们再次思考一个问题,假如在满足上述优化的前提下,我们传送一个1M的数据和一个10M的数据那个效率高?
    答案显而易见,传输内容小,速度就会快。
    那么问题又来了,同样的内容,如果把大小降下来,我们脑袋里面要蹦出一个词就是"压缩",接下来,我们来学习Nginx的静态资源压缩模块。

在Nginx的配置文件中可以通过配置gzip来对静态资源进行压缩,相关的指令可以配置在http块、server块和location块中,Nginx可以通过
        ngx_http_gzip_module
        ngx_http_gzip_static_module
        ngx_http_gunzip_module
        对这些指令进行解析和处理。

接下来我们从以下内容进行学习
        (1)Gzip各模块支持的配置指令
        (2)Gzip压缩功能的配置
        (3)Gzip和sendfile的冲突解决
        (4)浏览器不支持Gzip的解决方案

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Gzip模块配置指令
    接下来所学习的指令都来自ngx_http_gzip_module模块,该模块会在nginx安装的时候内置到nginx的安装环境中,也就是说我们可以直接使用这些指令。

1. gzip指令:该指令用于开启或者关闭gzip功能

| 语法   | gzip on\|off;             |
        | ------ | ------------------------- |
        | 默认值 | gzip off;                 |
        | 位置   | http、server、location... |

注意只有该指令为打开状态,下面的指令才有效果

http{
                gzip on;
            }

2. gzip_types指令:该指令可以根据响应页的MIME类型选择性地开启Gzip压缩功能

| 语法   | gzip_types mime-type ...; |
        | ------ | ------------------------- |
        | 默认值 | gzip_types text/html;     |
        | 位置   | http、server、location    |

所选择的值可以从mime.types文件中进行查找,也可以使用"*"代表所有。

http{
                gzip_types application/javascript;
            }

3. gzip_comp_level指令:该指令用于设置Gzip压缩程度,级别从1-9,1表示要是程度最低,要是效率最高,9刚好相反,压缩程度最高,但是效率最低最费时间。

| 语法   | gzip_comp_level level; |
        | ------ | ---------------------- |
        | 默认值 | gzip_comp_level 1;     |
        | 位置   | http、server、location |

http{
                gzip_comp_level 6;
            }

4. gzip_vary指令:该指令用于设置使用Gzip进行压缩发送是否携带“Vary:Accept-Encoding”头域的响应头部。主要是告诉接收方,所发送的数据经过了Gzip压缩处理

| 语法   | gzip_vary on\|off;     |
        | ------ | ---------------------- |
        | 默认值 | gzip_vary off;         |
        | 位置   | http、server、location |

5. gzip_buffers指令:该指令用于处理请求压缩的缓冲区数量和大小。

| 语法   | gzip_buffers number size;  |
        | ------ | -------------------------- |
        | 默认值 | gzip_buffers 32 4k\|16 8k; |
        | 位置   | http、server、location     |

number:指定Nginx服务器向系统申请缓存空间个数
        size:指的是每个缓存空间的大小。
        主要实现的是申请number个每个大小为size的内存空间。这个值的设定一般会和服务器的操作系统有关,所以建议此项不设置,使用默认值即可。

gzip_buffers 4 16K;      #缓存空间大小

6. gzip_disable指令:针对不同种类客户端发起的请求,可以选择性地开启和关闭Gzip功能。

| 语法   | gzip_disable regex ...; |
        | ------ | ----------------------- |
        | 默认值 | —                       |
        | 位置   | http、server、location  |

regex:根据客户端的浏览器标志(user-agent)来设置,支持使用正则表达式。
        指定的浏览器标志不使用Gzip.该指令一般是用来排除一些明显不支持Gzip的浏览器。

gzip_disable "MSIE [1-6]\.";

7. gzip_http_version指令:针对不同的HTTP协议版本,可以选择性地开启和关闭Gzip功能。

| 语法   | gzip_http_version 1.0\|1.1; |
        | ------ | --------------------------- |
        | 默认值 | gzip_http_version 1.1;      |
        | 位置   | http、server、location      |

该指令是指定使用Gzip的HTTP最低版本,该指令一般采用默认值即可。

8. gzip_min_length指令:该指令针对传输数据的大小,可以选择性地开启和关闭Gzip功能

| 语法   | gzip_min_length length; |
        | ------ | ----------------------- |
        | 默认值 | gzip_min_length 20;     |
        | 位置   | http、server、location  |

nignx计量大小的单位:bytes[字节] / kb[千字节] / M[兆]

例如: 1024 / 10k|K / 10m|M

Gzip压缩功能对大数据的压缩效果明显,但是如果要压缩的数据比较小的化,可能出现越压缩数据量越大的情况,
        因此我们需要根据响应内容的大小来决定是否使用Gzip功能,响应页面的大小可以通过头信息中的 Content-Length 来获取。
        但是如何使用了Chunk编码动态压缩,该指令将被忽略。建议设置为1K或以上。

9. gzip_proxied指令:该指令设置是否对服务端返回的结果进行Gzip压缩。

| 语法   | gzip_proxied  off\|expired\|no-cache\|<br/>no-store\|private\|no_last_modified\|no_etag\|auth\|any; |
        | ------ | ------------------------------------------------------------ |
        | 默认值 | gzip_proxied off;                                            |
        | 位置   | http、server、location                                       |

off            关闭Nginx服务器对后台服务器返回结果的Gzip压缩
        expired            启用压缩,如果header头中包含 "Expires" 头信息
        no-cache        启用压缩,如果header头中包含 "Cache-Control:no-cache" 头信息
        no-store        启用压缩,如果header头中包含 "Cache-Control:no-store" 头信息
        private            启用压缩,如果header头中包含 "Cache-Control:private" 头信息
        no_last_modified    启用压缩,如果header头中不包含 "Last-Modified" 头信息
        no_etag            启用压缩,如果header头中不包含 "ETag" 头信息
        auth            启用压缩,如果header头中包含 "Authorization" 头信息
        any            无条件启用压缩

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Gzip压缩功能的实例配置

gzip on;            #开启gzip功能
    gzip_types *;            #压缩源文件类型,根据具体的访问资源类型设定
    gzip_comp_level 6;        #gzip压缩级别
    gzip_min_length 1024;        #进行压缩响应页面的最小长度,content-length
    gzip_buffers 4 16K;        #缓存空间大小
    gzip_http_version 1.1;        #指定压缩响应所需要的最低HTTP请求版本
    gzip_vary  on;            #往头信息中添加压缩标识
    gzip_disable "MSIE [1-6]\.";    #对IE6以下的版本都不进行压缩
    gzip_proxied  off;        #nginx作为反向代理压缩服务端返回数据的条件

这些配置在很多地方可能都会用到,所以我们可以将这些内容抽取到一个配置文件中,然后通过include指令把配置文件再次加载到nginx.conf配置文件中,方法使用。

nginx_gzip.conf
        gzip on;
        gzip_types *;
        gzip_comp_level 6;
        gzip_min_length 1024;
        gzip_buffers 4 16K;
        gzip_http_version 1.1;
        gzip_vary  on;
        gzip_disable "MSIE [1-6]\.";
        gzip_proxied  off;

nginx.conf
        include nginx_gzip.conf

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Gzip和sendfile共存问题

前面在讲解sendfile的时候,提到过,开启sendfile以后,在读取磁盘上的静态资源文件的时候,可以减少拷贝的次数,
    可以不经过用户进程将静态文件通过网络设备发送出去,但是Gzip要想对资源压缩,是需要经过用户进程进行操作的。
    所以如何解决两个设置的共存问题。

可以使用ngx_http_gzip_static_module模块的gzip_static指令来解决。

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

gzip_static指令:检查与访问资源同名的.gz文件时,response中以gzip相关的header返回.gz文件的内容。

| 语法   | **gzip_static** on \| off \| always; |
    | ------ | ------------------------------------ |
    | 默认值 | gzip_static off;                     |
    | 位置   | http、server、location               |

添加上述命令后,会报一个错误,`unknown directive "gzip_static"`主要的原因是Nginx默认是没有添加ngx_http_gzip_static_module模块。如何来添加?

添加模块到Nginx的实现步骤
        (1)查询当前Nginx的配置参数
            nginx -V
        (2)将nginx安装目录下sbin目录中的nginx二进制文件进行更名
            cd /usr/local/nginx/sbin
            mv nginx nginxold
        (3) 进入Nginx的安装目录
            cd /root/nginx/core/nginx-1.16.1
        (4)执行make clean清空之前编译的内容
            make clean
        (5)使用configure来配置参数
            ./configure --with-http_gzip_static_module
        (6)使用make命令进行编译
            make
        (7) 将objs目录下的nginx二进制执行文件移动到nginx安装目录下的sbin目录中
            mv objs/nginx /usr/local/nginx/sbin
        (8)执行更新命令
            make upgrade

gzip_static测试使用
        (1)直接访问
            http://192.168.240.129/jquery.js 
        (2)使用gzip命令进行压缩
            cd /usr/local/nginx/html
            gzip jquery.js
        (3)再次访问 http://192.168.240.129/jquery.js

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

静态资源的缓存处理
    什么是缓存?
        缓存(cache),原始意义是指访问速度比一般随机存取存储器(RAM)快的一种高速存储器,
        通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。
        缓存的设置是所有现代计算机系统发挥高性能的重要因素之一。

什么是web缓存?
        Web缓存是指一个Web资源(如html页面,图片,js,数据等)存在于Web服务器和客户端(浏览器)之间的副本。
        缓存会根据进来的请求保存输出内容的副本;当下一个请求来到的时候,如果是相同的URL,
        缓存会根据缓存机制决定是直接使用副本响应访问请求,还是向源服务器再次发送请求。
        比较常见的就是浏览器会缓存访问过网站的网页,当再次访问这个URL地址的时候,
        如果网页没有更新,就不会再次下载网页,而是直接使用本地缓存的网页。
        只有当网站明确标识资源已经更新,浏览器才会再次下载网页

web缓存的种类
        客户端缓存
            浏览器缓存
        服务端缓存
            Nginx / Redis / Memcached等

浏览器缓存
        是为了节约网络的资源加速浏览,浏览器在用户磁盘上对最近请求过的文档进行存储,
        当访问者再次请求这个页面时,浏览器就可以从本地磁盘显示文档,这样就可以加速页面的阅览。

为什么要用浏览器缓存
        成本最低的一种缓存实现
        减少网络带宽消耗
        降低服务器压力
        减少网络延迟,加快页面打开速度

浏览器缓存的执行流程
        HTTP协议中和页面缓存相关的字段,我们先来认识下:

| header        | 说明                                        |
            | ------------- | ------------------------------------------- |
            | Expires       | 缓存过期的日期和时间                        |
            | Cache-Control | 设置和缓存相关的配置信息                    |
            | Last-Modified | 请求资源最后修改时间                        |
            | ETag          | 请求变量的实体标签的当前值,比如文件的MD5值 |

(1)用户首次通过浏览器发送请求到服务端获取数据,客户端是没有对应的缓存,所以需要发送request请求来获取数据;
            (2)服务端接收到请求后,获取服务端的数据及服务端缓存的允许后,返回200的成功状态码并且在响应头上附上对应资源以及缓存信息;
            (3)当用户再次访问相同资源的时候,客户端会在浏览器的缓存目录中查找是否存在响应的缓存文件
            (4)如果没有找到对应的缓存文件,则走(2)步
            (5)如果有缓存文件,接下来对缓存文件是否过期进行判断,过期的判断标准是(Expires),
            (6)如果没有过期,则直接从本地缓存中返回数据进行展示
            (7)如果Expires过期,接下来需要判断缓存文件是否发生过变化
            (8)判断的标准有两个,一个是ETag(Entity Tag),一个是Last-Modified
            (9)判断结果是未发生变化,则服务端返回304,直接从缓存文件中获取数据
            (10)如果判断是发生了变化,重新从服务端获取数据,并根据缓存协商(服务端所设置的是否需要进行缓存数据的设置)来进行数据缓存。

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

浏览器缓存相关指令
    Nginx需要进行缓存相关设置,就需要用到如下的指令

1. expires指令:该指令用来控制页面缓存的作用。可以通过该指令控制HTTP应答中的“Expires"和”Cache-Control"

| 语法   | expires   [modified] time<br/>expires epoch\|max\|off; |
            | ------ | ------------------------------------------------------ |
            | 默认值 | expires off;                                           |
            | 位置   | http、server、location                                 |

time:可以整数也可以是负数,指定过期时间,如果是负数,Cache-Control则为no-cache,如果为整数或0,则Cache-Control的值为max-age=time;

epoch: 指定Expires的值为'1 January,1970,00:00:01 GMT'(1970-01-01 00:00:00),Cache-Control的值no-cache

max:指定Expires的值为'31 December2037 23:59:59GMT' (2037-12-31 23:59:59) ,Cache-Control的值为10年

off:默认不缓存。

2. add_header指令:用来添加指定的响应头和响应值。

| 语法   | add_header name value [always]; |
            | ------ | ------------------------------- |
            | 默认值 | —                               |
            | 位置   | http、server、location...       |

Cache-Control作为响应头信息,可以设置如下值:

缓存响应指令:
                Cache-control: must-revalidate
                Cache-control: no-cache
                Cache-control: no-store
                Cache-control: no-transform
                Cache-control: public
                Cache-control: private
                Cache-control: proxy-revalidate
                Cache-Control: max-age=<seconds>
                Cache-control: s-maxage=<seconds>

| 指令             | 说明                                           |
                | ---------------- | ---------------------------------------------- |
                | must-revalidate  | 可缓存但必须再向源服务器进行确认               |
                | no-cache         | 缓存前必须确认其有效性                         |
                | no-store         | 不缓存请求或响应的任何内容                     |
                | no-transform     | 代理不可更改媒体类型                           |
                | public           | 可向任意方提供响应的缓存                       |
                | private          | 仅向特定用户返回响应                           |
                | proxy-revalidate | 要求中间缓存服务器对缓存的响应有效性再进行确认 |
                | max-age=<秒>     | 响应最大Age值                                  |
                | s-maxage=<秒>    | 公共缓存服务器响应的最大Age值                  |

max-age=[秒]:

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Nginx的跨域问题解决
    这块内容,我们主要从以下方面进行解决:
    什么情况下会出现跨域问题?
    实例演示跨域问题
    具体的解决方案是什么?

#同源策略
        浏览器的同源策略:是一种约定,是浏览器最核心也是最基本的安全功能,如果浏览器少了同源策略,则浏览器的正常功能可能都会受到影响。

同源:  协议、域名(IP)、端口相同即为同源

http://192.168.200.131/user/1
            https://192.168.200.131/user/1
            不是同源

http://192.168.200.131/user/1
            http://192.168.200.132/user/1
            不是同源

http://192.168.200.131/user/1
            http://192.168.200.131:8080/user/1
            不是同源

http://www.nginx.com/user/1
            http://www.nginx.org/user/1
            不是同源

http://192.168.200.131/user/1
            http://192.168.200.131:8080/user/1
            不是同源

http://www.nginx.org:80/user/1
            http://www.nginx.org/user/1
            满足

#跨域问题
        简单描述下:
            有两台服务器分别为A,B,如果从服务器A的页面发送异步请求到服务器B获取数据,
            如果服务器A和服务器B不满足同源策略,则就会出现跨域问题。

#跨域问题的案例演示
        出现跨域问题会有什么效果?,接下来通过一个需求来给大家演示下:

(1)nginx的html目录下新建一个a.html

<html>
              <head>
                <meta charset="utf-8">
                <title>跨域问题演示</title>
                <script src="jquery.js"></script>
                <script>
                    $(function(){
                    $("#btn").click(function(){
                        $.get('http://192.168.200.133:8080/getUser',function(data){
                            alert(JSON.stringify(data));
                        });
                    });
                    });
                </script>
              </head>
              <body>
                <input type="button" value="获取数据" id="btn"/>
              </body>
            </html>

Nginx的简单使用相关推荐

  1. Nginx+Tomcat简单集群配置

    2019独角兽企业重金招聘Python工程师标准>>> 1.软件准备 下载Nginx和Tomcat Nginx:http://nginx.org/en/download.html 这 ...

  2. linux下安装两个nginx教程,在linux系统下安装两个nginx的简单方法

    在linux系统下安装两个nginx的简单方法 发布时间:2017-03-09 12:08 来源:互联网 当前栏目:web技术类 在linux下安装nginx的时候,一般在./configure的阶段 ...

  3. nginx: 编写简单handler模块

    1.ubuntu安装nginx服务 (1)安装依赖库: 安装gcc g++的依赖库 apt-get install build-essential apt-get install libtool安装p ...

  4. 使用docker部署nginx搭建简单的idea-2019 jrebel插件激活服务器

    使用docker部署nginx搭建简单的idea-2019 jrebel插件激活服务器 前言 之前用的jrebel激活方式一直都是用的 *lanyus* 大神的 [jrebel激活](http://i ...

  5. kubernetes学习(4)---Nginx搭建简单的文件服务器

    5.搭建一个简单的文件服务器 在运维主机(192.168.100.50)上使用nginx搭建简单的文件服务器 # 创建相应的目录 mkdir -p /data/k8s-yaml# 安装nginx yu ...

  6. FTP服务器安装+NGINX搭建简单的图片服务器(Linux)

    ftp+nginx实现简单的图片服务器 最近在做个人网站,设计到图片的上传和保存,于是想做一个专门存图片的服务器.以前用过一个tomcat web服务器做图片的服务器,但缺点就是必须和部署系统在同一台 ...

  7. SpringCloud一代组件+nginx实现简单的登录注册

    SpringCloud一代组件+Nginx实现简单的登录注册 1.要求 2.实现步骤 1. 首先将项目骨架创建出来 2.然后将每个功能对应的子项目创建出来 3.导入对应的数据库和配置全局配置 4.配置 ...

  8. php etcd 服务发现,confd+etcd+nginx 实现简单服务发现

    一. 项目背景 随着微服务的兴起,大量接口服务化.当新的微服务加入或微服务的信息发生变更时,服务方如何通知周边系统.使用方如何知道这些变更呢? 这时就需要服务的注册配置和发现功能. 服务注册配置--存 ...

  9. windows下nginx的简单使用

    在网上是可以查得到关于nginx的一些使用,每次要用的时候都会去查一下别人的用法.既然自己用到的频率会比较高,那何不自己做个小小的笔记呢. 我使用的是windows版nginx-1.14.0,版本对命 ...

  10. r语言默认工作目录document_使用 Docker 和 Nginx 实现简单目录索引服务

    本文将会介绍如何使用 Docker.Node.JavaScript.Traefik 完成一个简单的目录索引服务,全部代码在 300 行以内.相关代码已开源至 GitHub ,文末有链接,感兴趣可以自取 ...

最新文章

  1. laravel和dingoapi的结合使用
  2. Angular开发实践(一):环境准备及框架搭建
  3. 网络编程学习笔记(socketpair函数)
  4. linux虚拟网络设备之veth(二)
  5. 终于收到微软的衬衫了!!!
  6. Java内存模型深度解析:顺序一致性--转
  7. html怎么自动设为底部,让底部永远在页面最底部显示的css方法
  8. 创建型模式:抽象工厂
  9. 图论--最短路-- Dijkstra模板(目前见到的最好用的)
  10. Visual Studio 2010旗舰版在安装Windows Phone 7 SDK后项目模版里没有Windows Phone 项目解决办法...
  11. Fortinet不断践行安全平台的战略保持长效增长
  12. python插入排序算法详解-面试常考
  13. torch.ones,normal,max
  14. python x 0b1011_python基础语法和进制
  15. 泰凌TLSR8266 BLE灯控 智能家居模块
  16. 【Linux应用】中标麒麟操作系统
  17. 智能车的转弯部分_教训:渣土车“两米生死线”千万别跨!记者带你亲身体验...
  18. 详解万向锁,欧拉旋转角,slam中万向锁的理解
  19. 用Excel快速新建空白文件夹
  20. L1-061 新胖子公式 (10 分)

热门文章

  1. hylan:安装aptitude(完整的软件包管理系统)遇到的问题
  2. PHP二维码类库phpqrcode改造面向对象风格
  3. Linux 操作系统原理 — NUMA 体系结构
  4. 与AI不同,人机混合智能是情理结构
  5. calico工作原理_Calico原理
  6. Pytorch实现CapsuleNet
  7. IHC/ICC 常见问题分析
  8. 通过科大讯飞实时转写接口了解音频数据采集
  9. TP5验证码生成及验证
  10. calabash-android 环境问题