一、源码编译安装nginx

  1. 安装相关依赖包
    nginx服务配置 - 图1
    nginx服务配置 - 图2
    l 安装基于perl的正则表达式,支持URL重写
    l 安装openssl软件库,用于https连接
    2. 创建nginx程序用户
    nginx服务配置 - 图3
    3. 额外准备编译所支持的路径目录
    nginx服务配置 - 图4
    4. 编译安装
    ./configure —prefix=/usr/local/nginx —conf-path=/etc/nginx/nginx.conf —group=nginx —error-log-path=/var/log/nginx/error.log —http-log-path=/var/log/nginx/access.log —pid-path=/var/run/nginx/nginx.pid —lock-path=/var/lock/nginx.lock —with-http_stub_status_module —with-http_ssl_module —with-http_gzip_static_module —with-http_flv_module —with-http_mp4_module —http-client-body-temp-path=/var/tmp/nginx/client —http-proxy-temp-path=/var/tmp/nginx/proxy —http-fastcgi-temp-path=/var/tmp/nginx/fastcgi —without-mail_pop3_module —without-mail_smtp_module
—prefix=/usr/local/nginx 默认安装的路径
—conf-path=/etc/nginx/nginx.conf 主配置文件目录
—group=nginx 属组
—http-client-body-temp-path=/var/tmp/nginx/client 客户端提交数据临时存放文件路径(若没有需要自行创建)
—http-proxy-temp-path 作为代理服务器临时存放文件路径
—http-fastcgi-temp-path=/var/tmp/nginx/fastcgi 作为fastcgi的临时存放文件路径(若没有需要自行创建)
  1. 配置环境变量
    nginx服务配置 - 图5

    二、LNMP架构搭建

  2. 安装pepl源
    nginx服务配置 - 图6
    2. 安装nginx
    nginx服务配置 - 图7
    3. 安装php和mysql
    yum -y install php mariadb mariadb-server mysql-devel php-mysql php-cgi php-mbstring php-gd php-fpm
    nginx服务配置 - 图8
    4. 安装php依赖组件
    yum -y install autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers
    nginx服务配置 - 图9
    5. 安装nginx调用php的php-fpm模块
    nginx服务配置 - 图10
    6. 配置nginx文件,测试nginx
    nginx服务配置 - 图11
    nginx服务配置 - 图12
    nginx服务配置 - 图13
    7. 编辑nginx主配置文件,在server中添加配置将nginx与php勾连
    nginx服务配置 - 图14
    8. 开启php-fpm模块服务
    nginx服务配置 - 图15
    9. 测试nginx与php勾连
    nginx服务配置 - 图16
    10. 配置数据库
    nginx服务配置 - 图17
    11. 编写数据库与php测试文件
    nginx服务配置 - 图18
    nginx服务配置 - 图19

    三、Nginx与Apache动静分离

    nginx服务配置 - 图20
    1. 搭建nginx服务器
    ① 安装软件包
    nginx服务配置 - 图21
    ② 安装nginx调用php的php-fpm模块
    nginx服务配置 - 图22
    ③ 修改nginx主配置文件
    nginx服务配置 - 图23
    ④ 访问测试
    nginx服务配置 - 图24
    2. 搭建Apache、php服务器
    ① 安装软件包
    yum -y install httpd php php-mysql php-cgi php-mbstring php-gd php-fpm autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers
    nginx服务配置 - 图25
    3. 搭建数据库服务器
    ① 安装软件包
    nginx服务配置 - 图26
    ② 数据库相关设置
    nginx服务配置 - 图27
    nginx服务配置 - 图28
    4. Apache服务器配置,支持php
    ① 修改httpd主配置文件
    nginx服务配置 - 图29
    nginx服务配置 - 图30
    ② 访问测试
    nginx服务配置 - 图31
    5. Nginx代理动态资源
    ① 修改nginx主配置文件
    nginx服务配置 - 图32
    ② 访问测试
    nginx服务配置 - 图33
    6. 编写数据库、php、nginx资源测试文件
    nginx服务配置 - 图34
    nginx服务配置 - 图35
    7. 项目上线
    ① 解压移动项目文件
    Nginx、Apache服务器都解压移动到对应web文件目录下
    nginx服务配置 - 图36
    ② 为项目创建数据库
    nginx服务配置 - 图37

    四、Nginx基本配置

  3. 正常运行配置
    nginx服务配置 - 图38
    ① 指定运行worker进程的用户和组
    nginx服务配置 - 图39
    ② 指定nginx守护进程的PID文件
    l 编译安装时已经指定pid文件路径,不用配置(—pid-path=/var/run/nginx/nginx.pid)
    ③ 指定一个worker进程所能够打开的最大文件句柄数
    nginx服务配置 - 图40
    l 不设置按照默认1024,依然能启动
    l ulimit -n也能设置
    ④ 设置主机名,编码格式
    nginx服务配置 - 图41
    ⑤ 编写测试主页
    nginx服务配置 - 图42
    ⑥ 检查配置文件语法
    nginx服务配置 - 图43
    ⑦ 启动服务验证
    nginx服务配置 - 图44
    nginx服务配置 - 图45
    2. 性能优化配置
    ① worker_processes(worker进程的个数)
    nginx服务配置 - 图46
    l 通常应略少于CPU物理核心数(可设置为auto)
    l 可以设置为auto系统自动调节
    l 进程切换 context switch会产生CPU不必要的消耗,进程数要少于CPU但能提升缓存命中率
    ② worker_cpu_affinity [cpu mask](将worker进程绑定在某CPU上)
    nginx服务配置 - 图47
    l 可以设置为auto系统自动调节
    l cpumask由八位数的二进制表示,例如:00000001 00000010 00000100;
    ③ time_resolution计时器解析度
    降低此值,可减少gettimeofday()系统调用的次数。(提升nginx性能)
    ④ worker_priority number(指明worker进程的优先(nice)值)
    nginx服务配置 - 图48
    nginx服务配置 - 图49
    l 取值范围(-20—>100,19—>139)值越小,优先级越高
    3. 事件相关配置
    ① accept_mutex {off|on};
    master调度用户请求至各worker进程时使用的负载均衡锁,on表示能使多个worker进程轮流、序列化的响应新请求。
    ② lock_file file
    accept_mutex用到的锁文件路径(在编译安装时已配置)
    ③ use [epoll|select|poll|rtsig]
    指明使用的事件模型,建议让nginx自动选择
    ④ worker_connections
    设定单个worker进程能处理的最大并发连接数量
    nginx服务配置 - 图50
    4. 用于用户调试、定位问题
    l (若使用调试功能,需在编译的时候—with-debug)
    ① daemon {on|off};
    是否以守护进程方式运行nginx,调试时应该设置为on。
    ② master_process {on|off};
    是否以master/worker模型来运行nginx,调试时可以设为off。
    ③ error_log file
    错误日志,包括日志位置和级别。(使用debug级别,需要编译时使用—with-debug选项)

    五、Nginx作为web服务器时的配置

  4. 虚拟主机配置
    ① 设置端口、根路径、名称
    nginx服务配置 - 图51
    nginx服务配置 - 图52
    ② 开启日志记录
    nginx服务配置 - 图53
    ③ 在全局配置中打开man格式
    nginx服务配置 - 图54
    ④ 开启404、500错误跳转页面
    nginx服务配置 - 图55
    ⑤ 创建相关文件
    nginx服务配置 - 图56
    nginx服务配置 - 图57
    ⑥ 验证结果
    nginx服务配置 - 图58
    nginx服务配置 - 图59
    nginx服务配置 - 图60
    2. Location 配置
    ① 正则表达式模式匹配检查
    nginx服务配置 - 图61
    ② 结果验证
    nginx服务配置 - 图62
    ③ 不带符号匹配
    nginx服务配置 - 图63
    nginx服务配置 - 图64
    l 匹配遵循一定的优先等级
