• Nginx详解以及LNMP的搭建


    一、nginx 介绍

    Alt text

    1.1 特性:

      模块化设计,较好的扩展性 
      高可靠性 
      支持热部署:不停机更新配置文件,升级版本,更换日志文件 
      低内存消耗:10000 个keep-alive 连接模式下的非活动连接,仅需要2.5M 内存 
      event-driven,aio,mmap,sendfile 
    基本功能: 
      静态资源的web 服务器 
      http 协议反向代理服务器,负载均衡 
      pop3/imap4 协议反向代理服务器 
      FastCGI(lnmp),uWSGI(python) 等协议 
      模块化(非DSO ),如zip ,SSL模块 
      web 服务相关的功能: 
      虚拟主机(server 
      支持 keep-alive 和管道连接 
      访问日志(支持基于日志缓冲提高其性能) 
      url rewirte 
      路径别名 
      基于IP 及用户的访问控制 
      支持速率限制并发数限制 
      重新配置和在线升级而无须中断客户的工作进程 
      Memcached 的GET 接口

    1.2 nginx 架构

    Alt text 
    nginx 的程序架构:master/worker 结构 
      一个master 进程: 
        负载加载和分析配置文件、管理worker 进程、平滑升级 
      一个或多个worker 进程 
        处理并响应用户请求 
    缓存相关的进程: 
      cache loader :载入缓存对象 
      cache manager:管理缓存对象

    1.3 nginx 高度模块化

      但其模块早期不支持DSO 机制;1.9.11版本支持动态装载和卸载 
    模块分类: 
    核心模块:core module 
    标准模块: 
      • HTTP : 模块: ngx_http_* 
        HTTP Core modules 默认功能 
        HTTP Optional modules 需编译时指定 
      • Mail 模块 ngx_mail_* 
      • Stream 块 模块 ngx_stream_* 
    第三方模块

    1.4 nginx 的功用

      静态的web 资源服务器 
        html,图片,js ,css ,txt 等静态资源 
      结合FastCGI/uWSGI/SCGI等协议反向代理动态资源请求: 
        http/https 协议的反向代理 
        imap4/pop3 协议的反向代理 
        tcp/udp 协议的请求转发(反向代理)

    二、nginx 目录结构和命令

    2.1 nginx 命令

    ls /usr/local/nginx/  html 是测试页,sbin 是主程序 
    ls/usr/local/nginx/sbin/  nginx 只有一个程序文件 
    ls/usr/local/nginx/html/  50x.html index.html 测试网页

    Nginx:默认为启动nginx 
      -h 查看帮助选项 
      -V 查看版本和配置选项 
      -t 测试nginx语法错误 
      -c filename 指定配置文件(default:/etc/nginx/nginx.conf) 
      -s signal 发送信号给master 进程,signal 可为: 
        stop, quit,reopen, reload 示例:-s stop 停止nginx -s 
      reload 加载配置文件 
        注意:不要和systemctl 混合使用 
      -g directives 在命令行中指明全局指令

    2.2 配置文件的组成部分:

    主配置文件:nginx.conf 
    子配置文件:include conf.d/*.conf 
      fastcgi,uwsgi ,scgi 等协议相关的配置文件 
      mime.types :支持的mime 类型 
    主配置文件的配置指令: 
      directive value [value2 ...]; 
    注意: 
    (1) 指令必须以分号结尾 
    (2) 支持使用配置变量 
      内建变量:由Nginx 模块引入,可直接引用 
      自定义变量:由用户使用set 命令定义 
        set variable_name value; 
      引用变量:$variable_name 
      

    三、nginx 主配置文件的介绍和设置

    3.1 Main 全局配置段常见的配置指令分类

    3.1.1 介绍

    • 正常运行必备的配置
    • 优化性能相关的配置
    • 用于调试及定位问题相关的配置
    • 事件驱动相关的配置

    3.1.2 一些设置

    user nginx; //nginx运行时是以谁的身份开启的子进程
    worker_processes auto; //进程数,auto是自动和CPU核数相对应
    worker_priority number; //指定worker
    进程的nice 值,设定worker 进程优先级:[-19,19]
    error_log /var/log/nginx/error.log info; //错误日志的路径和级别
    pid /var/run/nginx.pid; //指定存储nginx 主进程PID 的文件路径
    include file //指明包含进来的其它配置文件片断
    events {
    worker_connections 30000; //每个worker进程所能够打开的最大并发连接数数量,默认是1024,一般都不够,调大
    use epoll; //指明并发连接请求的处理方法, 默认自动选择最优方法
    }
    accept_mutex on/off; //前台|后台运行

    3.2 http 协议段的相关配置

    格式介绍

    http { //可以放多个server段
    ... ...
    server {
    ...
    server_name
    root
    location [OPERATOR] /uri/ {
    ...
    }
    }
    server {
    ...
    }
    }

    3.3 与套接字相关的配置

    1)server 配置虚拟主机

    server {
    listen address[:PORT]|PORT;
    server_name SERVER_NAME;
    root /PATH/TO/DOCUMENT_ROOT;
    }

    2)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 设定为默认虚拟主机 
      ssl 限制仅能够通过ssl 连接提供服务 
      backlog=number 超过并发连接数后,新请求进入后援队列的长度 
      rcvbuf=size 接收缓冲区大小 
      sndbuf=size 发送缓冲区大小 
    注意: 
    (1)基于port: 
      listen PORT; 指令监听在不同的端口 
    (2)基于ip 的虚拟主机: 
      listen IP:PORT; IP 地址不同 
    (3)基于hostname: 
      server_name fqdn; 指令指向不同的主机名

    3) server_name name ...; 
    虚拟主机的主机名称后可跟多个由空白字符分隔的字符串 
    支持* 通配任意长度的任意字符 
      server_name .magedu.com www.magedu. 
    支持~ 起始的字符做正则表达式模式匹配,性能原因慎用 
      server_name ~^wwwd+.magedu.com$ 
      d 表示 [0-9] 
    匹配优先级机制从高到低: 
    (1)首先是字符串精确匹配 如:www.magedu.com 
    (2)左侧 通配符 如:.magedu.com 
    (3)右侧 通配符 如:www.magedu. 
    (4)正则表达式 如: ~^.*.magedu.com$ ,因为消耗cpu运算 
    (5)default_server

    4)tcp_nodelay on | off; 在长连接的情况下,是否延迟 
    在keepalived 模式下的连接是否启用TCP_NODELAY 选项 
      当为off 时,延迟发送,合并多个请求后再发送 
      默认On 时,不延迟发送 
      可用于:http, server, location

    5)sendfile on | off; 
    是否启用sendfile功能,在内核中封装报文直接发送,默认Off

    6)server_tokens on | off | build | string 
    是否在响应报文的Server 首部显示nginx版本

    3.4 定义路径相关的配置

    7)root 
      设置web 资源的路径映射;用于指明请求的URL 所对应的文档的主目录路径。

    server {
    ...
    root /data/www/vhost1;
    }

    示例:

    http://www.magedu.com/images/logo.jpg --> /data/www/vhosts/images/logo.jpg

      注意:root 不仅可以用在server段,还可用于http、server、location、if in locatin

    8)location [ = | ~ | ~* | ^~ ] uri { ... } 主要控制URL路径 
    location @name { … } 
      在一个server 中location 配置段可存在多个,用于实现从uri到文件系统的路径映射;ngnix 会根据用户请求的URI 来检查定义的所有location ,并找出一个最佳匹配,而后应用其配置 
    示例: 
    (1)

    server {...
    server_name www.magedu.com;
    location /images/ {
    root /data/imgs/;
    }
    }

    http://www.magedu.com/images/logo.jpg –> /data/imgs/images/logo.jpg

    (2) = :对URI 做精确匹配;

    location = / {
    ...
    }

    http://www.magedu.com/ 匹配

    http://www.magedu.com/index.html 不匹配

    (3) 正则符号的作用 
    ^~ :对URI 的最左边部分做匹配检查,不区分字符大 小写 
    ~ :对URI 做正则表达式模式匹配,区分字符大小写 
    ~* :对URI 做正则表达式模式匹配,不区分字符大小写 
    不带符号:匹配起始于此uri 的所有的uri

    (4) 匹配优先级从高到低: 
    =, ^~, ~/ ~*, 不带符号

    9)alias path; 
    路径别名,文档映射的另一种机制;仅能用于location 上下文 
    示例:

    http://www.magedu.com/bbs/index.php
    location /bbs/ {
    alias /web/forum/;
    } --> /web/forum/index.html
    location /bbs/ {
    root /web/forum/;
    } --> /web/forum/bbs/index.html

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

    (10)index file ... ; 
      指定默认网页资源,注意:ngx_http_index_module 模块

    例:

    index index.php index.html

    (11)error_page code ... [=[response]] uri; 错误页面 
      基于ngx_http_core_module模块。 
      定义错误页, 以指定的响应状态码进行响应 
      可用位置:http, server,location, if in location

    error_page 404 /404.html
    error_page 404 =200 /404.html //错误状态码改为200,还是原来的错误页面

    (12)try_files file ... uri ; 
       try_files file ... =code ; 
      按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI 的指向。最后一个参数是回退URI 且必须存在,否则会出现内部500 错误

    location /images/ {
    try_files $uri
    /images/default.gif;
    }
    location / {
    try_files $uri $uri/index.html $uri.html =404;
    }

    3.5 定义客户端请求的相关配置

    (13)keepalive_timeout timeout [header_timeout]; 
      设定保持长连接超时时长,0 表示禁止长连接,默认为75s

    (14)keepalive_requests number; 
      在一次长连接上所允许请求的资源的最大数量,默认为100

    (15)keepalive_disable none | browser … 
      略,没有那么老版本的浏览器对哪种浏览器禁用长连接

    (16)send_timeout time; 
      向客户端发送响应报文的超时时长,此处是指两次写操作之间的间隔时长,而非整个响应过程的传输时长

    (17)client_body_buffer_size size; 缓存,hash值,取32位的后1位,2位,2位做几级目录 
      用于接收每个客户端请求报文、上传的body 部分的缓冲区大小;默认为16k ;超出此大小时,其将被暂存到磁盘上的由client_body_temp_path指令所定义的位置

    (18)client_body_temp_path path 
    [level1 [level2 [level3]]]; 
      设定用于存储客户端请求报文的body 部分的临时存储路径及子目录结构和数量 
      目录名为16 进制的数字;

    client_body_temp_path /var/tmp/client_body 1 2 2

    1级目录占1 位16进制,即2^4=16个目录 0-f 
    2级目录占2 位16进制,即2^8=256个目录 00-ff 
    3级目录占2 位16进制,即2^8=256个目录 00-ff

    3.6 对客户端进行限制的相关配置

    (19)limit_rate rate; 限速 
      限制响应给客户端的传输速率,单位是bytes/second,默认值0表示不限速

    (20)limit_except method … { … } ,仅用于location,限制客户端使用除了指定的请求方法之外的其它方法

    method:GET, HEAD, POST, PUT, DELETE,MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK, PATCH

    limit_except GET {
    allow 192.168.1.0/24;
    deny all;
    }

      上述代码的意思是:除了GET 和HEAD 之外的其它方法,仅允许192.168.1.0/24网段主机

    3.7文件操作优化的配置

    (21)aio on | off | threads[=pool]; 是否启用aio 异步io功能,异步写磁盘

    (22)directio size | off; 是否同步(直接)写磁盘,而非写缓存,在Linux 主机启用O_DIRECT标记, 则文件大于等于给定大小时使用,例如directio 4m

    (23)open_file_cache off;

    open_file_cache max=N [inactive=time];

    nginx 可以缓存以下三种信息:(缓存详细介绍见我的下一篇博客 
    Nginx实现负载均衡&Nginx缓存功能) 
    ① 文件元数据:文件的描述符、文件大小和最近一次的修改时间 
     打开的目录结构 
     没有找到的或者没有权限访问的文件的相关信息 
    max=N:可缓存的缓存项上限;达到上限后会使用LRU (最近最少使用)算法实现管理 
    inactive=time:缓存项的非活动时长,在此处指定的时长内未被命中的或命中的次数少于open_file_cache_min_uses 指令所指定的次数的缓存项,即为非活动项,将被删除

    (24)open_file_cache_errors on | off; 
      是否缓存查找时发生错误的文件一类的信息 ,默认值为off

    (25)open_file_cache_min_uses number; 
      open_file_cache 指令的inactive 参数指定的时长内,至少被命中此处指定的次数方可被归类为活动项,默认值为1

    (26)open_file_cache_valid time; 
      缓存项有效性的检查频率,默认值为 为60s

    四、nginx重要配置

    4.1 权限控制

      实现权限控制的是ngx_http_access_module模块,他是用来实现基于ip的访问控制功能: 
    设置语法如下:

    allow address | CIDR | unix: | all;
    deny address | CIDR | unix: | all;

      这个设置在httpserverlocationlimit_except段都可以使用。 
      在读取的时候,是自上而下的检查,一旦匹配,就会生效,所以,我们在设置的时候,需要把条件严格的置前。 
    示例:

    location / {
    deny 192.168.1.1;
    allow 192.168.1.0/24;
    allow 10.1.1.0/16;
    allow 2001:0db8::/32;
    deny all;
    }


    4.2 身份验证

      nginx中实现身份验证的模块是ngx_http_auth_basic_module,这个模块是用来实现基于用户的访问控制,使用basic机制进行用户认证。 
      我们使用以下命令来控制该验证是否开启:

    auth_basic string | off;
    auth_basic_user_file file;

      具体的设置语法如下:

    location /admin/ {
    auth_basic "Admin Area"; //引号中为提示字符
    auth_basic_user_file /etc/nginx/.ngxpasswd; //保存用户口令的文件
    }

      下面我们来看看用户口令文件: 
    1)明文文本 
      格式为:

    name:password:comment

    2)加密文本 
      由htpasswd命令实现。该命令由httpd-tools包提供。具体实现如下图:

      我们来具体说一下选项的作用:

    -c  创建新用户 
    -m  使用基于md5的加密


    4.3 状态信息页面

      该页面是基于ngx_http_stub_status_module模块实现的。用于输出nginx的基本状态信息。

     
      我们可以用浏览器来查看一下这个状态页面:


      其中的“1 1 1”,这三个数字分别对应accepts,handled,requests 三个值。 
      上图中每一段的含义如下: 
    Active connections: 当前状态,活动状态的连接数 
    accepts :统计总值,已经接受的客户端请求的总数 
    handled :统计总值,已经处理完成的客户端请求的总数 
    requests :统计总值,客户端发来的总的请求数 
    Reading :当前状态,正在读取客户端请求报文首部的连接的连接数 
    Writing :当前状态,正在向客户端发送响应报文过程中的连接数 
    Waiting :当前状态,正在等待客户端发出请求的空闲连接数


    4.4 日志的设置

      基于ngx_http_log_module模块,该模块可以指定日志格式记录的请求:

    log_format name string …;

      用来定义日志的格式,其中,string可以使用nginx核心模块及其他模块内嵌的变量。

    access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];

      用来调用日志。定义了访问日志文件的路径,格式及相关的缓冲的配置。其中: 
      buffer=size 缓存大小 
      flush=time 多长时间清除缓存 
      示例如下:

    log_format compression '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"';
     
    access_log /var/log/nginx/access.log compression buffer=32k;

    (略)  open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time]; 
        open_log_file_cache off;

      缓存个日志文件相关的元数据信息,其中: 
    max :缓存的最大文件描述符数量; 
    min_uses :在inactive指定的市场内访问大于等于此值,方可被当做活动项; 
    inactive :非活动时长; 
    valid :验证缓存中各个缓存项是否为活动项的时间间隔。


    4.5 压缩

      基于ngx_http_gzip_module模块。使用gzip方法压缩相应数据,节约带宽,默认设置没有开启。

    gzip on | off ;

      启用或禁用gzip压缩

    gzip_comp_level level ;

      压缩比由低到高:1-9。默认为1

    gzip_disable regex … ;

      匹配到客户端浏览器不执行压缩

    gzip_min_length length ;

      启用压缩功能的响应报文大小

    gzip_http_version 1.0 | 1.1 ;

      设定启用压缩功能时,协议的最小版本。默认为:1.1版本

    gzip_buffers number size ;

      支持实现压缩功能时缓冲区数量每个缓存区的大小。默认为324k或168k。

    gzip_types mime-type … ;

      指明仅对哪些类型的资源执行压缩操作;即压缩过滤器 
      默认包含有text/html,不用显示指定,否则会出错 
      查看nginx的mime类型:cat /etc/nginx/mime.types

    gzip_vary on | off ;

      如果启用压缩,是否在响应报文首部插入“Vary: Accept-Encoding”

    gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any … ;

      nginx:对于代理服务器请求的响应报文,在何种条件下启用压缩功能 
      off :对被代理的请求不启用压缩 
      expired,no-cache, no-store ,private :对代理服务器请求的响应报文首部Cache-Control 值任何一个,启用压缩功能 
    示例:

    gzip on;
    gzip_comp_level 9;
    gzip_min_length 128;
    gzip_types text/css application/javascript text/plain;
    gzip_vary on;


      我们来测试一下压缩效果:


    4.6 ssl 加密的实现

    1)server中的选项:

    ssl on | off ;

      为指定虚拟机启用HTTPS protocol,建议用listen 指令代替

    ssl_certificate file ;

      当前虚拟主机使用PEM 格式的证书文件路径

    ssl_certificate_key file ;

      当前虚拟主机上与其证书匹配的私钥文件路径

    ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] ;

      支持ssl 协议版本,默认为后三个

    ssl_session_cache off | none | [builtin[:size]] [shared:name:size] ;

      builtin[:size] :使用OpenSSL 内建缓存,为每worker 进程私有

      [shared:name:size] :在各worker 之间使用一个共享的缓存

    ssl_session_timeout time;

      客户端连接可以复用ssl session cache 中缓存的ssl 参数的有效时长,默认5m 
    示例:

    server{
    listen 443 ssl;
    server_name www.keer.com;
    root /data/web;
    ssl on;
    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;
    ssl_session_cache shared:sslcache:20m;
    ssl_session_timeout 10m;
    }

     
      下面的实验会讲到在nginx中实现ssl加密的具体步骤,有兴趣的走传送器


    4.7 地址重写

      基于ngx_http_rewrite_module模块。

    The ngx_http_rewrite_module module is used to change request URI using PCRE regular expressions,return redirects, and conditionally select configurations.

      将用户请求的URI 基于PCRE regex 所描述的模式进行检查,而后完成重定向替换

    示例:

    http://www.magedu.com/hn --> http://www.magedu.com/henan
    http://www.magedu.com --> https://www.magedu.com/

    4.7.1 rewrite 用法

      将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URI。 
      其语法是:

      rewrite regex replacement [flag]

      注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查。 
      隐含有循环机制,但不超过10次;如果超过,提示500响应码, [flag]所表示的标志位用于控制此循环机制。 
      如果replacement是以http://或https://开头,则替换结果会直接以重向返回给客户端。 
      下面我们来说一说flag的具体选项: 
    [flag]

    last:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮(从第一个开始)重写检查;提前重启新一轮循环。 
    break:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环,建议在location中使用。 
    redirect临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;不能以http://或https://开头,使用相对路径,状态码: 302。 
    permanent:重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求,状态码:301。

      由下图我们可以更清楚的看出跳转到的位置:

    4.7.2 return用法

      return的用法语法如下:

      return code [text];
      return code URL;
      return URL;

      停止处理,并返回给客户端指定的响应码。 
    例:连续跳转,image永久重定向到img,img又跳到www.baidu.com

    location /image {
    rewrite ^/image/(.*)$ /img/$1 permanent;
    }
    location /img {
    return http://www.baidu.com/ ;
    }

    4.7.3 一些其他的用法

    rewrite_log on | off ;

      把跳转的信息写到日志中 
      是否开启重写日志, 发送至error_log (notice level)

    set $variable value ;

      用户自定义变量,注意:变量定义和调用都要以$ 开头

    if (condition) { … }

      引入新的上下文, 条件满足时,执行配置块中的配置指令;server, location。其中: 
    condition可以为以下内容: 
    比较操作符: 
      == 相同 
      != 不同 
      ~ :模式匹配,区分字符大小写 
      ~* :模式匹配,不区分字符大小写 
      !~ :模式不匹配,区分字符大小写 
      !~* :模式不匹配,不区分字符大小写 
    文件及目录存在性判断: 
      -e, !-e 存在(包括文件,目录,软链接) 
      -f, !-f 文件 
      -d, !-d 目录 
      -x, !-x 执行 
    举例:

    实验一:搭建lnmp及类小米等商业网站的实现

    环境:关闭防火墙,selinux

    1、安装包,开启服务

    yum -y install nginx mariadb-server php-fpm php-mysql
    systemctl start nginx
    systemctl start mariadb
    systemctl start php-fpm

    2、修改nginx的配置文件

    cp /etc/nginx/nginx.conf.default /etc/nginx/nginx.conf

      我们将模板例子复制一份,去覆盖我们的配置文件,接着,对配置文件进行修改:

    vim /etc/nginx/nginx.conf

      修改下面几类: 
    1)user nobody;  使用用户 
    error_log /var/log/nginx/error.log info;  错误日志 
    2)

    events {
    worker_connections 65535;
    }

    3)

    tcp_nopush on; //tcp优化
    tcp_nodelay on;
    gzip on;

    4)

    server {
    listen 80;
    server_name xiaomi.keer.com; //根据自己需求随便写
    root /data/web; //主站点的目录根
    location / {
    index index.php index.html index.htm;
    }

    5)

    location ~ .php$ { //开启.php,配置文件有例子,只需去掉注释,修改一行即可
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    }

      以上五段全部修改完成后,可以使用nginx -t检查有没有语法错误,如果没有错误,就可以开启服务了:

    systemctl restart nginx

      我们重启服务,发现有warn(警告),这是因为我们的文件描述符最大值超出了系统的设置:

    ulimit -n

      我们可以使用上述的命令来查看linux系统里打开文件描述符的最大值,一般缺省值是1024,对一台繁忙的服务器来说,这个值偏小,所以有必要重新设置linux系统里打开文件描述符的最大值

    ulimit -n 65535  //修改内核参数

      现在我们就可以再次重启服务了,就不会有问题了。

    3、修改php-fpm的配置文件

    vim /etc/php.ini  //改两行
     
    date.timezone = Asia/Shanghai  //时区
    short_open_tag = On  //允许短标签
    vim /etc/php-fpm.d/www.conf 改两行
     
    user = nobody
    group = nobody

      然后我们就可以重启服务了:

    systemctl restart php-fpm

    4、运行mysql ,创建一会网页需要的库

    create database xiaomi;

    5、把事先找好的小米网站传进来 rz

    mkdir /data/web -p 创建一个目录专门放小米的网页配置
    unzip -d /data/web/ xiaomi.zip 解压到目录
    cd /data/web/
    chown -R nobody.nobody *  //为了安全,递归把所有文件的所属人和所属组改为权限有限的nobody

    6、网页登录

    1)用户:admin 
    密码:123456

    2)参数设置:就是连接上自己的数据库


      也可以在命令行连上自己的数据库:

    vim /data/web/data/config.php

    3)把数据写到数据库中,恢复数据

    7、实验成功,登录查看


      后台登录,可以自己随便修改:http://192.168.30.107/admin

    8、ab 可以压力测试

    实验二:实现ssl 加密

    1、 修改总配置文件

      在/etc/nginx/nginx.conf中加一行:

    include /etc/nginx/conf.d/*.conf; //添加的一行
    server {
    listen 80;
    server_name xiaomi.com;
    root /data/web;
    #charset koi8-r;
     
    #access_log logs/host.access.log main;
     
    location / {
    index index.php index.html index.htm;
    }

    2、修改子配置文件

    vim /etc/nginx/conf.d/ssl.conf
    server{
    listen 443 ssl;
    server name www.keer.com;
    root /data/web;
    ssl on;
    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.crt;
    ssl_session_cache shared:sslcache:20m;
    ssl_session_timeout 10m;
     
    location / {
    index index.php index.html index.htm;
    }
     
    location ~ .php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    }
    }

    3、创建自签名证书

    cd /etc/pki/tls/certs/
    make nginx.crt

      由于我们之前设定了秘钥加密,这样接下来比较不方便。所以,我们把私钥解密:

    openssl rsa -in nginx.key -out nginx.key

    4、创建存放证书的文件夹,并把证书和秘钥移进去

    [root@rs01 certs]# mkdir /etc/nginx/ssl
    [root@rs01 certs]# cp nginx.* /etc/nginx/ssl

    5、检查nginx配置文件语法错误

    nginx -t

    6、重启nginx服务。

    systemctl restart nginx

    7、测试访问

  • 相关阅读:
    理解HTTP的POST和PUT的区别
    眼见为实 — CSS的overflow属性
    Iconfont的代码使用
    JSP中contentType、pageEncoding和meta charset的区别
    在 webpack 中使用 ECharts
    MVC 中的 ViewModel
    一个简单例子理解C#的协变和逆变
    C#中使用委托、接口、匿名方法、泛型委托实现加减乘除算法
    c#打包文件解压缩
    8种主要排序算法的C#实现 (二)
  • 原文地址:https://www.cnblogs.com/keerya/p/7797610.html
Copyright © 2020-2023  润新知