Nginx详解以及LNMP的搭建

时间:2022-11-01 04:37:01

一、nginx 介绍

Nginx详解以及LNMP的搭建Nginx详解以及LNMP的搭建

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 架构

Nginx详解以及LNMP的搭建 Nginx详解以及LNMP的搭建
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; //前台|后台运行

Nginx详解以及LNMP的搭建

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;
}

Nginx详解以及LNMP的搭建

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 ~^www\d+.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) 匹配优先级从高到低: 
=, ^~, ~/ ~*, 不带符号

Nginx详解以及LNMP的搭建

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,还是原来的错误页面

Nginx详解以及LNMP的搭建

(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;
}

Nginx详解以及LNMP的搭建


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; //保存用户口令的文件
}

Nginx详解以及LNMP的搭建

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

name:password:comment

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

Nginx详解以及LNMP的搭建

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

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


4.3 状态信息页面

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

Nginx详解以及LNMP的搭建 
  我们可以用浏览器来查看一下这个状态页面:

Nginx详解以及LNMP的搭建
  其中的“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;

Nginx详解以及LNMP的搭建

(略)  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;

Nginx详解以及LNMP的搭建
  我们来测试一下压缩效果:

Nginx详解以及LNMP的搭建


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详解以及LNMP的搭建 
  下面的实验会讲到在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。

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

Nginx详解以及LNMP的搭建

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 执行 
举例:

Nginx详解以及LNMP的搭建

实验一:搭建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

Nginx详解以及LNMP的搭建

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

Nginx详解以及LNMP的搭建
  也可以在命令行连上自己的数据库:

vim / data/web/data/config.php

Nginx详解以及LNMP的搭建

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

Nginx详解以及LNMP的搭建

7、实验成功,登录查看

Nginx详解以及LNMP的搭建
  后台登录,可以自己随便修改:http://192.168.30.107/admin

Nginx详解以及LNMP的搭建

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

Nginx详解以及LNMP的搭建

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

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、测试访问

Nginx详解以及LNMP的搭建