= 精确匹配
~ 正则表达式模式匹配检查,区分字符大小写
~* 正则表达式模块匹配检查,不区分字符大小写
^~ URI的前半部分匹配,不支持正则表达式
最后就是不带任何符号匹配

l 正则表达式优先级高,默认在/web/html2下查找/images/a.txt故而找不到
④ 注释正则表达式,继续访问
nginx服务配置 - 图65
nginx服务配置 - 图66
⑤ 定义路径别名alias
nginx服务配置 - 图67
⑥ 编写测试页
nginx服务配置 - 图68
⑦ 访问验证
nginx服务配置 - 图69
3. Nginx访问控制
① 基于IP的访问控制
a. 修改nginx主配置文件
nginx服务配置 - 图70
b. 10.10.64网段测试
nginx服务配置 - 图71
c. 192.168.10网段测试
nginx服务配置 - 图72
② 基于用户的访问控制
a. 安装htpasswd命令工具
nginx服务配置 - 图73
b. 创建存放密码文件的目录
nginx服务配置 - 图74
c. 创建密码文件
nginx服务配置 - 图75
d. 修改nginx主配置文件
nginx服务配置 - 图76
e. 访问验证
nginx服务配置 - 图77
4. https服务
① CA服务器配置
nginx服务配置 - 图78
② 服务器生成CA请求文件
nginx服务配置 - 图79
③ 签署证书
nginx服务配置 - 图80
nginx服务配置 - 图81
nginx服务配置 - 图82
④ 编辑nginx主配置文件
nginx服务配置 - 图83
⑤ 将证书移动到配置文件对应的路径中
nginx服务配置 - 图84
⑥ 创建测试首页
nginx服务配置 - 图85
⑦ 抓包工具模拟认证证书
nginx服务配置 - 图86
nginx服务配置 - 图87
5. stub_status {on|off} 状态统计页面
① 修改nginx主配置文件
nginx服务配置 - 图88
② 访问测试
nginx服务配置 - 图89

