特性:
支持热部署:不停机更新配置文件,升级版本,更换日志文件
低内存消耗:10000个keep-alive连接模式下的非活动连接,仅需2.5M内存
模块化设计,较好的扩展性
高可靠性
event-driven,aio,mmap,sendfile
基本功能:
静态资源的web服务器
http协议反向代理服务器
pop3/imap4协议反向代理服务器
FastCGI,uWSGI等协议
模块化,如zip,ssl模块(支持动态化加载)
web服务相关的功能:
虚拟主机(server)
支持keep-alive和管道连接
访问日志(支持基于日志缓冲提高其性能)
url rewirte (地址重写)
路径别名
基于IP及用户的访问控制
支持速率限制及并发数限制
重新配置和在线升级而无需中断客户的工作进程
Memcached的GET接口
nginx的缓存存在nginx服务器的磁盘和内存中
模块分类:
1、核心模块
2、标准模块
1、http模块
2、Mail模块
3、Stream模块
3、三方模块
功用:
1、静态的web资源服务器 (html,图片,js,css等静态资源)
2、结合FastCGI/uWSGI/SCGI等协议反向代理动态资源请求
3、http/https协议的反向代理
4、imap4/pop3协议的反向代理
5、tcp/udp协议的请求转发(反向代理)
nginx参数:
-t:检查测试语法,并退出
-T:检查测试语法,会打印出内容并退出
-q:非错误信息压缩掉,测试期间
-s signal:stop(立即停止,不保证进程) quit(当请求全部结束后才停止) reopen(重新打开日志) reload(重载配置)
-p prefix:指定nginx的路径(默认:/user/share/nginx/)
-c prefix:指定配置文件路径(默认:/etc/nginx/nginx.conf)
-g directives:指定配置参数
-v:版本
-V:版本及配置信息
start nginx.exe 启动nginx
windows下配置了环境变量后,依然不能在全局的情况下启动,重启,退出,因为他读取配置文件是根据相对路径读取的;所以可以这样执行命令:
启动:start E:/nginx-1.16.1/nginx.exe -p E:/nginx-1.16.1
重启:E:/nginx-1.16.1/nginx.exe -p E:/nginx-1.16.1 -s reload
退出:E:/nginx-1.16.1/nginx.exe -p E:/nginx-1.16.1 -s quit
开机自启:
Windows 配置 Nginx 开机自启:
方法1:通过定时任务启动bat文件
@echo off
set nginx_home= D:/web/nginx-1.18.0
echo Starting nginx...
start %nginx_home%/nginx.exe -p %nginx_home%
exit
方法2:通过 winsw 将nginx注册为服务
winsw的配置参考:windows将脚本/程序注册为服务,winsw中所需的xml配置如下:
<service>
<id>nginx</id>
<name>nginx</name>
<description>nginx</description>
<logpath>%BASE%/service-log</logpath>
<logmode>roll</logmode>
<depend></depend>
<executable>D:/zm/nginx-1.20.1/nginx.exe</executable>
<!-- 启动参数 -->
<startarguments> -p D:/zm/nginx-1.20.1</startarguments>
<!-- 停止参数 -->
<stoparguments>-s stop</stoparguments>
</service>
linux开机自启
linux下ngixn的编译
./configure --help 查看编译时的帮助 ./configure --help | grep ssl 找相关ssl的配置参数
在nginx的源码目录下
./configure --prefix=/usr/local/nginx 指定安装目录编译
yum install -y gcc 安装c语言的编译器
yun install -y pcre-devel 安装依赖
yun install -y zlib-devel 安装依赖
编译后会生成objs 存放nginx的模块
make 会生成二进制运行脚本 nginx
make install 完成安装nginx 只有第一次安装才会使用
平滑升级和回退
将原来的sbin/nginx 二进制文件复制一份保留
将nginx编译、make后 将生成的nginx二进制脚本复制到当前nginx的sbin目录下,覆盖掉
kill -USER2 当前pid 原nginx处理完当前的请求后将不再接受新的请求,同时会生成一个新的进程pid
kill -WINCH 当前pid 启动新版本的nginx,而原来的nginx将停止工作
回退:将复制的ngixn二进制文件覆盖当前的文件
kill -HUP pid 唤醒原来的nginx进程
kill -USER2 当前pid
kill -WINCH 当前pid
日志切割
linux
每天0点将access.log文件以前一天的日期重命名。然后reopen nginx重新生成一个access.log文件
以脚本运行:
脚本
LOGS_PATH= /usr/local/nginx/logs/oldlogs
CUR_LOGS_PATH=/usr/local/nginx/logs
YESTERDAY=$(date +%F -d -day)
mv $CUR_LOGS_PATH/access.log $LOGS_PATH/${YESTERDAY}_access.log
mv $CUR_LOGS_PATH/error.log $LOGS_PATH/${YESTERDAY}_error.log
kill -USR1 ${cat /usr/local.nginx/logs/nginx.pid} 重新打开日志文件
写入定时任务:
crontab -e
0 0 1 * * /bin/bash /usr/local/nginx/logs/backup.sh
windows
@echo off
echo "切割日志"
set nginx_home= F:\phpstudy_pro\Extensions\Nginx1.15.11\
set nginx_log= %nginx_home%logs\
set histroy= %nginx_log%histroy\
set mhour=%time:~0,2%
set mhour=%mhour: =0%
set mdate=%Date:~0,4%%Date:~5,2%%Date:~8,2%%mhour%%time:~3,2%%time:~6,2%
set expire_time=30
if not exist %histroy% (
md %histroy%
)
forfiles /P %nginx_log% /m *.log /C "forfiles forfiles /P @path\.. /M @file /C \"cmd /C ren @path @fname_%mdate%.log\""
move %nginx_log%*.log %histroy%
%nginx_home%/nginx.exe -s reopen -p %nginx_home%
forfiles /p %nginx_log% /s /m *.log /d -%expire_time% /c "forfiles forfiles /P @path\.. /M @file /C \"cmd /C del @path\""
nginx日志自动切割
在配置文件中使用ngx_http_map_module模块的map指令定义变量$logdate,nginx会默认安装该模块
map $time_iso8601 $logdate {
'~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd;
default 'date-not-found';
}
使用变量$logdate,日志文件在访问后会自动生成
access_log F:/Nginx1.15.11/logs/acess_$logdate.log;