一、源码编译安装nginx
- 安装相关依赖包


l 安装基于perl的正则表达式,支持URL重写
l 安装openssl软件库,用于https连接
2. 创建nginx程序用户

3. 额外准备编译所支持的路径目录

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的临时存放文件路径(若没有需要自行创建) |
- 配置环境变量
二、LNMP架构搭建
- 安装pepl源

2. 安装nginx

3. 安装php和mysql
yum -y install php mariadb mariadb-server mysql-devel php-mysql php-cgi php-mbstring php-gd php-fpm

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

5. 安装nginx调用php的php-fpm模块

6. 配置nginx文件,测试nginx



7. 编辑nginx主配置文件,在server中添加配置将nginx与php勾连

8. 开启php-fpm模块服务

9. 测试nginx与php勾连

10. 配置数据库

11. 编写数据库与php测试文件

三、Nginx与Apache动静分离

1. 搭建nginx服务器
① 安装软件包

② 安装nginx调用php的php-fpm模块

③ 修改nginx主配置文件

④ 访问测试

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

3. 搭建数据库服务器
① 安装软件包

② 数据库相关设置


4. Apache服务器配置,支持php
① 修改httpd主配置文件


② 访问测试

5. Nginx代理动态资源
① 修改nginx主配置文件

② 访问测试

6. 编写数据库、php、nginx资源测试文件


7. 项目上线
① 解压移动项目文件
Nginx、Apache服务器都解压移动到对应web文件目录下

② 为项目创建数据库
四、Nginx基本配置
- 正常运行配置

① 指定运行worker进程的用户和组

② 指定nginx守护进程的PID文件
l 编译安装时已经指定pid文件路径,不用配置(—pid-path=/var/run/nginx/nginx.pid)
③ 指定一个worker进程所能够打开的最大文件句柄数

l 不设置按照默认1024,依然能启动
l ulimit -n也能设置
④ 设置主机名,编码格式

⑤ 编写测试主页

⑥ 检查配置文件语法

⑦ 启动服务验证


2. 性能优化配置
① worker_processes(worker进程的个数)

l 通常应略少于CPU物理核心数(可设置为auto)
l 可以设置为auto系统自动调节
l 进程切换 context switch会产生CPU不必要的消耗,进程数要少于CPU但能提升缓存命中率
② worker_cpu_affinity [cpu mask](将worker进程绑定在某CPU上)

l 可以设置为auto系统自动调节
l cpumask由八位数的二进制表示,例如:00000001 00000010 00000100;
③ time_resolution计时器解析度
降低此值,可减少gettimeofday()系统调用的次数。(提升nginx性能)
④ worker_priority number(指明worker进程的优先(nice)值)


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进程能处理的最大并发连接数量

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服务器时的配置
- 虚拟主机配置
① 设置端口、根路径、名称


② 开启日志记录

③ 在全局配置中打开man格式

④ 开启404、500错误跳转页面

⑤ 创建相关文件


⑥ 验证结果



2. Location 配置
① 正则表达式模式匹配检查

② 结果验证

③ 不带符号匹配


l 匹配遵循一定的优先等级
= |
精确匹配 |
~ |
正则表达式模式匹配检查,区分字符大小写 |
~* |
正则表达式模块匹配检查,不区分字符大小写 |
^~ |
URI的前半部分匹配,不支持正则表达式 |
|
最后就是不带任何符号匹配 |
l 正则表达式优先级高,默认在/web/html2下查找/images/a.txt故而找不到
④ 注释正则表达式,继续访问


⑤ 定义路径别名alias

⑥ 编写测试页

⑦ 访问验证

3. Nginx访问控制
① 基于IP的访问控制
a. 修改nginx主配置文件

b. 10.10.64网段测试

c. 192.168.10网段测试

② 基于用户的访问控制
a. 安装htpasswd命令工具

b. 创建存放密码文件的目录

c. 创建密码文件

d. 修改nginx主配置文件

e. 访问验证

4. https服务
① CA服务器配置

② 服务器生成CA请求文件

③ 签署证书