Active connections 当前所有处于活动的连接
server accepts 接受的连接
server handled 处理过的连接
server requests 处理的请求
Reading 正在接受的请求
Writing 请求完成,处于发送响应报文状态
Waiting 处于活动状态的连接数
  1. URL重写(用户请求重定向)
    ① 修改nginx主配置文件
    nginx服务配置 - 图90
    ② 创建测试页面
    nginx服务配置 - 图91
    nginx服务配置 - 图92
    ③ 访问测试
    nginx服务配置 - 图93
    nginx服务配置 - 图94
    7. if上下文(通常定义在local或server上下文中)
变量名 变量值为空时,或者以“0”开始,即为false,其他的均为true
以变量为基础的比较表达式 > < =
可以基于正则表达式模式匹配操作 ~:区分大小写模式匹配
~:不区分大小写的模式匹配检查
!~和!~
:对上面两种测试取反
测试文件是否存在 -f !-f
测试指定目录是否存在 -d !-d
测试文件是否存在 -e !-e
检查文件是否有执行权 -x !-x

① 修改nginx主配置文件
nginx服务配置 - 图95
② 创建测试页面
nginx服务配置 - 图96
③ 访问验证
nginx服务配置 - 图97
8. 防盗链
① 默认情况下,其他网站能调用本网站的资源进行显示
nginx服务配置 - 图98
② 修改nginx主配置文件
nginx服务配置 - 图99
③ 准备测试图片
nginx服务配置 - 图100
④ 结果验证
nginx服务配置 - 图101
nginx服务配置 - 图102
9. 访问日志格式
① 修改nginx主配置文件
nginx服务配置 - 图103
nginx服务配置 - 图104
② 根据配置文件创建目录
nginx服务配置 - 图105
③ 访问验证
nginx服务配置 - 图106
10. 网络连接相关的配置

Keepalive_timeout # 长连接能允许请求超时时长,默认75s
Keepalive_requests # 一个长连接所能够允许请求的最大资源数
Keepalive_disable [msie8 | safari | none] 为指定类型的User Agent禁用长连接
tcp_nodelay on|off 是否对长连接使用TCP_NODELAY选项
client_header_timeout # 读取http请求报文首部的超时时长
client_body_timeout# 读取http请求报文body部分的超时时长
Send_timeout # 发送相应报文的超时时长

