简介
Nginx是俄罗斯人Igor Sysoev编写的轻量级Web服务器,它的发音为 [ˈendʒɪnks] ,它不仅是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。官方文档
安装配置
安装
- 下载安装包
打开nginx官网下载目录找到最新版本.1
wget http://nginx.org/download/nginx-1.20.1.tar.gz
- 解压
1
tar -zxf nginx-1.20.1.tar.gz
- 安装依赖包
1
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel
- 创建安装目录
1
mkdir -p /data/soft/nginx
- 编译
1
./configure --prefix=/data/soft/nginx --with-http_ssl_module
本步骤可能出现缺少某些编译依赖的问题,看情况安装。
1
make && make install
配置
开机启动
- 操作脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66#!/bin/bash
nginxd=/data/soft/nginx/sbin/nginx
nginx_config=/data/soft/nginx/conf/nginx.conf
nginx_pid=/usr/local/nginx/logs/nginx.pid
RETVAL=0
prog="nginx"
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x $nginxd ] || exit 0
# Start nginx daemons functions.
start() {
if [ -e $nginx_pid ];then
echo "nginx already running...."
exit 1
fi
echo -n $"Starting $prog: "
daemon $nginxd -c ${nginx_config}
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
return $RETVAL
}
# Stop nginx daemons functions.
stop() {
echo -n $"Stopping $prog: "
killproc $nginxd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /usr/local/nginx/logs/nginx.pid
}
# reload nginx service functions.
reload() {
echo -n $"Reloading $prog: "
#kill -HUP `cat ${nginx_pid}`
killproc $nginxd -HUP
RETVAL=$?
echo
}
# See how we were called.
echo "$1"
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;
status)
status $prog RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|reload|status|help}"
exit 1
esac
exit $RETVAL - 启动脚本
1
vim /usr/lib/systemd/system/nginx.service
1
2
3
4
5
6
7
8
9
10
11
12
13
14[Unit]
Description=Nginx server daemon
[Service]
Type=forking
ExecStart=/data/soft/nginx/script/nginx.sh start
ExecStop=/data/soft/nginx/script/nginx.sh stop
ExecReload=/data/soft/nginx/script/nginx.sh reload
ExecRestart=/data/soft/nginx/script/nginx.sh restart
Execstatus=/data/soft/nginx/script/nginx.sh status
PrivateTmp=true
[Install]
WantedBy=multi-user.target - 加入开机启动
1
systemctl enable nginx
- 加载启动脚本
1
systemctl daemon-reload
- 移除开机启动
1
systemctl disable nginx
模块
http
server
location
匹配优先级
在nginx的location和配置中location的顺序没有太大关系。正location表达式的类型有关。相同类型的表达式,字符串长的会优先匹配。
以下是按优先级排列说明:
- =:精确匹配的优先级最高,一旦匹配成功,则不再查找其他匹配项。
- ^~:类型表达式。一旦匹配成功,则不再查找其他匹配项。
- ~
*:正则表达式类型(~*)的优先级次之。如果有多个location的正则能匹配的话,则使用正则表达式最长的那个。 - 常规字符串匹配类型。按前缀匹配。
(location =) > (location 完整路径) > (location ^~ 路径) > (location
,* 正则顺序) > (location 部分起始路径) > (/)
变量
- $1|$2|$3 …是nginx在匹配正则时生成的变量,用于捕获一个正则表达式括号中匹配的字符串(从左到右依次存储在$1|$2|$3 …中),新值覆盖旧值。
- location块中未设置root时,会取外层(server块)的root,但server.root不是先生成字符串然后赋值给location.root,而是直接把模板串交给location.root。
指令
map
map 指令是由 ngx_http_map_module 模块提供的,默认情况下安装 nginx 都会安装该模块。作用为创建一个变量,变量值依赖其他变量值。
示例:
1 | map $http_user_agent $mobile { |
语法:
1 | Syntax: map string $variable { ... } |
性能
由于仅在使用变量时才对它们进行求值,因此即使是大量“ map”变量的简单声明也不会为请求处理增加任何额外成本。
匹配顺序
- 不带掩码的字符串值
- 带有前缀掩码的最长字符串值,例如“ *.example.com”
- 带后缀掩码的最长字符串值,例如“ mail.*”
- 第一个匹配的正则表达式(按在配置文件中出现的顺序)
- 默认值
注意
map命中后,会影响location内部通过$获取的变量。