④ 编辑nginx主配置文件

⑤ 将证书移动到配置文件对应的路径中

⑥ 创建测试首页

⑦ 抓包工具模拟认证证书


5. stub_status {on|off} 状态统计页面
① 修改nginx主配置文件

② 访问测试

Active connections |
当前所有处于活动的连接 |
server accepts |
接受的连接 |
server handled |
处理过的连接 |
server requests |
处理的请求 |
Reading |
正在接受的请求 |
Writing |
请求完成,处于发送响应报文状态 |
Waiting |
处于活动状态的连接数 |
- URL重写(用户请求重定向)
① 修改nginx主配置文件

② 创建测试页面


③ 访问测试


7. if上下文(通常定义在local或server上下文中)
变量名 |
变量值为空时,或者以“0”开始,即为false,其他的均为true |
以变量为基础的比较表达式 |
> < = |
可以基于正则表达式模式匹配操作 |
~:区分大小写模式匹配 ~:不区分大小写的模式匹配检查 !~和!~:对上面两种测试取反 |
测试文件是否存在 |
-f !-f |
测试指定目录是否存在 |
-d !-d |
测试文件是否存在 |
-e !-e |
检查文件是否有执行权 |
-x !-x |
① 修改nginx主配置文件

② 创建测试页面

③ 访问验证

8. 防盗链
① 默认情况下,其他网站能调用本网站的资源进行显示

② 修改nginx主配置文件

③ 准备测试图片

④ 结果验证


9. 访问日志格式
① 修改nginx主配置文件


② 根据配置文件创建目录

③ 访问验证
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网页其他优化
- 网页缓存
l 在http、server、location配置区域均可配置
① 修改nginx主配置文件

② 访问验证

2. 网页压缩
① 修改nginx主配置文件

② 修改测试文件

③ 访问验证

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命令程序包


② 执行日志切换脚本

③ 查看日志

④ 编写定时任务,每天执行

4. 修改服务器信息
① 默认显示服务器种类,版本,存在安全隐患

② 修改版本号、服务器种类


③ 修改http头信息connection字段,防止回显示版本号


④ 隐藏/修改nginx的http错误码的返回值


⑤ 验证结果

七、Nginx作为负载均衡器时的配置
- 反向代理
(1) 网络拓扑图

(2) 单个服务器反向代理
① 修改nginx主配置文件

② 访问测试

(3) 代理服务器部分目录
① 修改nginx配置文件

② 创建测试文件

③ 访问测试


(4) 代理服务器部分格式资源
① 修改nginx配置文件
l 不要接uri地址

② 编写测试文件


③ 访问验证

(5) 代理服务器日志设置
① 查看被代理的web服务器日志

l 默认不会记录源客户端的IP地址,无法完成用户日志的精准分析。
② 修改nginx主配置文件

l 使用proxy_set_head配置方法,来定义remote_addr。
③ 修改web服务器httpd主配置文件

l 修改upsteam server日志的格式
④ 访问验证

2. 缓存加速

(1) 代理服务器日志设置
① 在nginx主配置文件中定义缓存

② 在server或location中调用缓存

(2) 创建缓存目录并更改属主属组

(3) 访问验证,查看缓存

3. 负载均衡

(1) 负载均衡配置
① 定义模块
down |
表示单前的server暂时不参与负载 |
Weight |
默认为1.weight越大,负载的权重就越大。 |
max_fails |
允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误 |
fail_timeout |
max_fails 次失败后,暂停的时间。 |
Backup |
其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。 |
<br /> ② 调用模块<br /> <br /> ③ 访问验证<br /> <br />(2) 模拟节点下线<br />① 将节点1下线<br /> <br />② 访问验证<br /> <br />③ 将节点1和2都下线,启动backup<br /> <br />(3) 超时自动下线<br /><br />(4) 源地址hash绑定<br />① 配置nginx主配置文件<br /> <br />② 访问验证<br /> <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 /> <br />4. Fastcgi缓存<br />(1) Nginx主配置文件定义fastcgi缓存<br /><br />(2) 配置fastcgi缓存<br />