了解Nginx

Nginx

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx的程序架构;master/worker

master/worker模型:一个master进程可生成一个或多个worker进程;每个worker基于时间驱动机制可以并行响应多个请求
master:负责启动服务,分析配置文件,父进程启动子进程和worker进程,平滑升级
worker:真正响应用户请求进程;http服务,http代理,fastcgi代理,...
    缓存相关的进程
        cache loader:缓存加载器,载入缓存对象
        cache manger:缓存管理器,管理缓存对象
事件驱动:epoll(Linux),kqueue(FreeBSD), /dev/poll(Solaris)
消息通知:select,poll, rt signals
支持sendfile,  sendfile64:
支持AIO,mmap

Nginx的特性

1) 模块化设计、较好扩展性;早期不支持模块的动态装卸载
2) 高可靠性:基于master/worker模式

3) 支持热部署(平滑迁移):不停机更新配置文件、更换日志、更新服务器程序版本;
4) 内存消耗低:10000个keep-alive连接模式下的非活动连接仅消耗2.5M内存;
5) 支持event-driven事件驱动模型, aio异步驱动机制, mmap内存映射
6) 异步,事件驱动,非阻塞
    并发请求处理:通过kevent/epoll/select
    文件IO:高级 IO sendfile:支持数据加载完以后,直接在内核级封装响应报文,响应给客户端。
            异步
            mmap:内存映射:数据从磁盘空间映射进内存空间来,并把内存直接对应的拿给进程来访问。

Nginx的基本功用

1) 静态的web资源服务器;
2) http/https协议的反向代理;tcp/udp协议的反代
3) pop3, smpt,imap4等邮件协议的反向代理;
4) 能缓存打开的文件(元数据:文件的描述符等等信息)
5) 结合FastCGI/uwSGI/SCGI等协议反代动态资源请求,既能反代,还能缓存
6) 高度模块化(非DSO机制):高度模块化,但其模块早期不支持DSO机制;近期版本支持动态装载和卸载;
    模块分类:
        核心模块:core module:核心公用模块
        标准模块:
            Standard HTTP modules:标准(核心)HTTP模块;自动编译进程序不止一个
            Optional HTTP modules:可选的http协议相关的模块
            Mail modules:邮件模块
            Stream modules:可以基于tcp协议负载用户的各类请求
        3rd party modules:第三方模块,Nginx没有自带,在编译时需手动指明加载方式加载

nginx的安装配置:

官方的预制包:
    http://nginx.org/packages/centos/7/x86_64/RPMS/
编译安装:
    ]# 下载源码包
    ]# yum install -y make
    ]# yum install -y gcc
    ]# yum -y groupinstall "Development Tools" "Server Platfrom Development"
    ]# yum install pcre-devel openssl-devel zlib-devel -y  手动解决最重要的依赖关系包
    ]# useradd -r nginx 增加一个系统用户
    ]# tar -xf nginx-1.10.0.tar.gz
    ]# cd nginx-1.10.0/
    nginx-1.10.0]# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/va/log/nginx.log 
    --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock 
    --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module 
    --with-http_stub_status_module --with-threads --with-file-aio
    ]# make && make install
    ]# vim /etc/profile.d/nginx.sh
        export PATH=/usr/local/nginx/sbin:$PATH
    ]# . /etc/profile.d/nginx.sh
    ]# nginx -t 检测错误
    ]# nginx -h 可查看命令使用帮助
启动服务,检测端口是否已经启用
    ]# /usr/local/nginx/sbin/nginx 启动服务
    ]# ss -tnlp 查看80端口是否已经启用,注意,如果httpd服务已经启用了话 这里会启动失败

Nginx配置文件

配置指令有类型
1) 全局指令:放置于mainblock中,即文档根
    main配置段类别:正常运行必备的配置;优化性能相关的配置;用于调试、定位问题的配置;
2) 模块指令:由模块引入,其也必须放置于相应的Directive blocks中;block之间可能存在嵌套关系。用{}嵌套
    event 配置段:事件驱动模块段,面向用户并发连接请求响应组织配置机制
    http 配置段:web模块相关配置
    mail 配置段:邮件模块相关配置;编译安装时候默认无此模块

nginx主配置文件的组成部分

