欢迎光临
我们一直在努力

【Nginx】学习文档

本站教程收集整理的这篇文章主要介绍了【Nginx】学习文档,本站教程本站觉得挺不错的,现在分享给大家,也给大家做个参考。

更新日期:2020年10月25日

0. 有用的链接

官方下载地址

官方文档地址(英文)

1. 安装及简介

1.1 Nginx 版本说明

@H_355_0@mainline version 主线版本

Stable version 稳定版本

Legacy versions 旧版本

  • feature 新增加的特性
  • bugfix 已修复的bug
  • change 重构

1.2 下载安装

操作系统版本: CentOS 7.8

Nginx 版本:Nginx-1.18.0 (2020年10月12日)

# 创建存放目录
mkdir /opt/soft
# 下载软件包
wget -P /opt/soft https://Nginx.org/download/Nginx-1.18.0.tar.gz
# 解压
tar -zxvf /opt/soft/Nginx-1.18.0.tar.gz 
# 进入目录
cd /opt/soft/Nginx-1.18.0
# 配置vim下Nginx.conf文件语法高亮,如果root目录下没有.vim文件夹,创建一个即可
cp -r /opt/soft/Nginx-1.18.0/contrib/vim/* ~/.vim
# 指定安装路径,/usr/local/Nginx是默认路径,无需指定,这里只是作为示范
./configure --prefix=/usr/local/Nginx
# 编译安装
make && make install
# 进入安装目录 启动Nginx
cd /usr/local/Nginx/sbin
./Nginx 
# 查看进程信息
ps -ef |grep Nginx
root     11653     1  0 23:25 ?        00:00:00 Nginx: master process ./Nginx
nobody   11654 11653  0 23:25 ?        00:00:00 Nginx: worker process

编译安装的详细说明文档

安装错误信息收集:

Q1:error: the http gzip module requires the zlib library.
A: yum install -y zlib-devel

Q2:error: the http rewrite module requires the PCRE library.
A: yum install -y pcre-devel

Q3:error: the http cache module requires md5 functions
A: yum -y install openssl openssl-devel

1.3 配置文件语法规则

截图来自极客时间

1.4 Nginx 命令

-?,-h         : this Help
-v            : show version and exit
-V            : show version and configure options then exit
-t            : test configuration and exit
-T            : test configuration, dump it and exit
-q            : suppress non-error messages during configuration tesTing
-s signal     : send signal to a master process: stop, quit, reopen, reload
-p prefix     : set prefix path (default: /usr/local/Nginx/)
-c filename   : set configuration file (default: conf/Nginx.conf)
-g directives : set global directives out of configuration file

1.5 将Nginx添加到环境变量

当需要执行Nginx命令时,需要进入到 sbin 目录下执行 Nginx命令,添加环境变量后则不需要那么做,可以像使用自带命令那样操作。

# 将命令路径插入环境变量配置文件
echo "export PATH=/usr/local/Nginx/sbin:$PATH" >> /etc/profile
# 重载配置文件
source /etc/profile

1.6 使用 systemctl 管理Nginx服务

# 编辑配置文件
vim /usr/lib/systemd/system/Nginx.service
# 将以下内容复制到该文件中
    [Unit]
    Description=Nginx
    After=network.target

    [service]
    Type=forking
    ExecStart=/usr/local/Nginx/sbin/Nginx
    ExecReload=/usr/local/Nginx/sbin/Nginx -s reload
    ExecStop=/usr/local/Nginx/sbin/Nginx -s quit
    PrivateTmp=true

    [Install]
    WantedBy=multi-user.target
# 查看状态并设置开机自启
systemctl status Nginx
systemctl enable Nginx

# 配置文件解释
    [Unit]
    服务的说明

    Description
    描述服务

    After
    描述服务类别

    [service]
    服务运行参数的设置

    Type=forking
    是后台运行的形式

    ExecStart
    为服务的具体运行命令

    ExecReload
    为重启命令

    ExecStop
    为停止命令

    PrivateTmp=True
    表示给服务分配独立的临时空间

    [Install]
    运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3

2.平滑升级 Nginx

平滑升级的意思是,Nginx正在运行,在不关闭Nginx服务的情况下,进行升级操作。

Nginx默认工作在多进程模式下,即主进程(master process)启动后完成配置加载和端口绑定等动作,fork出指定数量的工作进程(worker process),这些子进程会持有监听端口的文件描述符(fd),并通过在该描述符上添加监听事件来接受连接(accept)

主进程支持的信号
	TERM, INT: 立刻退出
	QUIT: 等待工作进程结束后再退出
	KILL: 强制终止进程
	HUP: 重新加载配置文件,使用新的配置启动工作进程,并逐步关闭旧进程。
	USR1: 重新打开日志文件
	USR2: 启动新的主进程,实现热升级
	WINCH: 逐步关闭工作进程
工作进程支持的信号
	TERM, INT: 立刻退出
	QUIT: 等待请求处理结束后再退出
	USR1: 重新打开日志文件
# 查看 Nginx 版本号
/usr/local/Nginx/sbin/Nginx -V

# 升级只需要替换二进制文件
# 备份
cp /usr/local/Nginx/sbin/Nginx Nginx.old

# 将新编译完成的Nginx,复制到该目录下
cp -r /opt/soft/Nginx-1.18.0/objs/Nginx /usr/local/Nginx/sbin/ -f
cp: overwrite ‘/usr/local/Nginx/sbin/Nginx’? y

# 启动新的主进程
# 查看进程号
ps -ef |grep Nginx
# 向主进程(master)发送USR2信号,Nginx会启动一个新版本的master进程和对应工作进程,和旧版一起处理请求
kill -USR2 11910 
# 可以看到如图所示的进程信息,新进程已经启动

# 关闭旧版Nginx worker进程
kill -WATCH 11910  

香港vps

旧版Nginx主进程 11910 还存在,但是所有的工作节点进程以及切换到新的Nginx进程 11914。这是因为如果新版本出现问题,可以重新将Nginx旧版的进程拉起

如果这时需要回退继续使用旧版本,可向旧的Nginx主进程发送HUP信号,它会重新启动工作进程, 仍使用旧版配置文件。然后可以将新版Nginx进程杀死(使用QUIT、TERM、或者KILL)

kill -HUP 11910

升级完毕,可向旧的Nginx主进程(master)发送(QUIT、TERM、或者KILL)信号,使旧的主进程退出

kill -QUIT 11910
ps aux | grep Nginx

8.验证 Nginx 版本号,并访问测试

/usr/local/Nginx/sbin/Nginx -v

3.重载配置文件

当修改Nginx配置文件后,在不停止Nginx服务下,重新加载Nginx配置文件

 ./Nginx -s reload

4. 日志分割

为了日志的可读性,方便查找,通常需要将日志文件做日期分割,例如按照每天或者每周作为日志的分割点。

#!/bin/bash
#
#********************************************************************
#[Author]:       NPC
#[Date]:         2020-10-25
#[Description]:  Nginx Logs split
#********************************************************************
LOGS_PATH=/usr/local/Nginx/logs
HISTORY_PATH=/usr/local/Nginx/logs/history
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)

# 按照日期分割访问日志文件
mv "${LOGS_PATH}/access.log" "${HISTORY_PATH}/access_${YESTERDAY}.log"
# 按照日期分割错误日志文件
mv "${LOGS_PATH}/error.log" "${HISTORY_PATH}/error_${YESTERDAY}.log"
# 重新打开日志文件
kill -USR1 $(cat /usr/local/Nginx/logs/Nginx.pid)

添加定时任务

# 将脚本文件放在 /usr/local/Nginx/sbin 目录下
# 赋予执行权限
chmod +x /usr/local/Nginx/sbin/Nginx_log_split.sh
# 设置定时任务,每天执行一次
# 添加定时任务 
crontab -e
0 0 1 * * /usr/local/Nginx/sbin/Nginx_log_split.sh
# 查看定时任务 
crontab -l

5. Nginx 静态Web服务器

5.1 部署一个静态网站

下载一个静态网站模板,我这里使用的是

https://templatemo.com/tm-520-highway

# 创建静态网站存放目录
mkdir /usr/local/Nginx/site
# 将模板文件解压上传到该路径下
# 修改配置文件
vim /usr/local/Nginx/conf/Nginx.conf
 server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        LOCATIOn / {
            #root   html;
            # 添加路径地址,root指定的路径是上级路径,alias指定的路径是当前路径
            alias  site/;
            index  index.html index.htm;
        }
# 重载配置文件
Nginx -s reload

?

5.2 配置一个可下载的文件目录

ngx_http_autoindex_modul模块说明

这里是利用 ngx_http_autoindex_module模块的特性,模块处理以斜杠字符结尾的请求,并生成目录列表。通常,当模块无法找到索引文件时ngx_http_index_module请求传递到此模块。ngx_http_autoindex_module``/``ngx_http_autoindex_module

# 编辑Nginx配置文件
vim /usr/local/Nginx/conf/Nginx.conf

        LOCATIOn / {
            alias site/;
            # 启用目录列表输出
            autoindex on;
            # 显示文件大小,开启显示确切的文件大小,关闭则四舍五入以K、M或者G为单位
            autoindex_exact_size off;  
            # 指定目录列表中的时间应在本地时区或 UTC 中输出
            autoindex_localtime on;  
            # 设置目录列表的格式,可以是html、xml、json、jsonp
            #autoindex_format html;
            index  index.html index.htm;
        }
# 重载配置文件
Nginx -s reload

注意,这里访问的目录列表不是根目录,是根目录下存在的文件路径

例如,我现在的文件目录下有 img 文件夹,我的访问地址是 10.10.2.67/img/

5.3 压缩网页内容

ngx_http_gzip_module

该模块是使用”gzip”方法压缩响应的筛选器。这通常有助于将传输数据的大小减少一半甚至更多。但使用 SSL/TLS 协议时,压缩响应可能会受到BREACH攻击。

# 编辑Nginx配置文件
vim /usr/local/Nginx/conf/Nginx.conf
# 可在http或者server LOCATIOn下填写如下信息
	# 开启压缩功能
	gzip  on;
	# 最小压缩字节,表示大于20字节开始压缩
    gzip_min_length 20;
    # 压缩率,压缩率分为1-9个等级,等级越高压缩比率越高,一些测试文章说等级4比较合适,高于4压缩效果不明显
    gzip_comp_level 4;
    # 压缩文件类型
    gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    # 重载配置文件
Nginx -s reload

5.4 设置网页访问流量限制

这里使用的是ngx_http_core_module中的 limit_rate,设置此变量可以限制访问网站的速度,例如

# 编辑Nginx.conf配置文件
vim /usr/local/Nginx/conf/Nginx.conf
# 在server下或者LOCATIOn下设置访问速度为4k
    LOCATIOn / {
                #root   html;
                alias site/;
                set $limit_rate 4k;
# 重载配置
Nginx -s reload

对于一些特殊的资源可以进一步设置限制访问,例如网站上有视频资源

LOCATIOn /flv/ {
    flv;
    limit_rate_after 500k;
    limit_rate       50k;
}

本站总结

以上是本站教程为你收集整理的【Nginx】学习文档全部内容,希望文章能够帮你解决【Nginx】学习文档所遇到的程序开发问题。

如果觉得本站教程网站内容还不错,欢迎将本站教程推荐给好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。