六、nginx网页其他优化

  1. 网页缓存
    l 在http、server、location配置区域均可配置
    ① 修改nginx主配置文件
    nginx服务配置 - 图107
    ② 访问验证
    nginx服务配置 - 图108
    2. 网页压缩
    ① 修改nginx主配置文件
    nginx服务配置 - 图109
    ② 修改测试文件
    nginx服务配置 - 图110
    ③ 访问验证
    nginx服务配置 - 图111
    3. nginx日志切割
    Nginx没有自带模块对其日志进行切割,我们可以通过编写脚本,以周期性计划任务方式对nginx日志切割
kill -1 nginx// 平滑重启 nginx (reload)
kill -s HUP nginx // 平滑重启 nginx (reload)
kill -3 nginx // 正常停止 nginx (stop)
kill -s QUIT nginx // 正常停止 nginx (stop)
kill -s USR1 nginx // 用于 nginx 的日志切换,也就是重新打开一个日志文件,例如每天要生成一个日志文件时,可以使用这个信号来控制
kill -s USR2 nginx // 用于平滑升级可执行程序
nginx -s reload 平滑加载reload
nginx -s stop 停止nginx服务

① 安装killall命令程序包
nginx服务配置 - 图112
nginx服务配置 - 图113
② 执行日志切换脚本
nginx服务配置 - 图114
③ 查看日志
nginx服务配置 - 图115
④ 编写定时任务,每天执行
nginx服务配置 - 图116
4. 修改服务器信息
① 默认显示服务器种类,版本,存在安全隐患
nginx服务配置 - 图117
② 修改版本号、服务器种类
nginx服务配置 - 图118
nginx服务配置 - 图119
③ 修改http头信息connection字段,防止回显示版本号
nginx服务配置 - 图120
nginx服务配置 - 图121
④ 隐藏/修改nginx的http错误码的返回值
nginx服务配置 - 图122
nginx服务配置 - 图123
⑤ 验证结果
nginx服务配置 - 图124
nginx服务配置 - 图125

七、Nginx作为负载均衡器时的配置

  1. 反向代理
    (1) 网络拓扑图
    nginx服务配置 - 图126
    (2) 单个服务器反向代理
    ① 修改nginx主配置文件
    nginx服务配置 - 图127
    ② 访问测试
    nginx服务配置 - 图128
    (3) 代理服务器部分目录
    ① 修改nginx配置文件
    nginx服务配置 - 图129
    ② 创建测试文件
    nginx服务配置 - 图130
    ③ 访问测试
    nginx服务配置 - 图131
    nginx服务配置 - 图132
    (4) 代理服务器部分格式资源
    ① 修改nginx配置文件
    l 不要接uri地址
    nginx服务配置 - 图133
    ② 编写测试文件
    nginx服务配置 - 图134
    nginx服务配置 - 图135
    ③ 访问验证
    nginx服务配置 - 图136
    (5) 代理服务器日志设置
    ① 查看被代理的web服务器日志
    nginx服务配置 - 图137
    l 默认不会记录源客户端的IP地址,无法完成用户日志的精准分析。
    ② 修改nginx主配置文件
    nginx服务配置 - 图138
    l 使用proxy_set_head配置方法,来定义remote_addr。
    ③ 修改web服务器httpd主配置文件
    nginx服务配置 - 图139
    l 修改upsteam server日志的格式
    ④ 访问验证
    nginx服务配置 - 图140
    2. 缓存加速
    nginx服务配置 - 图141
    (1) 代理服务器日志设置
    ① 在nginx主配置文件中定义缓存
    nginx服务配置 - 图142
    ② 在server或location中调用缓存
    nginx服务配置 - 图143
    (2) 创建缓存目录并更改属主属组
    nginx服务配置 - 图144
    (3) 访问验证,查看缓存
    nginx服务配置 - 图145
    3. 负载均衡
    nginx服务配置 - 图146
    (1) 负载均衡配置
    ① 定义模块