主配置文件:nginx.conf
        在主配置文件中加入include语句,可以将主配置文件切割成段例如include conf.d/*.conf   ===>  /etc/nginx/conf.d/*.conf
fastcgi, uwsgi,scgi等协议相关的配置文件
mime.types:支持的mime类型
主配置文件的配置指令:
(1) 指令必须以分号结尾;directive value [value2 ...];
(2) 支持使用配置变量;
    内建变量:由Nginx模块引入,可直接引用;
    自定义变量:由用户使用set命令定义;set variable_name value;         
    引用变量:$variable_name
主配置文件结构:
main block:主配置段,也即全局配置段;有以下分类
    正常运行必备的配置
        1、USERNAME  [GROUPNAME];指定用于运行worker进程的用户和组:例如user  nginx   nginx;
        2、pid /PATH/TO/PID_FILE;指定nginx进程的pid文件路径;pid  /var/run/nginx.pid;  
        3、include file | mask;指明包含进来的其它配置文件片段;
        4、load_module file;指明要装载的动态模块;
    性能优化相关的配置:
        1、worker_processes number | auto;worker进程的数量;通常应该为当前主机的cpu的物理核心数减一,"auto"实现自动设定
        2、worker_cpu_affinity cpumask cpumask ...;CPU绑定;加上CPU掩码,"auto"实现自动设定与物理核心cpu数相同
            实例:worker_cpu_affinity 00000001 00000010 00000100;worker_cpu_affinity auto
        3、worker_priority number;指定worker进程的nice值,设定worker进程优先级;[-20,20]
        4、worker_rlimit_nofile number;worker进程所能够打开的文件数量上限;
        5、worker_rlimit_sigpending  number;指定每个用户能够发往worker进程的信号的数量;
    调试、定位问题的配置:
        1、daemon on|off;是否以守护进程方式运行nignx;
        2、master_process on|off;是否以master/worker模型运行nginx;默认为on;
        3、error_log  /PATH/TO/ERROR_LOG level;错误日志文件及其级别;调试需要可以设定为debug;但debug在编译时使用了"--with-debug"选项
    事件驱动event相关的配置:
        1、worker_connections number;每个worker进程所能够打开的最大并发连接数数量;默认为1024;上限是:worker_proceses * worker_connections
        2、use method;指明并发连接请求的处理方法;建议让nginx自动选择;默认为use epoll;
        3、accept_mutex on | off;各worker接收用户的请求的负载均衡锁(互斥锁),处理新的连接请求的方法;
            on意味着由各worker轮流处理新请求,Off意味着每个新请求的到达都会通知所有的worker进程;建议设置为on

nginx:http协议相关的配置:http的所有配置需要在http{ } 配置段进行定义。大部分配置指令由ngx_http_core _ module模块引入

主机或套接字相关指令
1、server {}:每一个server定义一个虚拟主机;server可以出现一次或多次
    server{
        listenPORT;
        server_name  NAME;
        root /PATH/TO/DOCUMENTROOT;
    }
    server{
        listenPORT;
        server_name  NAME;
        root /PATH/TO/DOCUMENTROOT;
        alias 
        location [OPERATOR] /url/{
            ...
        }

    }
    ...
    注意:
     1) 基于port:listen指令监听在不同的端口;
     2) 基于hostname:server_name指令指向不同的主机名;
     3) 如果有多个server需要用到共同配置的话,要把配置放在server之外,http只能进行定义,即多个server的公共配置
2、listen 配置监听端口
    使用格式:listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE
            listen address[:port] [default_server] [ssl] [http2 | spdy]  [backlog=number] [rcvbuf=size] [sndbuf=size]
    注释:
        default_server:设置默认虚拟主机;用于基于IP地址,或使用了任意不能对应于任何一个server的name时所返回站点;
        ssl:用于限制只能通过ssl连接提供服务;
        http2:支持httpversion 2第二版http协议;
        spdy:SPDYprotocol(speedy),在编译了spdy模块的情况下,用于支持SPDY协议;
        backlog=number:假如linten端口上的队列已满,指明排队后的队列长度
        rcvbuf=size:接收缓冲的大小
        sndbuf=size:发送缓冲的大小
3、 server_name NAME [...];:指明主机名称
    指明虚拟主机的主机名称;后可跟多个由空白字符分隔的字符串;名称还可以使用通配符和正则表达式(~引导整个正则表达式);
        支持*通配任意长度的任意字符;server_name *.magedu.com
        支持~起始的字符做正则表达式模式匹配;server_name ~^www\d+\.magedu\.com$
    匹配机制:
        (1) 首先是字符串精确匹配;例如:www.xxx.com
        (2) 左侧*通配符;例如:*.xxx.com
        (3) 右侧*通配符;例如:www.xxx.*
        (4) 正则表达式;例如:~^.*\.xxx\.com$
        (5) default_server
4、tcp_nodelay on | off;在keepalived模式下的连接是否启用TCP_NODELAY选项;一般为off
    提高带宽利用率,将发往同一主机很小的TCP报文合并成一个;实际生产上对于用户请求即使浪费带宽也不能合并请求
5、sendfile on | off;是否启用sendfile功能;
    静态文件直接在内核中封装响应,而不是从内核空间到用户空间再发往内核空间
6、 tcp_nopush on|off;是否启用TCP_NOPUSH(FREEBSE)或TCP_CORK(Linux)选项;仅在sendfile为on时有用;
    尝试将多个报文首部压缩成一个发送,默认off,不启用该功能
定义路径相关的配置:
1、root path;设置web资源路径映射;用于指明用户请求的url所对应的本地文件系统上的文档所在目录路径;
    可用的配置段位置:http, server, location, if in location;

2、location;在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;ngnix会根据用户请求的URI来检查定义的所有location,并找出一个最佳匹配,而后应用其配置;
    使用格式:
        1) location @name { ... }
        2) location[ = | ~ | ~* | ^~ ] uri { ... }  
    匹配优先级:=, ^~, ~/~*,不带符号;
        =:对URI做精确匹配;例如, http://www.magedu.com/, http://www.magedu.com/index.html
            location = / {
                ...
            }
        ~:对URI做正则表达式模式匹配,区分字符大小写;
        ~*:对URI做正则表达式模式匹配,不区分字符大小写;
        ^~:对URI的左半部分做匹配检查,不区分字符大小写;
        不带符号:匹配起始于此uri的所有的url;
    示例
        server {
            ...
            server_name www.xuding.com;
            root/data/www;
            location  /admin/ {
                ...
            }
        }

3、alias path;定义路径别名,文档映射的另一种机制;仅能用于location上下文;


    注意:location中使用root指令和alias指令的意义不同;
        (a) root,给定的路径对应于location中的/uri/左侧的/;
        (b) alias,给定的路径对应于location中的/uri/右侧的/;

4、index file ...;设置默认主页(ngx_http_index_module模块引入)
    默认资源;http, server, location;  可以带上变量,如$geo更具不同IP地区来设置不同的语言主页

5、error_page code ... [=[response]] uri;:自定义错误页面,根据http的状态码重定向错误页面;
    实例:
   1)指明错误页面
        error_page  404 /404.html
        error_page 500 502 503 504 /50x.html
        location = /50x.html {
        root /html/;
        }
    2) 以指定的响应状态码进行响应
        error_page  404 =200  /404.html
6、try_files file ... uri;以指定的顺序检查文件的存在性响应
     try_files file ... =code;
    尝试查找第1至第N-1个文件,第一个即为返回给请求者的资源;若1至N-1文件都不存在,则跳转至最一个uri(必须不能匹配至当前location,而应该匹配至其它location,否则会导致死循环);
定义客户端请求的相关配置
1、keepalive_timeout timeout [header_timeout];
    设定保持连接的超时时长,0表示禁止长连接;默认为75s;
2、keepalive_requests number;
    在一次长连接上所允许请求的资源的最大数量,默认为100;
3、keepalive_disable none | browser ...;
    对哪种浏览器禁用长连接;默认none,也可以指明具体浏览器名称
4、send_timeout time;
    向客户端发送响应报文的超时时长,此处,是指两次写操作之间的间隔时长;默认为60s;
5、client_body_buffer_size size;
    用于接收客户端请求报文的body部分的缓冲区大小;默认为16k;超出此大小时,其将被暂存到磁盘上的由client_body_temp_path指令所定义的位置;
6、client_body_temp_path path [level1 [level2 [level3]]];
    设定用于存储客户端请求报文的body部分的临时存储路径及子目录结构和数量;
    格式为16进制的数字,如下;                          
        client_body_temp_path path  /var/tmp/client_body  1 2 2
对客户端进行限制的相关配置:
1、limit_rate rate;
    限制响应给客户端的传输速率,单位是bytes/second,0表示无限制;

2、limit_except method ... { ... }
    限制对指定的请求方法之外的其它方法的使用客户端;                        
    limit_except GET {
        allow 192.168.1.0/32;
        deny  all;
    }
文件操作优化的配置
1、aio on | off | threads[=pool];
    是否启用异步IO模式

2、directio size | off;
    直接IO;不在内存中缓冲,直接从硬盘加载使用(当大于指定size);在Linux主机启用O_DIRECT标记,此处意味文件大于等于给定的大小时使用,例如directio 4m;    

3、 open_file_cache :打开文件缓存
    open_file_cache off;
    open_file_cache max=N [inactive=time];  
        nginx可以缓存以下三种信息:
            (1) 文件的描述符、文件大小和最近一次的修改时间;
            (2) 打开的目录结构;
            (3) 没有找到的或者没有权限访问的文件的相关信息;

        max=N表示可缓存的最大条目上限;一旦达到上限,则会使用LRU算法从缓存中删除最近最少使用的缓存项;                         
        inactive=time:缓存项的非活动时长,在此处指定的时长内没有被访问过的或访问次数少于open_file_cache_min_users指令所指定的缓存项是为非活动缓存项,因此直接删除。

4、open_file_cache_valid time;
    每隔多久检查一次缓存中缓存项的有效性;默认为60s;

5、open_file_cache_min_uses number;
    在open_file_cache指令的inactive参数指定的时长内,至少应该被命中多少次方可被归类为活动项;

6、open_file_cache_errors on | off;
    是否缓存查找时发生错误的文件一类的信息;意为;是否缓存查找时找不到其路径的文件,或没有权限没有权限访问的文件相关信息;
ngx _ http _ access _ module模块:实现基于ip的访问控制功能
应用于http, server, location, limit_except配置段
1、allow address | CIDR | unix: | all;
    允许指定的ip访问

2、deny address | CIDR | unix: | all;
    拒绝指定的ip访问
ngx _ http _ auth _ basic _ module模块调用配置(basic认证)
1、auth_basic string |off;:使用httpbasic认证协议对用户进行认证;
    string为所给定字符,其作用在于认证时显示的提示所信息

2、 auth_basic_user_file FILE ;:实现用户认证的账号文件;
    认证文件格式(需手动创建):
        name1:password1
        name2:password2:comment
    注意:密码需要加密,加密方式可以为encryptedwith the crypt() function; md5加密;
    密码可以用htpasswd创建:htpasswd-c -m  /etc/nginx/.ngxhtpasswd tom(创建第二个用户时需要将-c去掉)
    示例:
        location /admin/ {
            alias /webapps/app1/data/;
            auth_basic "Admin Area";
            auth_basic_user_file /etc/nginx/.ngxpasswd;
        }
ngx _ http _ stub _ status _ module模块调用配置:用于输出nginx的基本状态信息;
1、stub_status;调用查看nginx状态指令
    配置示例:
        location  /basic_status {
            stub_status;
        }
    通过指定的uri输出stub status;其具体输出结果如下:
        Active connections: 291 
        server accepts handled requests
        16630948 16630948 31070465 
        Reading: 6 Writing: 179 Waiting: 106
    输出结果注释;
        Active connections: 活动状态的连接数;
        accepts:已经接受的客户端请求的总数;
        handled:已经处理完成的客户端请求的总数;
        requests:客户端发来的总的请求数;
        Reading:处于读取客户端请求报文首部的连接的连接数;
        Writing:处于向客户端发送响应报文过程中的连接数;
        Waiting:处于等待客户端发出请求的空闲连接数;
ngx _ http _ log _ module模块调用配置(访问日志)
1、 log_format  name string  ...;:定义日志格式及其名称;
    日志格式一般通过调用内置变量来定义;
    string:通过nginx所支持的变量(每个模块会引入自变量)来支持的;即可以使用nginx核心模块及其它模块内嵌的变量;
2、access_log:访问日志       
    access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
    access_log off;
    访问日志文件路径,格式名称以及缓存大小和刷写时间间隔;建议定义缓冲以提升性能;
        buffer=size
        flush=time
3、open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
    open_log_file_cache off;缓存各日志文件相关的元数据信息;
    指令参数注释;
        max:缓存的最大文件描述符数量;
        min_users:在inactive指定的时长内访问大于等于此值方可被当作活动项;
        inactive:非活动时长;
        valid:验正缓存中各缓存项是否为活动项的时间间隔;
ngx _ http _ referer _ module模块调用配置(基于请求报文中的Referer首部的值做访问控制)
1、valid_referers none | blocked | server_names | string ...;定义referer首部的合法可用值;
    指令参数注释
        none:请求报文首部没有referer首部;
        blocked:请求报文的referer首部没有值;
        server_names:参数,其可以有值作为主机名或主机名模式;
        arbitrary_string:直接字符串,但可使用*作通配符;
        regular expression:被指定的正则表达式模式匹配到的字符串;要使用~打头,例如 ~.*\.magedu\.com;
    配置示例:
        valid_referers none block server_names *.magedu.com *.mageedu.com magedu.* mageedu.* ~\.magedu\.;

        if($invalid_referer) {
            return 403;
        }
ngx _ http _ rewrite _ module模块:http请求重写,将用户请求的URI基于regex所描述的模式进行检查,而后完成替换;
1、rewrite regex replacement [flag]
    将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URI;

    注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查,因此,隐含有循环机制;[flag]所表示的标志位用于控制此循环机制;

    如果replacement是以http://或https://开头,则替换结果会直接以重向返回给客户端;
        301:永久重定向;
    regex:正则表达式,用于匹配用户请求的url;
    replacement:重写(重定向、替换)成为的结果;
    [flag]:
        last:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮重写检查;提前重启新一轮循环; 
        break:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环;
        redirect:重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;不能以http://或https://开头;
        permanent:重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;
    示例:
        server{
            ...
            rewrite^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
            rewrite^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra last;
            return  403;
            ...
        }        
    注意:
        1)last和break请求处理是在服务器内部完成,客户端仅请求一次。redirect和permanent需要客户端再次请求
        2)URL重写时所用的正则表达式需要使用PCRE格式。PCRE正则表达式元字符:
        字符匹配:.,[ ], [^]
        次数匹配:*,+, ?, {m}, {m,}, {m,n}
        位置锚定:^,$
        或者:|
        分组:(),后向引用, $1, $2, ...      

2、return;立即停止对请求的uri的处理,并返回指定的状态码;
        return code [text];
        return code URL;
        return URL;

3、  rewrite_log 重写日志
    rewrite_log on | off;:是否将重写日志记入errorlog中,默认为关闭;
    错误日志调试方法:错误日志debug,并开启rewrite_log;  

4、  if (condition) { ... };引入一个新的配置上下文 ;条件满足时,执行配置块中的配置指令;server, location;
     condition可以为以下格式:
        比较操作符:
            ==
            !=
            ~:模式匹配,区分字符大小写;
            ~*:模式匹配,不区分字符大小写;
            !~:模式不匹配,区分字符大小写;
            !~*:模式不匹配,不区分字符大小写;
        文件及目录存在性判断:
            -f,!-f:是否存在且为普通文件;
            -d,!-d: 是否存在且为目录;
            -e,!-e:是否存在;
            -x,!-x:是否存在且可执行;
      实例:
        1) cookie首部检测匹配
            if($http_cookie ~* "id=([^;]+)(?:;|$)") {
                set $id $1;
            }
        2) 请求报文的请求方法是POST,返回405
            if($request_method = POST) {
                return 405;
            }
        3) 限速(如会员认为不是slow不做限速)
            if($slow) {
                limit_rate 10k;
            }
        4) 非法引用,返回403。注:也可以对非法引用到其他网页
            if($invalid_referer) {
                return 403;
            }
5、set;设定变量值,或者自定义变量
     set $variable value;变量赋值
ngx _ http _ gzip _ module模块:gip压缩
1、gzip on | off;
    启用或禁用gzip压缩响应报文;

2、gzip_comp_level level;
    压缩比,1-9,默认为1;

3、  gzip_disable regex ...;
    regex是为用于匹配客户端响应器类型的正则表达式;表示对何种浏览器禁止使用压缩功能;

4、  gzip_min_length length;
    触发压缩功能的响应报文的最小长度;

5、gzip_buffers number size;
    支持实现压缩功能时为其配置的缓冲区数量及每个缓存区的大小;

6、gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
    ginx作为代理服务器接收到从被代理服务器发送的响应报文后,在何种条件下启用压缩功能的;
        off:对代理的请求不启用
        no-cache, no-store,private:表示从被代理服务器收到的响应报文首部的Cache-Control的值为此三者中任何一个,则启用压缩功能;

7、gzip_types mime-type ...;
    压缩过滤器,仅对此处设定的MIME类型的内容启用压缩功能;
ngx _ http _ ssl_module模块:
1、  ssl on | off;
    开启或关闭ssl

2、ssl_certificate file;
    当前虚拟主机使用PEM格式的证书文件路径;

3、ssl_certificate_key file;
    当前虚拟主机上与其证书对应的私钥文件;

4、ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
    指明支持的ssl协议版本,[SSLv2]  [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2]默认为后三个

5、ssl_session_timeout time;
    客户端一侧的连接可以复用ssl session cache中缓存 的ssl参数的有效时长;

6、ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
    指明ssl会话缓存机制;off | none | [builtin[:size]] [shared:name:size],默认使用shared
    off:禁止缓存,关闭缓存,不支持缓存功能
    none:禁止缓存,不响应缓存
    builtin[:size]:使用OpenSSL内建的缓存,此缓存为每worker进程私有;
    [shared:name:size]:在各worker之间使用一个共享的缓存;name:独有名称;size:缓存空间大小,默认1M,可以调到10M;
    注意:
        1)https定义时候也是定义在http{ }配置段,其监听配置定义:listen 443 ssl。不是以监听在443端口作为限定。用于限制只能通过ssl连接提供服务。
        2)若不在listen处定义,也可以在server{ }中定义ssl on; 来启用https服务
    配置示例:
        server {
            listen 443 ssl;
            server_name www.magedu.com;
            root /vhosts/ssl/htdocs;
            ssl on;
            ssl_certificate /etc/nginx/ssl/nginx.crt;
            ssl_certificate_key /etc/nginx/ssl/nginx.key;
            ssl_session_cache shared:sslcache:20m;
        }

原创文章,作者:M20-1马星,如若转载,请注明出处:http://www.178linux.com/58138

(0)
M20-1马星M20-1马星
上一篇 2016-11-07
下一篇 2016-11-07

相关推荐

  • 第六周作业

    一、Vim编辑器练习: 用Vim编辑器做下面的练习,我的Linux系统(CentOS 6.9)安装了精简版系统,没有Vim编辑器。 a、设置Yum源为网易开源镜像站。 b、选择对应“镜像名”,到对应的“CentOS使用说明”里面查看内容 c、看着CentOS说明操作就可以了 d、使用说明 首先备份/etc/yum.repos.d/CentOS-Base.re…

    Linux干货 2017-08-22
  • 8-12 文件查找

    8-12 文件查找   8–1该节主要分为三部分,分别是作业,自己对德·摩根定律的了解及find常用选项   一、作业 1、查找/var目录下属主为root,且属组为mail的所有文件 2、查找/var目录下不属于root、lp、gdm的所有文件 3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是pos…

    Linux干货 2016-08-15
  • tcpdump诊断nginx问题

    自从上级公司离职后,快一年的时间没有写php程序和搭建LNMP环境,一直在做db运维和运维工具开发方面的事情。 最近决定开发开发一些自动话方面工具,重新拾起php,于是在测试机上搭建一个LNMP环境。 1、 nginx 404错误 一般的出现404错误,找不到页面资源。首先用strace排除了存在文件访问权限的问题,其次nginx的root参数设置也没有任何…

    Linux干货 2016-05-03
  • linux文件管理命令与命令行展开

    linux文件管理命令与命令行展开

    2017-12-11
  • zabbix之报警功能的实现

    一、注册微信公众号 首先申请微信公众平台https://mp.weixin.qq.com/一个人最多申请5个公众号,所以还是可以的 申请完之后就可以根据腾讯的提示使用微信公众号了,然后用你自己的微信扫描关注微信号。 就可以看到用户数了,接下来的就要使用的用户的微信ID号了。点击用户查看用户的微信ID号。在浏览器查看用户的微信ID号。就是那个红色的ID了。 h…

    2014-11-12
  • python练习实例

    #依次输出五位数的每一位(由低位到高位)i=12345for a in range(5):j=i%10i=i//10print(j) #依次输出五位数的每一位(由高位到低位)i=12345for a in range(5,0,-1):j=i//10**(a-1)i=i%10**(a-1)print(j) #打印菱形for i in range(-3,4):j…

    Linux干货 2018-03-25