nginx关键配置简介

简介

Nginx是俄罗斯人Igor Sysoev编写的轻量级Web服务器,它的发音为 [ˈendʒɪnks] ,它不仅是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。官方文档

安装配置

安装

  1. 下载安装包
    打开nginx官网下载目录找到最新版本.
    1
    wget http://nginx.org/download/nginx-1.20.1.tar.gz
  2. 解压
    1
    tar -zxf nginx-1.20.1.tar.gz
  3. 安装依赖包
    1
    yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel
  4. 创建安装目录
    1
    mkdir -p /data/soft/nginx
  5. 编译
    1
    ./configure --prefix=/data/soft/nginx --with-http_ssl_module

    本步骤可能出现缺少某些编译依赖的问题,看情况安装。

    1
    make && make install

    配置

    开机启动

  6. 操作脚本
    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
  7. 启动脚本
    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
  8. 加入开机启动
    1
    systemctl enable nginx
  9. 加载启动脚本
    1
    systemctl daemon-reload
  10. 移除开机启动
    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
2
3
4
map $http_user_agent $mobile {
default 0;
"~Opera Mini" 1;
}

语法:

1
2
3
Syntax:	map string $variable { ... }
Default: —
Context: http

性能

由于仅在使用变量时才对它们进行求值,因此即使是大量“ map”变量的简单声明也不会为请求处理增加任何额外成本。

匹配顺序

  1. 不带掩码的字符串值
  2. 带有前缀掩码的最长字符串值,例如“ *.example.com”
  3. 带后缀掩码的最长字符串值,例如“ mail.*”
  4. 第一个匹配的正则表达式(按在配置文件中出现的顺序)
  5. 默认值

注意

map命中后,会影响location内部通过$获取的变量。

参考

Author: suce
Link: https://haoubox.cn/2021/05/17/nginx关键配置简介/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.