001 Nginx笔记01
1 Nginx简介
1.1 Nginx的三个主要应用场景
静态资源服务
- 通过本地文件系统提供服务
反向代理服务
- 缓存
- 负载均衡
API服务
Nginx直接访问数据库
- OpenResty
1.2 历史背景
互联网的数据量快速增长
低效的Apache
1.3 优点
高并发、高性能
可扩展性好,模快化
高可靠性
热部署
BSD许可证
1.4 组成
二进制可执行文件
Nginx.conf配置文件
access.log访问日志
error.log错误日志
1.5 版本发布
feature新功能
fugfix修复BUG
change重构
1.6 不同版本的Nginx版本
开源免费:nginx.org
商业版:nginx.com
阿里巴巴:Tengine
开源OpenResty.org api服务器、web防火墙
商业版OpenResty.com
2 安装nginx
2.1 编译安装
yum/apt
编译nginx:只有通过编译nginx才能集成第三方
1、下载nginx
2、介绍各目录
3、Configure
4、中间文件介绍
5、编译
6、安装
目录
auto/cc
CHANGES
CHANGES.ru 作者俄罗斯人
conf
configure
contrib vim配置,使用vim编辑配置时有语法高亮效果
src 源码
查看编译支持哪些参数
./configure --help | more
# 路径的相关配置
--prefix=PATH 推荐:只指定这个参数即可
--modules-path=PATH 动态模块
--lock-path=PATH nginx.log文件放在哪
# 确定使用哪些模块
--with-select_moudle 将默认不加入的模块置为加入
--without-select_module 将默认加入的模块置为不加入
# 指定特殊参数
编译
# 预先安装下面这些软件
apt-get install libpcre3-dev \
libssl-dev perl make build-essential curl
# 配置,指定安装目录
sudo ./configure --prefix=/opt/nginx
# 不用事先创建/opt/nginx目录
# 执行完后会列出配置特性及目录
# 生成的蹭文件会放在objs这个文件夹下
# 重要的文件objs/ngx_modules.c 要编译进nginx的模块都会放在这
# 编译
sudo make
# 生成的目标文件放在了objs目录下
# 做版本升级的时候会用到objs这个目录下的目标文件
# 如果配置了动态模块,动态模块生成的so也会放在objs这个目录下
# 生成的所有的中间文件都会放在src目录下
# 安装,首次安装可以使用这个命令
sudo make install
# 安装完成后进入prefix指定的目录下查看
2.2 配置语法
语法规则
- 配置文件由指令与指令块构成
- 每条指令以分号(;)结尾,指令与参数之间以空格符号分隔
- 指令块以{}大括号将多条指令组织在一块
- include语句允许组合多个配置文件以提升可维护性
- 使用#符号添加少注释,提高可读笥
- 使用$符号使用变量
- 部分指令的参数支持正则表达式
配置参数:时间的单位
ms 毫秒
s 秒
m 分钟
h 小时
d 天
w 周
M 月
y 年
配置参数:空间的单位
空字符 bytes
k/K
m/M
g/G
http配置的指令块
- http 所有指令都是由http模块解析执行
- server 对应域名
- location 对应URL
- upstream 表示上游服务
2.3 nginx命令行
-
格式:nginx -s reload
-
帮助:-? -h
-
使用指定的配置文件:-c
-
指定配置指令:-g
-
指定运行目录:-p
-
测试配置文件是否有语法错误:-t -T
-
打印nginx的版本信息、编译信息等:-v -V
-
操作运行中的进程中的方法通过发送信息 kill 命令或 -s参数
-
立刻停止服务:-s stop
-
优雅的停止服务:-s quit
-
重载配置文件:-s reload
-
重新开始记录日志文件:-s reopen
重载配置文件,平滑重启
# 打开tcp_nopush开关
vi /opt/nginx/conf/nginx.conf
# 平滑重启
nginx -s reload
热部署,升级,就是更换nginx这个二进制文件
# 查看nginx进程,有master和worker
ps -ef | grep nginx
# 备份
cp nginx nginx.old
# 替换nginx
cp -r /opt/soft_packages/nginx-1.16.1/objs/nginx /opt/nginx/sbin/
# 发送信号,重启nginx用新的二进制nginx文件
kill -USR2 old_nginx_pid
# 此命令只会关闭work进制,master进程保留,可用于版本回退(执行nginx -s reload)
kill -WINCH old_nginx_pid
切割日志文件
mv access.log access.bak.log
../sbin/nginx -s reopen
# 写成脚本放到crontab中执行
rotate.sh
rotate.sh
USR1信号是重新打开日志文件,和执行
/opt/nginx/sbin/nginx -s reopen效果一样
#!/bin/bash
HIS_LOGS_PATH=/data/backup/logs
CUR_LOGS_PATH=/opt/nginx/logs
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
mv ${CUR_LOGS_PATH}/access.log ${HIS_LOGS_PATH}/access_${YESTERDAY}.log
mv ${CUR_LOGS_PATH}/error.log ${HIS_LOGS_PATH}/error_${YESTERDAY}.log
kill -USR1 $(cat /opt/nginx/logs/nginx.pid)
3 简单应用
3.1 搭建静态资源Web服务器
配置alias
# root与alias
# url与路径映射
# root问题:会把url中的一些路径带到文件目录里来
# 此时的dlib路径为/opt/nginx/dlib
location / {
alias dlib/
}
打开gzip
# 如下代码与server同级
gzip on;
gzip_min_length 1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
3.2 访问目录结构
第三方模块:autoindex
location / {
...
autoindex on;
}
3.3 限制大文件访问速度
http://nginx.org/en/docs/http/ngx_http_core_module.html#limit_rate
location / {
...
set $limit_rate 1k;
}
3.4 记录日志access.log
http://nginx.org/en/docs/http/ngx_http_log_module.html
log_format 定义日志格式
变量
access_log 日志记录在哪