down 表示单前的server暂时不参与负载
Weight 默认为1.weight越大,负载的权重就越大。
max_fails 允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
fail_timeout max_fails 次失败后,暂停的时间。
Backup 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
  1. ![](https://cdn.nlark.com/yuque/0/2021/png/2308212/1613199392450-9340ef4a-c337-4560-86f0-188997668ace.png#crop=0&crop=0&crop=1&crop=1&height=112&id=xnyoJ&originHeight=187&originWidth=462&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=&width=277)<br /> ② 调用模块<br /> ![](https://cdn.nlark.com/yuque/0/2021/png/2308212/1613199392707-ab74a9c7-3df6-4dea-8595-25e71ba8f15e.png#crop=0&crop=0&crop=1&crop=1&height=108&id=KbrsG&originHeight=229&originWidth=738&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=&width=347)<br /> ③ 访问验证<br /> ![](https://cdn.nlark.com/yuque/0/2021/png/2308212/1613199392932-14cc1292-aee8-40f7-9892-682c6ff9c33d.png#crop=0&crop=0&crop=1&crop=1&height=90&id=PbZhN&originHeight=151&originWidth=409&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=&width=245)<br />(2) 模拟节点下线<br />① 将节点1下线<br /> ![](https://cdn.nlark.com/yuque/0/2021/png/2308212/1613199393135-a19459b9-2b29-4148-9a86-45ac350fc067.png#crop=0&crop=0&crop=1&crop=1&height=83&id=Zo3c9&originHeight=140&originWidth=591&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=&width=349)<br />② 访问验证<br /> ![](https://cdn.nlark.com/yuque/0/2021/png/2308212/1613199393370-f32d0fe7-ba7a-4a90-8ca9-4df140bc8da4.png#crop=0&crop=0&crop=1&crop=1&height=122&id=SdUVX&originHeight=203&originWidth=396&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=&width=238)<br />③ 将节点1和2都下线,启动backup<br /> ![](https://cdn.nlark.com/yuque/0/2021/png/2308212/1613199393605-4b1f1940-61a9-4cbf-a4b2-2e97d4f15c9e.png#crop=0&crop=0&crop=1&crop=1&height=92&id=PfATc&originHeight=153&originWidth=404&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=&width=242)<br />(3) 超时自动下线<br />![](https://cdn.nlark.com/yuque/0/2021/png/2308212/1613199393831-a37f4d5b-d3cb-416e-88aa-61d5beb9f6a1.png#crop=0&crop=0&crop=1&crop=1&height=90&id=iqwsy&originHeight=198&originWidth=786&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=&width=357)<br />(4) 源地址hash绑定<br />① 配置nginx主配置文件<br /> ![](https://cdn.nlark.com/yuque/0/2021/png/2308212/1613199394074-784f5388-fe8e-47ad-a891-c8244bdb5dad.png#crop=0&crop=0&crop=1&crop=1&height=57&id=Y85np&originHeight=130&originWidth=793&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=&width=347)<br />② 访问验证<br /> ![](https://cdn.nlark.com/yuque/0/2021/png/2308212/1613199394302-1747e618-3b35-4f55-92c7-f89e22b5c472.png#crop=0&crop=0&crop=1&crop=1&height=91&id=HbQ9X&originHeight=152&originWidth=402&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=&width=241)<br />(5) Cookie会话绑定<br />① 安装sticky模块<br />./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/server/tools/nginx-sticky-module-ng<br />② 配置nginx主配置文件<br /> ![](https://cdn.nlark.com/yuque/0/2021/png/2308212/1613199394515-d94815f9-63a7-429a-a3d9-8f78693d5000.png#crop=0&crop=0&crop=1&crop=1&height=91&id=xrvGx&originHeight=152&originWidth=471&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=&width=283)<br />4. Fastcgi缓存<br />(1) Nginx主配置文件定义fastcgi缓存<br />![](https://cdn.nlark.com/yuque/0/2021/png/2308212/1613199394788-9edd8cef-8e2f-4b9f-aa76-16316c520905.png#crop=0&crop=0&crop=1&crop=1&height=80&id=qh8gL&originHeight=207&originWidth=938&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=&width=364)<br />(2) 配置fastcgi缓存<br />![](https://cdn.nlark.com/yuque/0/2021/png/2308212/1613199395020-2a800d8a-586c-4cd3-96a3-8262cf0a1259.png#crop=0&crop=0&crop=1&crop=1&height=87&id=pFqbq&originHeight=262&originWidth=1094&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=&width=363)