nginx基础

2020-03-04

特性:

    支持热部署:不停机更新配置文件,升级版本,更换日志文件
    低内存消耗: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把程序/脚本安装成服务

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;

 

{/if}