共计 15367 个字符,预计需要花费 39 分钟才能阅读完成。
一、nginx 介绍
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 的程序架构:
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
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-11/148576p2.htm
三、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 发送缓冲区大小
注意:
① 基于 port;
listen PORT; 指令监听在不同的端口
② 基于 ip 的虚拟主机
listen IP:PORT; IP 地址不同
③ 基于 hostname
server_name fqdn; 指令指向不同的主机名
(3)server_name name …;
虚拟主机的主机名称后可跟多个 由空白字符分隔 的字符串
支持 * 通配 任意长度的任意字符
server_name *.magedu.com www.magedu.*
支持 ~ 起始的 字符做 正则表达式 模式匹配,性能原因慎用
server_name ~^www\d+\.magedu\.com$
\d 表示 [0-9]
匹配优先级机制从高到低:
① 首先是字符串 精确匹配 如:www.magedu.com
② 左侧 *通配符 如:*.magedu.com
③ 右侧 * 通配符 如:www.magedu.*
④ 正则表达式:如:~^.*\.magedu\.com$,因为消耗 cpu 运算
⑤ 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 所对应的文档的 主目录路径,可用于 http, server, location, if in location
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,并找出一个最佳匹配,而后应用其配置
示例:
① server {…
server_name www.magedu.com;
location /images/ {
root /data/imgs/;
}
}
http://www.magedu.com/images/logo.jpg –> /data/imgs/images/logo.jpg
② =:对 URI 做精确匹配;
location = / {
…
}
http://www.magedu.com/ 匹配
http://www.magedu.com/index.html 不匹配
③ 正则符号的作用
^~:对 URI 的 最左边 部分做匹配检查,不区分字符大 小写
~:对 URI 做正则表达式模式匹配,区分字符大小写
~* :对 URI 做正则表达式模式匹配,不区分 字符大小写
不带符号:匹配起始于此 uri 的所有的 uri
④ 匹配优先级从高到低:
=, ^~, ~/ ~*, 不带符号
(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_pagecode … [=[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;
}
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-11/148576p3.htm
一、nginx 介绍
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 的程序架构:
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
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-11/148576p2.htm
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
2 级目录占 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 可以缓存以下三种信息:
① 文件 元数据 : 文件的描述符、文件大小和最近一次的修改时间
② 打开的目录结构
③ 没有找到的或者没有权限访问的文件的相关信息
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
四、重要常用的配置
4.1 权限控制
ngx_http_access_module 模块,实现基于 ip 的访问控制功能
① allow address | CIDR | unix: | all;
② deny address | CIDR | unix: | all;
http, server, location, limit_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 身份验证
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;
}
用户口令文件:
① 明文文本:格式 name:password:comment
② 加密文本:由 htpasswd 命令实现,httpd-tools 包所提供
4.3 状态信息页面
ngx_http_stub_status_module 模块,用于输出 nginx 的基本状态信息
① 设置
② 输出信息示例:
Active connections: 291
server accepts handled requests
16630948 16630948 31070465 三个数字分别对应 accepts,handled,requests 三个值
Reading: 6 Writing: 179 Waiting: 106
③ 定义
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]]; 调用日志
access_log 路径 日志名 ;
访问日志文件路径,格式及相关的缓冲的配置
buffer=size 缓存大小
flush=time 多长时间清除缓存
示例:
log_format compression ‘$remote_addr-$remote_user [$time_local] ‘
‘”$request” $status $bytes_sent ‘
‘”$http_referer” “$http_user_agent” “$gzip_ratio”‘;
access_log /spool/logs/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 6;
gzip_min_length 64;
gzip_proxied any;
gzip_types text/xml text/css application/Javascript;
测试压缩效果:
4.6 ssl 加密的实现
https ssl 的实现
(1)server 里的选项:
1、ssl on | off;
为指定虚拟机 启用 HTTPS protocol,建议用 listen 指令代替
2、ssl_certificate file;
当前虚拟主机使用 PEM 格式的 证书文件路径
3、ssl_certificate_key file;
当前虚拟主机上与其证书匹配的 私钥文件路径
4、ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
支持ssl 协议版本,默认为后三个
5、ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
builtin[:size]:使用 OpenSSL 内建缓存,为每 worker 进程私有
[shared:name:size]:在各 worker 之间使用一个共享的缓存
6、ssl_session_timeout time;
客户端连接可以复用 ssl session cache 中缓存的 ssl 参数的有效时长,默认 5m
示例:
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;
ssl_session_timeout 10m;
}
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/
(1)rewrite regex replacement [flag]
将用户请求的 URI 基于 regex 所描述的模式进行检查,匹配到时将其替换为 replacement 指定的新的 URI
注意:如果在同一级配置块中存在多个 rewrite 规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查
隐含有循环机制, 但不超过 10 次;如果超过,提示 500 响应码,[flag] 所表示的标志位用于控制此循环机制
如果 replacement 是以 http:// 或 https:// 开头,则替换结果会直接以重向返回给客户端
301:永久重定向 302:临时重定向
分析:目录跳转,正则匹配 到 zz 开头的,都永久重定向到 zhengzhou,且 后边的 uri 不变,如:index.html,
[flag]:
① last:重写完成后停止对当前 URI 在当前 location 中后续的其它重写操作,而后对新的 URI 启动新一轮重写检查;提前重启新一轮循环,不建议在 lation 中使用
② break:重写完成后停止对当前 URI 在当前 location 中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环,建议在 location 中使用
③ redirect :临时重定向 ,重写完成后以临时重定向方式直接返回重写后生成的新 URI 给客户端,由客户端重新发起请求;不能以 http:// 或 https:// 开头,使用相对路径, 状态码:302
④ permanent: 重写完成后以 永久重定向 方式直接返回重写后生成的新 URI 给客户端,由客户端重新发起请求,状态码:301
(2)return
return code [text]; 例:return 403 “error”;
return code URL; 例:return 302 http://www.baidu.com/;
return URL; 例:return http://www.baidu.com/;
停止处理,并返回给客户端指定的响应码
例:连续跳转,image 永久重定向到 img,img 又跳到 www.baidu.com
location /image {
rewrite ^/image/(.*)$ /img/$1 permanent;
}
location /img {
return http://www.baidu.com/ ;
}
(3)rewrite_log on | off; 把跳转的信息写到日志中
是否开启重写日志, 发送至 error_log(notice level)
(4)set $variable value;
用户自定义变量 ,注意:变量定义和调用都要 以 $ 开头
(5)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 修改下面几类
① user nobody; 使用用户
error_log /var/log/nginx/error.log info; 错误日志
② events {
worker_connections 65535;
}
③ tcp_nopush on; tcp 优化
tcp_nodelay on;
gzip on;
④ server {
listen 80;
server_name xiaomi.along.com; 根据自己顺便写
root /data/web; 主站点的目录根
location / {
index index.php index.html index.htm;
}
⑤ 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、网页登录
① 用户:admin
密码:123456
② 参数设置:就是连接上自己的数据库
也可以在命令行连上自己的数据库:
vim /data/web/data/config.php
③ 把数据写到数据库中,恢复数据
7、实验成功,登录查看
后台登录,可以自己随便修改
http://192.168.30.107/admin
8、ab 可以压力测试
实验二:实现 ssl 加密
(1)一个物理服务器设置一个 https
1、创建存放证书的目录
mkdir /etc/nginx/ssl
2、自签名证书
cd /etc/pki/tls/certs/
make nginx.crt
openssl rsa -in nginx.key -out nginx2.key 因为刚私钥被加密了,为了后边方便,解密
3、把证书和私钥 cp 到 nginx 存放证书目录
cp nginx.crt nginx2.key /etc/nginx/ssl/
cd /etc/nginx/ssl/
mv nginx2.key nginx.key 把名字改回来
4、修改配置文件,加一段 server
server {
listen 443 ssl;
server_name www.along.com;
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;
}
5、测试,网页打开 https://192.168.30.7/
Windows 信任证书
(2)一个物理服务器设置多个 https
因为 nginx 强大,可以实现多个虚拟主机基于不同的 FQDN 实现 ssl 加密,httpd 不能实现
1、生成 3 个证书和私钥
make nginx.crt
make nginx2.crt
make nginx3.crt
2、把证书和私钥 cp 到 nginx 存放证书目录,并解开私钥的加密
cp nginx{1,2,3}* /etc/nginx/ssl/
openssl rsa -in nginx.key -out nginx.key
openssl rsa -in nginx2.key -out nginx2.key
openssl rsa -in nginx3.key -out nginx3.key
3、创建各自对应的访问网页
mkdir /app/website{1,2,3}
echo website1 > /app/website1/index.html
echo website1 > /app/website2/index.html
echo website1 > /app/website3/index.html
4、测试访问,成功
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
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-11/148576.htm