【Nginx】Nginx教程文档
笔记更新日期:2020年10月29日
0. 有用的链接
1. 安装及简介
1.1 nginx 版本说明
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
# 或者使用软链接
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
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
旧版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_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 压缩网页内容
该模块是使用"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;
}
5.6 日志文件
日志的格式,log_format
定义了日志格式,使用很多的变量来规范格式,例如$remote_addr
定义了客户端IP地址
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 这是一条日志信息,记录了访问portfolio_item_8.png文件的一个请求。
10.10.2.144 - - [27/Oct/2020:04:25:09 +0800] "GET /img/portfolio_item_8.png HTTP/1.1" 200 323988 "http://10.10.2.67/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36 Edg/86.0.622.51" "-"
6.Nginx 反向代理
当Nginx作为一个Web服务器时,它不仅需要处理Web业务,还需要处理各种Web请求,由于Web业务更注重的是开发效率,所以Nginx的性能是比较低下的。我们可以使用Nginx的反向代理功能,一台处理Web业务(上游服务器),一台处理Web请求(代理服务器)。这样做不仅解决了性能问题,还可以平滑扩展上游服务器,保证服务器的高可用。
6.1 配置Nginx反向代理
# 编辑nginx.conf配置文件
vim /usr/local/nginx/conf/nginx.conf
# 只监听本机端口
server {
# 只使用本地监听,修改后需要重启Nginx
listen 127.0.0.1:80;
server_name localhost;
# 配置代理服务器
# upstream 上游服务器地址,可以多个,local是名称,可以任意
upstream local {
server 127.0.0.1:80;
}
server{
servername localhost;
listen 8080;
location / {
# 引入代理Nginx会出现变量问题,比如浏览器访问Proxy是一条线,Proxy访问上游服务器是一条线,所以需要定义header
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://local;
}
}
# 重启Nginx服务
systemctl restart nginx
6.2 使用OpenResty
这里可以使用OpenResty作为反向代理服务器,OpenResty 是一个基于 Nginx与 Lua 的高性能 Web 平台
# 安装OpenResty
cd /etc/yum.repos.d/
wget https://openresty.org/package/centos/openresty.repo
yum check-update
yum install -y openresty openresty-resty
# 停用之前安装的Nginx
systemctl stop nginx
# 修改配置文件
vim /usr/local/openresty/nginx/conf/nginx.conf
server {
listen 8080;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
#root html;
alias /usr/local/nginx/site/;
index index.html index.htm;
}
include vhost/*.conf;
upstream local {
server 127.0.0.1:8080;
}
server{
server_name localhost;
listen 80;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://local;
}
}
# 启动openResty
/usr/local/openresty/nginx/sbin/nginx
6.4 使用缓存
对于访问静态内容或者一段时间不发生变化的内容,为了减少上游服务器的消耗,可以将这部分内容缓存到代理服务器上,这里使用的是代理服务器的cache特性。
这里还是使用二进制安装的Nginx,不使用OpenResty。
# 编辑nginx.conf配置文件
vim /usr/local/nginx/conf/nginx.conf
# 在http下添加缓存路径
proxy_cache_path /tmp/nginxcache levels=1:2 keys_zone=my_cache:10m max_size=10g
inactive=60m use_temp_path=off;
# 在proxy server下添加
server{
server_name localhost;
listen 80;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache my_cache;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 304 302 1d;
proxy_pass http://local;
}
7. 使用GoAccess监控访问日志
GoAccess是一个开源的实时Web 日志分析仪和交互式查看器,可以帮我们处理监控访问日志。
7.1 安装
# 安装epel源
rpm -Uvh https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/Packages/e/epel-release-7-12.noarch.rpm
# 安装GoAccess
yum install -y goaccess
7.2 格式化日志
# 进入日志文件目录
cd /usr/local/nginx/logs
# 格式化日志
goaccess access.log -o /var/www/html/report.html --log-format=COMBINED --real-time-html --time-format='%H:%M:%S' --date-format='%d/%b/%Y'
7.3 配置Nginx访问
# 编辑nginx.conf配置文件
vim /usr/local/nginx/conf/nginx.conf
# 添加一个location,指向report.html文件
location /report.html{
alias /var/www/html/report.html;
}
# 重载
nginx -s reload
8.TLS/SSL 安全访问
SSL(Secure Socket Layer)是 TLS(Transport Layer Security)的前身。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯,位于TCP协议中的网络层和应用层之间。TLS用于两个应用程序之间提供保密性和数据完整性。都拥有各自的记录协议和握手协议。
SSL/TLS 主要的目的包括:
- 认证网站,确保数据确实发送到正确的网站,而非假冒的钓鱼网站。
- 建立加密连线,以防止数据中途被窃取。
- 确保数据的完整性,确保数据在传输过程中不会被改变。
在客户端和服务器开始交换受 TLS 保护的信息之前,他们必须安全地交换或商定加密密钥和加密数据时使用的密码。用于密钥交换/协议的方法包括:使用 RSA 生成的公钥和私钥(在TLS握手协议中表示 TLS_RSA)、迪皮-赫尔曼(TLS_DH)、临时迪菲-赫尔曼 (TLS_DHE)、椭圆曲线迪菲-赫尔曼(TLS_ECDH),临时椭圆曲线迪菲-赫尔曼(TLS_ECDHE),匿名迪菲赫尔曼(TLS_DH_anon),预共享密钥(TLS_PSK)和安全远程密码(TLS_SRP)。较为安全的密钥交换方式是ECDHE和DHE
8.1 对称加密和非对称加密
异或的数学符号为“⊕”,计算机符号为“xor”。其运算法则为:
a⊕b = (¬a ∧ b) ∨ (a ∧¬b)
如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
对称加密通过密钥和密文即可解密为明文,其最大的有点是,性能非常好,只需通过遍历即可解密。
非对称加密会同时生成两个密钥,公钥和私钥,当文件用私钥加密时,只能使用对应的公钥解密。反之则需要使用对应的私钥解密。
8.2 证书的公信力是如何保证的
在网络通信当中,不仅需要对信息加密,还需要对信息的发送者或接受者进行身份验证。这就需要引入证书,支持TLS的网页服务器必须安装「SSL凭证」,SSL 凭证由受信任的数字证书认证机构(Certificate Authority,CA)核发。
8.3 TLS 通讯过程
在TLS通讯过程中,主要做两件事,交换密钥和加密,这也是最消耗性能的两件事
9.使用HTTPS访问网站
9.1 云服务器
云服务器已经做了域名解析可以采用 Let's Encrypt申请免费证书。
这里使用的是Cerbot证书管理机器人,Certbot 直接在 Web 服务器上运行,运行环境基于 Python 2.7 或 3.5+。
# 安装 nginx certbot
yum install certbot python2-certbot-nginx
# 使用cerbot签发证书
certbot --nginx --nginx-server-root=/usr/local/nginx/conf/ -d 域名
--nginx 指定使用nginx
--nginx-server-root 指定nginx配置文件
-d 指定域名
如果选择1,不做重定向,使用http也可以访问,如果选择2,使用重定向,在客户端使用http访问时会重定向至https
9.2 本地自签证书(关于cfssl的使用还有些问题)
内网如果需要HTTPS访问,没有申请自己的域名,可以采用CFSSL自签证书,内网自行管理。如果使用虚假的域名还需要搭建本地的DNS服务器或者采用写入HOSTS文件的方式,为虚拟的域名做解析。DNS服务器可以采用BIND9
# 安装go运行环境
wget https://golang.org/dl/go1.15.3.linux-amd64.tar.gz
tar -C /usr/local/ -xzf go1.15.3.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
go version
# 下载cfssl包编译
wget https://github.com/cloudflare/cfssl/archive/master.zip
unzip mastet.zip
cd cfssl-master/
make
# 安装cfssl
go get -u github.com/cloudflare/cfssl/cmd/cfssl
go get -u github.com/cloudflare/cfssl/cmd/cfssljson
# 或者安装全部工具
go get -u github.com/cloudflare/cfssl/cmd/...
# 软链接
ln -s /root/go/bin/* /usr/local/bin/
# 创建文件夹存放证书
mkdir /opt/certs
# 编辑ca证书生成文件
vim /opt/certs/ca-csr.json
{
"CN": "npc.io",
"hosts": [
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "Shanghai",
"L": "Shanghai",
"O": "npc",
"OU": "npc"
}
],
"ca": {
"expiry": "175200h"
}
}
CN: Common Name,浏览器使用该字段验证网站是否合法,一般写的是域名。非常重要。浏览器使用该字段验证网站是否合法
key:生成证书的算法
hosts:表示哪些主机名(域名)或者IP可以使用此csr申请的证书,为空或者""表示所有的都可以使用(本例中没有hosts字段)
names:一些其它的属性
C: Country, 国家
ST: State,州或者是省份
L: Locality Name,地区,城市
O: Organization Name,组织名称,公司名称(在k8s中常用于指定Group,进行RBAC绑定)
OU: Organization Unit Name,组织单位名称,公司部门
expiry: 过期时间
# 生成根证书
cd /opt/certs
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
ll
total 16
-rw-r--r-- 1 root root 1041 Oct 28 23:50 ca.csr
-rw-r--r-- 1 root root 329 Oct 28 23:45 ca-csr.json
-rw------- 1 root root 1675 Oct 28 23:50 ca-key.pem
-rw-r--r-- 1 root root 1298 Oct 28 23:50 ca.pem
# 该命令会生成运行CA所必需的文件ca-key.pem(私钥)和ca.pem(证书),还会生成ca.csr(证书签名请求),用于交叉签名或重新签名
# 创建ca证书配置文件
vim /opt/certs/ca-config.json
//server 表示服务端连接客户端时携带的证书,用于客户端验证服务端身份
//client 表示客户端连接服务端时携带的证书,用于服务端验证客户端身份
//peer 表示相互之间连接时使用的证书,如nginx各个节点之间验证
{
"signing": {
"default": {
"expiry": "175200h"
},
"profiles": {
"server": {
"expiry": "175200h",
"usages": [
"signing",
"key encipherment",
"server auth"
]
},
"client": {
"expiry": "175200h",
"usages": [
"signing",
"key encipherment",
"client auth"
]
},
"peer": {
"expiry": "175200h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
# 创建Nginx证书生成文件
vim /opt/certs/nginx-csr.json
{
"CN": "npc.io",
"hosts": [
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "Shanghai",
"L": "Shanghai",
"O": "npc",
"OU": "npc"
}
]
}
# 生成证书
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=client nginx_67_client.json |cfssljson -bare nginx_67
2020/10/29 00:31:34 [INFO] generate received request
2020/10/29 00:31:34 [INFO] received CSR
2020/10/29 00:31:34 [INFO] generating key: rsa-2048
2020/10/29 00:31:35 [INFO] encoded CSR
2020/10/29 00:31:35 [INFO] signed certificate with serial number 388925350134114890594396862913181723256750474421
2020/10/29 00:31:35 [WARNING] This certificate lacks a "hosts" field. This makes it unsuitable for
websites. For more information see the Baseline Requirements for the Issuance and Management
of Publicly-Trusted Certificates, v.1.1.6, from the CA/Browser Forum (https://cabforum.org);
specifically, section 10.2.3 ("Information Requirements").
ll nginx_67*
-rw-r--r-- 1 root root 281 Oct 29 00:31 nginx_67_client.json
-rw-r--r-- 1 root root 993 Oct 29 00:34 nginx_67.csr
-rw------- 1 root root 1675 Oct 29 00:34 nginx_67-key.pem
-rw-r--r-- 1 root root 1322 Oct 29 00:34 nginx_67.pem
# 配置Nginx
vim /usr/local/nginx/
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name npc.io;
# 重定向至https
rewrite ^(.*) https://$server_name$1 permanent;
#charset koi8-r;
#access_log logs/host.access.log main;
}
server {
listen 443 ssl;
server_name npc.io;
charset utf-8;
ssl_certificate /opt/certs/nginx_67.pem;
ssl_certificate_key /opt/certs/nginx_67-key.pem;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
alias /var/www/site/;
index index.html index.htm;
}
10.使用Openresty实现一些基本功能
下载安装参考6.2节
使用Nginx调用lua模块,获取用户浏览器相关的信息
vim /usr/local/openresty/nginx/conf/nginx.conf
location /lua{
default_type text/html;
content_by_lua 'ngx.say("User-Agent: ", ngx.req.get_headers()["User-Agent"])';
}
11. Nginx 架构基础
Nginx处于企业网络的边缘,处理的流量是应用服务器的数倍,了解Nginx的请求处理流程是非常有必要的。
12. Nginx 进程结构
单进程:不适合生产环境,开发调试用,为保障Nginx的健壮,多核心处理
多进程:
work节点数量配置数量与cpu核数一样并绑定对应的cpu核
13. 进程结构演示
nginx -s reload
重载配置文件后,worker进程将会关闭后重启新的进程
或者
kill -SIGUP 进程号
kill -SIGTERM 进程号
向work进程发送关闭信号后,master节点会重新启动一个新的进程来接管关闭的进程
14. 使用信号管理进程
红色只能通过kill命令