IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Nginx(1.20.0)(操作系统CentOS-8.4.2105-x86_64)(持续更新中……) -> 正文阅读

[系统运维]Nginx(1.20.0)(操作系统CentOS-8.4.2105-x86_64)(持续更新中……)

Nginx(1.20.0)(操作系统CentOS-8.4.2105-x86_64)

用途

  • 正向代理:客户端通过局域网LAN内的代理服务器访问广域网WAN的服务。对服务端屏蔽客户端。
  • 反向代理:客户端访问指定服务,服务通过代理服务器转发给局域网LAN内的目标服务器。对客户端屏蔽服务端。
    • 动静分离:动态资源和静态资源分开服务。
    • 负载均衡:同一请求按规则转发到不同服务的某一个。

正向代理
反向代理
反向代理-动静分离
反向代理-负载均衡

安装

快速安装

  • 安装:yum install nginx
  • 设置开机启动Nginx服务:systemctl enable nginx
  • 启动Nginx服务:systemctl start nginx
  • 要验证服务是否正在运行,检查其状态:systemctl status nginx

自定义安装

  • 安装依赖
    • 快速安装
      • gcc__
        • 用途:编译源码
        • 安装:yum -y install gcc-c++
      • pcre、pcre-devel
        • 用途:PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括perl兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库,pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。
        • 安装:yum install -y pcre pcre-devel
      • zlib
        • 用途:zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip。
        • 安装:yum install -y zlib zlib-devel
      • openssl、openssl-devel
        • 用途:OpenSSL是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。nginx不仅支持http协议,还支持https(即在ssl协议上传输http)。
        • 安装:yum install -y openssl openssl-devel
    • 常规安装
      • gcc
        • 用途:编译源码
        • 安装:yum -y install gcc-c++
      • pcre
        • 用途:rewrite模块
        • 网站:pcre英文官方网站
        • 下载安装
          • 安装目录:cd /usr/src
          • 下载:wget https://github.com/PhilipHazel/pcre2/releases/download/pcre2-10.39/pcre2-10.39.tar.bz2
          • 解压:tar -xjvf pcre2-10.39.tar.bz2
          • 安装
            • cd pcre2-10.39
            • ./configure
            • make & make install
      • openssl
        • 用途:ssl模块
        • 网站:openssl英文官方网站
        • 下载安装
          • 安装目录:cd /usr/src
          • 下载:wget https://www.openssl.org/source/openssl-3.0.0.tar.gz
          • 解压:tar -zxvf openssl-3.0.0.tar.gz
          • 安装:
            • cd openssl-3.0.0
            • ./config
            • make & make install
      • zlib
        • 用途:gzip模块
        • 网站:zlib英文官方网站
        • 下载安装
          • 安装目录:cd /usr/src
          • 下载:wget http://zlib.net/zlib-1.2.11.tar.gz
          • 解压:tar -zxvf zlib-1.2.11.tar.gz
          • 安装
            • cd zlib-1.2.11
            • ./configure
            • make & make install
  • 安装nginx
    • 下载安装
      • 安装目录:cd /usr/src
      • 下载:wget http://nginx.org/download/nginx-1.20.0.tar.gz
      • 解压:tar -zxvf nginx-1.20.0.tar.gz
      • 安装
        • cd nginx-1.20.0
        • ./configure --prefix=/usr/local/nginx --with-openssl=/usr/src --with-pcre=/usr/src --with-zlib=/usr/src --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_sub_module --with-http_gzip_static_module
        • make & make install
      • 启动
        • cd /usr/local/nginx/sbin
        • ./nginx
        • 访问0.0.0.0:80

CLI

configure指令(nginx源文件构建指令)

  • configure指令:打开源文件存放目录/usr/src/nginx-1.20.0/里面的configure执行指令
    • --help:输出帮助信息
    • --prefix=path:设置nginx安装目录,默认值/usr/local/nginx
    • --with-openssl=path:设置用于安装openssl库的源文件所在路径
    • --with-pcre=path:设置用于安装pcre库的源文件所在路径
    • --with-pcre:设置强制使用PCRE库
    • --with-zlib=path:设置用于安装zlib库的源文件所在路径
    • --with-http_stub_status_module:设置允许查看nginx状态的模块
    • --with-http_ssl_module:设置支持https(即在ssl协议上传输http)的模块
    • --with-http_v2_module:设置支持http/2的模块
    • --with-http_sub_module:设置支持改动匹配的响应的字符串
    • --with-http_gzip_static_module:设置支持gzip功能

nginx指令(nginx运行时指令)

  • nginx指令:打开nginx安装目录/usr/local/nginx里面的sbin/nginx执行指令
    • 无参数:启动nginx服务
    • -? | -h:打印帮助信息
    • -c file:设置指定的配置文件,用于替换默认的配置文件,默认配置文件路径为/usr/local/nginx/conf/nginx.conf
    • -e file:设置指定存放的错误日志文件,用于替换默认的错误日志文件
    • -g directives:设置配置文件的全局指令,例如nginx -g "pid /var/run/nginx.pid; worker_processes 'sysctl -n hw.ncpu';"
    • -p prefix:设置nginx指令的存放目录,用于替换默认的nginx指令存放目录/usr/local/nginx
    • -q:设置执行nginx配置文件的执行过程中禁止打印错误信息
    • -s signal:发送一个信号到主进程
      • stop:关闭nginx服务,(强硬)此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。
      • quit:关闭nginx服务,(温和)此方式停止步骤是待nginx进程处理任务完毕进行停止。注意:启动nginx服务就是直接执行nginx指令无参数。
      • reload:重启nginx(不推荐此方法,推荐先停止在启动),一般用于重新加载配置文件
      • reopen:重新打开日志文件
    • -t:测试配置文件是否语法错误
    • -T:测试配置文件是否语法错误,并打印配置文件内容
    • -v:打印nginx版本
    • -V:打印nginx版本,编译器版本,和配置参数

配置文件

  • 配置文件:配置文件默认路径为/usr/local/nginx/conf/nginx.conf
    • 配置项
      • main模块
        • 核心模块(全局模块)
        • events模块
        • http模块
          • server
            • location

内嵌变量

  • $remote_addr:客户端IP地址
  • $remote_user:客户端用户名称
  • $time_local:当前请求在Nginx服务器当前机器的访问时间和时区
  • $request:请求的URI和HTTP协议
  • $status:响应状态码
  • $body_bytes_sent:发送给客户端响应文件内容大小,不包括响应请求头
  • $http_referer:url跳转来源
  • $http_user_agent:用户终端浏览器等信息

配置项

核心模块(全局模块)

  • daemon on | off
    • 用途:设置nginx服务是否作为一个守护进程,主要用于测试环境的调试。
    • 缺省值: daemon on;
    • 上下文:main。
    • 注意:不要将daemonmaster_process指令用于生产环境,这些配置主要用于测试环境的调试。
daemon  off;
  • master_process on | off
    • 用途:设置nginx服务是否启动worker进程,这个指令主要适用于nginx开发者。
    • 缺省值:master_process on;
    • 上下文:main。
    • 注意:不要将daemonmaster_process指令用于生产环境,这些配置主要用于测试环境。
master_process  off;
  • debug_points abort | stop

    • 用途:设置允许在调试器内设置断点用于调试,这个指令用于调试。
    • 缺省值: 无。
    • 上下文:main。
  • error_log file [level]

    • 用途:设置错误日志配置,主要记录nginx处理http请求的错误状态,以及nginx本身服务运行的错误状态。
    • 缺省值: error_log logs/error.log error;,相对的当前路径为prefix,prefix默认为/usr/local/nginx,即nginx安装目录,即该缺省值实际默认为error_log /usr/local/nginx/logs/error.log error;
    • 上下文:main, http, mail, stream, server, location。
    • 参数
      • file:设置错误日志路径,默认为logs/error.log,相对于prefix,也就是相对于nginx安装目录,即路径受到configure编译参数–prefix=<路径>指令的影响,如果没有指定,Nginx默认是被编译在/usr/local/nginx。
      • level:设置错误日志级别,默认为error,如下按级别从低到高从上到下列出,低级别日志展示包含高级别的日志,高级别的日志展示不包含低级别的日志,即级别越低展示内容越丰富或者冗余,调试debug展示的日志则包含全部错误信息。
        • debug:如果要开启该级别的日志,则需要在编译nginx时执行参数--with-debug,即在源文件目录下执行./configure --with-debug执行安装nginx。
        • info
        • notice
        • warn
        • error
        • crit
        • alert
        • emerg
    • 注意
      • error_log /dev/null;:彻底关闭error_log
  • include file | mask

    • 用途:设置包含的配置文件,用于包含拆分的配置文件,或者文件扩展名与文件类型映射表文件例如mime.types(mime type 和文件扩展名的对应关系一般放在mime.types这个文件里,然后用include mime.types;来加载)。
    • 缺省值: 无。
    • 上下文:any。
    • 参数
      • file:设置包含的文件的路径,与error_log不同,当前指令的文件路径相对的是配置文件的当前目录路径。
# /usr/src/nginx/conf/nginx.conf
include mime.types;
include vhosts/*.conf;

# /usr/src/nginx/conf/mime.types
types {
    text/html                                        html htm shtml;
    text/css                                         css;
    text/xml                                         xml;
    image/gif                                        gif;
    image/jpeg                                       jpeg jpg;
    application/javascript                           js;
    application/atom+xml                             atom;
    application/rss+xml                              rss;

    text/mathml                                      mml;
    text/plain                                       txt;
    text/vnd.sun.j2me.app-descriptor                 jad;
    text/vnd.wap.wml                                 wml;
    text/x-component                                 htc;

    image/png                                        png;
    image/svg+xml                                    svg svgz;
    image/tiff                                       tif tiff;
    image/vnd.wap.wbmp                               wbmp;
    image/webp                                       webp;
    image/x-icon                                     ico;
    image/x-jng                                      jng;
    image/x-ms-bmp                                   bmp;

    application/font-woff                            woff;
    application/java-archive                         jar war ear;
    application/json                                 json;
    application/mac-binhex40                         hqx;
    application/msword                               doc;
    application/pdf                                  pdf;
    application/postscript                           ps eps ai;
    application/rtf                                  rtf;
    application/vnd.apple.mpegurl                    m3u8;
    application/vnd.google-earth.kml+xml             kml;
    application/vnd.google-earth.kmz                 kmz;
    application/vnd.ms-excel                         xls;
    application/vnd.ms-fontobject                    eot;
    application/vnd.ms-powerpoint                    ppt;
    application/vnd.oasis.opendocument.graphics      odg;
    application/vnd.oasis.opendocument.presentation  odp;
    application/vnd.oasis.opendocument.spreadsheet   ods;
    application/vnd.oasis.opendocument.text          odt;
    application/vnd.openxmlformats-officedocument.presentationml.presentation
                                                     pptx;
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
                                                     xlsx;
    application/vnd.openxmlformats-officedocument.wordprocessingml.document
                                                     docx;
    application/vnd.wap.wmlc                         wmlc;
    application/x-7z-compressed                      7z;
    application/x-cocoa                              cco;
    application/x-java-archive-diff                  jardiff;
    application/x-java-jnlp-file                     jnlp;
    application/x-makeself                           run;
    application/x-perl                               pl pm;
    application/x-pilot                              prc pdb;
    application/x-rar-compressed                     rar;
    application/x-redhat-package-manager             rpm;
    application/x-sea                                sea;
    application/x-shockwave-flash                    swf;
    application/x-stuffit                            sit;
    application/x-tcl                                tcl tk;
    application/x-x509-ca-cert                       der pem crt;
    application/x-xpinstall                          xpi;
    application/xhtml+xml                            xhtml;
    application/xspf+xml                             xspf;
    application/zip                                  zip;

    application/octet-stream                         bin exe dll;
    application/octet-stream                         deb;
    application/octet-stream                         dmg;
    application/octet-stream                         iso img;
    application/octet-stream                         msi msp msm;

    audio/midi                                       mid midi kar;
    audio/mpeg                                       mp3;
    audio/ogg                                        ogg;
    audio/x-m4a                                      m4a;
    audio/x-realaudio                                ra;

    video/3gpp                                       3gpp 3gp;
    video/mp2t                                       ts;
    video/mp4                                        mp4;
    video/mpeg                                       mpeg mpg;
    video/quicktime                                  mov;
    video/webm                                       webm;
    video/x-flv                                      flv;
    video/x-m4v                                      m4v;
    video/x-mng                                      mng;
    video/x-ms-asf                                   asx asf;
    video/x-ms-wmv                                   wmv;
    video/x-msvideo                                  avi;
}
  • pid file

    • 用途:设置用于存储主进程ID的文件路径。相对的当前路径为prefix,prefix默认为/usr/local/nginx,即nginx安装目录,即该缺省值实际默认为error_log /usr/local/nginx/logs/nginx.pid;
    • 缺省值:pid logs/nginx.pid;
    • 上下文:main。
  • ssl_engine device

    • 用途:设置用于指定openssl使用的引擎。你可以通过命令openssl engine -t获知系统目前支持的openssl引擎。
    • 缺省值:无
    • 上下文:main。
  • timer_resolution interval

    • 用途:Reduces timer resolution in worker processes, thus reducing the number of gettimeofday() system calls made. By default, gettimeofday() is called each time a kernel event is received. With reduced resolution, gettimeofday() is only called once per specified interval.
    • 缺省值:无
    • 上下文:main。
timer_resolution 100ms;
  • user user [group]

    • 用途:设置Nginx Worker进程运行用户和用户组,默认是nobody帐号。
    • 缺省值:user nobody nobody;
    • 上下文:main。
    • 参数
      • user:指定用户
      • group:指定用户组,如果忽略该选项则默认为指定用户user所在的用户组
  • worker_cpu_affinity cpumask ..., worker_cpu_affinity auto [cpumask]

    • 用途:仅适用于linux,使用该选项可以绑定worker进程和CPU。
    • 缺省值:无
    • 上下文:main。
# 分别给每个worker进程绑定一个CPU.
worker_proceses     4;
worker_cpu_affinity 0001 0010 0100 1000;

# 将CPU0/CPU2绑定给第一个worker进程,将CPU1/CPU3绑定给第二个worker进程。
worker_proceses     2;
worker_cpu_affinity 0101 1010;
  • worker_priority number
    • 用途:使用该选项可以给所有的worker进程分配优先值。
    • 缺省值:worker_priority 0;
    • 上下文:main。
    • 参数
      • number:-20至20之间
worker_priority -10;
  • worker_processes number | auto

    • 用途:设置nginx服务使用的worker进程数量,一般设置为cpu的核数
    • 缺省值:worker_processes 1;
    • 上下文:main。
    • 参数
      • number:-20至20之间,或者auto,The auto parameter is supported starting from versions 1.3.8 and 1.2.5.
  • worker_rlimit_core size

    • 用途:Changes the limit on the largest size of a core file (RLIMIT_CORE) for worker processes. Used to increase the limit without restarting the main process.
    • 缺省值:无
    • 上下文:main。
  • worker_rlimit_nofile number

    • 用途:Changes the limit on the maximum number of open files (RLIMIT_NOFILE) for worker processes. Used to increase the limit without restarting the main process.
    • 缺省值:无
    • 上下文:main。
  • worker_shutdown_timeout time

    • 用途:This directive appeared in version 1.11.11.Configures a timeout for a graceful shutdown of worker processes. When the time expires, nginx will try to close all the connections currently open to facilitate shutdown.
    • 缺省值:无
    • 上下文:main。
  • working_directory directory

    • 用途:Defines the current working directory for a worker process. It is primarily used when writing a core-file, in which case a worker process should have write permission for the specified directory.
    • 缺省值:无
    • 上下文:main。

events模块

  • accept_mutex on | off

    • 用途:nginx 使用连接互斥锁进行顺序的accept()系统调用
    • 缺省值:on
    • 上下文:events
  • accept_mutex_delay time

    • 用途:当accept_mutex启动时,如果一个进程没有互斥锁,该配置项用于设置延迟多长时间重新连接。默认情况下,延迟是500ms 。
    • 缺省值:accept_mutex_delay 500ms;
    • 上下文:events
  • debug_connection address | CIDR | unix:;

    • 用途:Enables debugging log for selected client connections. Other connections will use logging level set by the error_log directive. Debugged connections are specified by IPv4 or IPv6 (1.3.0, 1.2.1) address or network. A connection may also be specified using a hostname. For connections using UNIX-domain sockets (1.3.0, 1.2.1), debugging log is enabled by the “unix:” parameter.
    • 缺省值:无
    • 上下文:events
    • 注意:For this directive to work, nginx needs to be built with --with-debug, see “A debugging log”.
events {
    debug_connection 127.0.0.1;
    debug_connection localhost;
    debug_connection 192.0.2.0/24;
    debug_connection ::1;
    debug_connection 2001:0db8::/32;
    debug_connection unix:;
    ...
}
  • multi_accept on | off

    • 用途:如果accept_mutex禁止,一个worker进程每次只允许一个新连接,否则,一个worker进程每次允许所有新连接。
    • 缺省值:multi_accept off;
    • 上下文:events
  • use method

    • 用途:如果在./configure的时候指定了不止一种事件模型,那么可以设置其中一个,以便告诉nginx使用哪种事件模型。默认情况下nginx会在./configure时找出最适合系统的事件模型。
    • 缺省值:无
    • 上下文:events
    • 参数
      • method:kqueue | rtsig | epoll | /dev/poll | select | poll | eventport
  • worker_connections number

    • 用途:设置一个worker进程能打开的最大并发连接数。通过worker_connectionsworker_proceses可以计算出maxclients:max_clients = worker_processes * worker_connections
    • 缺省值:worker_connections 512;
    • 上下文:events

http模块

ngx_http_core_module
  • default_type mime-type
    • 用途:设置相应的默认文件类型,如果客户端Web程序的请求报文没设置,服务端的Nginx服务也没对应文件的扩展名(即include mime.types的文件内不存在此响应的文件后缀匹配),就用Nginx里默认的 default_type定义的处理方式。
    • 缺省值:default_type text/plain;
    • 上下文:http, server, location
location = /proxy.pac {
    default_type application/x-ns-proxy-autoconfig;
}
location = /wpad.dat {
    rewrite . /proxy.pac;
    default_type application/x-ns-proxy-autoconfig;
}
  • sendfile on | off
    • 用途:设置是否允许使用sendfile()。
    • 缺省值:sendfile off;
    • 上下文:http, server, location, if in location
location /video/ {
    sendfile       on;
    tcp_nopush     on;
    aio            on;
}
  • tcp_nopush on | off

    • 用途:设置在FreeBSD师傅允许使用TCP_NOPUSH套接字,或者在Linux是否允许使用TCP_CORK套接字,这个选项依赖于sendfile配置项被启动。
    • 缺省值:tcp_nopush off;
    • 上下文:http, server, location
  • keepalive_timeout timeout [header_timeout]

    • 用途:设置在FreeBSD师傅允许使用TCP_NOPUSH套接字,或者在Linux是否允许使用TCP_CORK套接字,这个选项依赖于sendfile配置项被启动。
    • 缺省值:keepalive_timeout 75s;
    • 上下文:http, server, location
    • 参数
      • timeout:设置Nginx服务保持长连接的时长,设置为0则关闭长连接
      • header_timeout:设置响应请求头Keep-Alive:timeout=time,适用于Mozilla和Konqueror
ngx_http_log_module
  • log_format name [escape=default|json|none] string ...

    • 用途:定义记录日志格式(可以定义多种日志格式,取不同名字name即可)
    • 缺省值:log_format combined '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent";
    • 上下文:http
    • 参数
      • name:定义的记录日志格式的名称,在access_log指令中引用
      • escape:设置变量中的字符编码方式是json还是default,默认是default。
        • default:默认值,转义", \以及字符编码值小于32或者大于126的字符为\xXX格式,如果字符编码值不存在则日志会打印为-
        • json:所有不匹配JSON字符的字符将会被转义,", \将被转义为\", \\,字符编码值小于32将会被转义为如同\n, \r, \t, \b, \f或者\u00XX
        • none:不允许转义。
      • string:要定义的日志格式内容。该参数可以有多个。参数中可以使用Nginx内嵌变量。
  • access_log path name [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]], access_log off

    • 用途:记录nginx每一次http请求的访问状态,主要用于分析每一次访问的请求和客户端的交互行为。
    • 缺省值:access_log logs/access.log combined
    • 上下文:http, server, location, if in location, limit_except
    • 参数
      • path:access日志文件路径
      • name:设置记录日志格式,可以用log_format设置的自定义记录日志格式
      • format
        • buffer:设置存放访问日志的缓冲区大小
        • gzip:设置压缩级别
        • flush:设置缓冲区的日志刷到磁盘的时间
        • if:设置其他条件
    • 注意:关闭access日志使用指令access_log off
ngx_http_gzip_module
  • gzip on | off
    • 用途:设置响应是否使用Gzip。
    • 缺省值:gzip off;
    • 上下文:http, server, location, if in location
ngx_http_index_module
  • index file ...
    • 用途:设置HTTP服务器的默认首页。指令值为多个文件时,会按照从左到右的顺序依次查找,找到对应文件后将结束查找。
    • 缺省值:index index.html;
    • 上下文:http, server, location
location / {
    index index.$geo.html index.html;
}
ngx_http_proxy_module
  • proxy_pass URL
    • 用途:设置连接被代理服务器的协议、IP地址或套接字,也可以是域名或upstream定义的服务器组
    • 缺省值:无
    • 上下文:location, if in location, limit_except
location / {
    proxy_pass $scheme://$http_host$request_uri; # 代理到远端服务器
}
ngx_http_fastcgi_module
  • fastcgi_pass address

    • 用途:设置默认index文件
    • 缺省值:无
    • 上下文:location, if in location
  • fastcgi_index name

    • 用途:设置FastCGI服务器的IP地址或套接字,也可以是域名或upstream定义的服务器组
    • 缺省值:无
    • 上下文:http, server, location
  • fastcgi_param parameter value [if_not_empty]

    • 用途:Sets a parameter that should be passed to the FastCGI server. The value can contain text, variables, and their combination. These directives are inherited from the previous configuration level if and only if there are no fastcgi_param directives defined on the current level.
    • 缺省值:无
    • 上下文:http, server, location
# Nginx基于FastCGI实现负载均衡

upstream fscgi_server {
    ip_hash;                               # session会话保持
    server 192.168.2.145:9000;             # PHP-FPM服务器IP
    server 192.168.2.159:9000;             # PHP-FPM服务器IP
}

fastcgi_cache_path /usr/local/nginx/nginx-cache1
                            levels=1:2
                            keys_zone=fscgi_hdd1:100m
                            max_size=10g
                            use_temp_path=off
                            inactive=60m;    # 设置缓存存储路径1,缓存的共享内存名称和大小
                                             # 100MB,无效缓存的判断时间为1小时

fastcgi_cache_path /usr/local/nginx/nginx-cache2
                            levels=1:2
                            keys_zone=fscgi_hdd2:100m
                            max_size=10g
                            use_temp_path=off
                            inactive=60m;   # 设置缓存存储路径2,缓存的共享内存名称和大小
                                            # 100MB,无效缓存的判断时间为1小时

split_clients $request_uri $fscgi_cache {
              50%           "fscgi_hdd1";  # 50%请求的缓存存储在第一个磁盘上
              50%           "fscgi_hdd2";  # 50%请求的缓存存储在第二个磁盘上
}

server {
    listen 8080;
    root /opt/nginx-web/phpweb;
    index index.php;
    include        fscgi.conf;             # 引入默认配置文件
   
    location ~ \.(gif|jpg|png|htm|html|css|js|flv|ico|swf)(.*) {  # 静态资源文件过期时间
                                                                  # 为12小时
        expires      12h;
    }

    set $no_cache 0;
    if ($query_string != "") {              # URI无参数的数据不进行缓存
        set $no_cache 1;
    }

    location ~ \.php(.*)$ {
        root /opt/nginx-web/phpweb;

        fastcgi_cache $fscgi_cache;        # 启用fastcgi_cache_path设置的$fscgi_cache
                                           # 的共享内存区域做缓存
        fastcgi_cache_key ${request_method}://$host$request_uri; # 设置缓存的关键字
        fastcgi_cache_lock on;             # 启用缓存锁
        fastcgi_cache_lock_age 5s;         # 启用缓存锁时,添加缓存请求的处理时间为5s
        fastcgi_cache_lock_timeout 5s;     # 等待缓存锁超时时间为5s
        fastcgi_cache_methods GET HEAD;    # 默认对GET及HEAD方法的请求进行缓存
        fastcgi_cache_min_uses 1;          # 响应数据被请求一次就将被缓存

        fastcgi_no_cache $no_cache;        # $no_cache时对当前请求不进行缓存
        fastcgi_cache_bypass $no_cache;    # $no_cache时对当前请求不进行缓存

        fastcgi_cache_use_stale error timeout invalid_header
                                updating http_500 http_503
                                http_403 http_404 http_429;        # 当出现指定的条件时,使用
                                                                   # 已经过期的缓存响应数据
        fastcgi_cache_background_update on; # 允许使用过期的响应数据时,启用后台子请求用于
                                            # 更新过期缓存,并将过期的缓存响应数据返回给客户端

        fastcgi_cache_revalidate on;       # 当缓存过期时,向后端服务器发起包含If-
                                           # Modified-Since和If-None-Match HTTP消息
                                           # 头字段的服务端校验
        fastcgi_cache_valid 200 301 302 10h; # 200 301 302状态码的响应缓存10小时
        fastcgi_cache_valid any 1m;        # 其他状态码的响应缓存1分钟

        add_header X-Cache-Status $upstream_cache_status;   # 查看缓存命中状态

        fastcgi_pass   fscgi_server;
        fastcgi_index  index.php;
        fastcgi_split_path_info       ^(.+\.php)(.*)$;      # 获取$fastcgi_path_info变量值
        fastcgi_param PATH_INFO       $fastcgi_path_info;   # 赋值给参数PATH_INFO
        include        fastcgi.conf;                        # 引入默认参数文件
    }

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
}
ngx_http_upstream_module
  • upstream name { ... }
    • 用途:该指令域内可设置服务器、负载均衡策略等负载均衡配置
    • 缺省值:无
    • 上下文:http
    • 注意
      • nginx负载均衡:由代理模块和上游(upstream)模块共同实现的,Nginx通过代理模块的反向代理功能将用户请求转发到上游服务器组,上游模块通过指定的负载均衡策略及相关的参数配置将用户请求转发到目标服务器上。上游模块可以与 Nginx的代理指令(proxy_pass)、FastCGI协议指令(fastcgi_pass)、uWSGI协议指令(uwsgi_pass)、SCGI协议指令(scgi_pass)、memcached指令(memcached_pass)及gRPC协议指令(grpc_pass)实现多种协议后端服务器的负载均衡。
upstream backend {
    server backend1.example.com       weight=5;     # 被代理服务器端口号为80,权重为5
    server backend2.example.com:8080;               # 被代理服务器端口号为8080,默认权重为1
    server unix:/tmp/backend3;

    server backup1.example.com:8080   backup;       # 该被代理服务器为备份状态
    server backup2.example.com:8080   backup;       # 该被代理服务器为备份状态
}

server {
    location / {
        proxy_pass http://backend;          # 将客户端请求反向代理到上游服务器组backend
    }
}
  • 虚拟服务指令参数

server
  • server { ... }

    • 用途:Nginx 用来定义服务 IP、绑定端口及服务相关的指令区域
    • 缺省值:无
    • 上下文:http
  • listen

    • 用途:服务监听端口、绑定 IP、监听方式的配置
    • 用法
      • listen address[:port] [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
      • listen port [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
      • listen unix:path [default_server] [ssl] [http2 | spdy] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
    • 缺省值:listen *:80 | *:8000;,超级管理员默认端口号为80,其他用户默认端口号为8000
    • 上下文:server
    • 参数
      • address:如果只设置IP地址没设置port,则超级管理员默认端口号为80,其他用户默认端口号为8000
      • default_server:当http指令域中包含多个虚拟主机时(即多个server块),该参数用于指定哪个虚拟主机是默认服务,如果没设置该配置项则将第一个顺序的server设为默认服务。默认服务可以用来处理没有server_name匹配成功的请求
      • ssl:SSL支持
      • http2:HTTP/2 协议支持
      • spdy:SDPY 协议支持,与 HTTP/2 协议不能同时存在
      • proxy_protocol:在指定监听端口上启用proxy_protocol协议支持
      • setfib=number:为监听套接字设置关联路由表,仅在 FreeBSD 系统上有效
      • fastopen=number:HTTP处于保持连接(keepalive)状态时,允许不经过三次握手的TCP连接的队列的最大数
      • backlog=number:当阻塞时,设置挂起连接队列的最大长度,在FreeBSD,DragonFly BSD和MacOS操作系统上,默认值为-1,其他平台上默认值为511
      • rcvbuf=size:socket 接收缓冲的大小,默认为 8k 字节,在接收数据比较大的场景中可以适当调整
      • sndbuf=size:socket 发送缓冲的大小,默认为 8k 字节,在发送数据较大的场景中可以适当调整
      • accept_filter=filter:默认值filter,为监听套接字设置过滤器,仅支持 FreeBSD 和 NetBSD 5.0+ 系统
      • deferred:添加该参数后,在TCP三次握手的过程中,检测到客户端有数据时才将TCP状态置为ESTABLISHED状态,没有数据则直接丢弃
      • bind:指定IP及端口
      • ipv6only=on|off:只接收IPv6连接或接收IPv6和IPv4连接
      • reuseport:默认情况下,所有的工作进程会共享一个socket去监听同一IP和端口的组合。该参数启用后,允许每个工作进程有独立的socket去监听同一IP和端口的组合,内核会对传人的连接进行负载均衡。适用于Linux 3.9+,DragonFly BSD和FreeBSD 12+
      • so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]:默认值off,配置是否在监听的端口启用“TCP keepalive”机制。当设置为 on 时,默认等同于so_keepalive=30m::10,表示30分钟无数据传输时发送探测包,发送10 次,发送间隔使用系统内核参数tcp_keepalive_intvl的设定值
http {
    server {
        listen 127.0.0.1:8000;           # 监听127.0.0.1的8000端口
        listen 127.0.0.1;                # 监听127.0.0.1的默认80端口(root权限)
        listen 8000;                     # 监听本机所有IP的8000端口
        listen *:8000;                   # 监听本机所有IP的8000端口
        listen localhost:8000;           # 监听locahost的8000端口
        listen [::]:8000;                # 监听IPv6的8000端口
        listen [::1];                    # 监听IPv6的回环IP的默认80端口(root权限)
        listen unix:/var/run/nginx.sock; # 监听域套接字文件

        listen *:8000 \                  # 监听本机的8000端口
                default_server \         # 当前服务是http指令域的主服务
                fastopen=30 \            # 开启fastopen功能并限定最大队列数为30
                deferred \               # 拒绝空数据连接
                reuseport \              # 工作进程共享socket这个监听端口
                backlog=1024 \           # 请求阻塞时挂起队列数是1024个
                so_keepalive=on;         # 当socket为保持连接时,开启状态检测功能
    }
}
# IPv6 addresses (0.7.36) are specified in square brackets:
listen [::]:8000;
listen [::1];

# UNIX-domain sockets (0.8.21) are specified with the “unix:” prefix:
listen unix:/var/run/nginx.sock;
  • server_name name ...
    • 用途:设定所在server指令域的虚拟主机名,当server_name指令值中有多个主机名时,第一个主机名为首主机名。
    • 缺省值:server_name "";
    • 上下文:server
http {
    server {
        server_name example.com .example.com;       # 泛域名的使用
        server_name www.example.;                   # 多个后缀域名的使用server_name
        www.example.com ~^www.example.com$;         # 正则表达式匹配
        # 正则匹配变量的场景
        server_name ~^(www\.)?(.+)$;
        location / {
            root /sites/$2;
        }

        # 正则匹配为变量的场景
        server_name ~^(www\.)?(?<domain>.+)$;
        location / {
            root /sites/$domain;
        }
    }
}
  • error_page code ... [=[response]] uri
    • 用途:当HTTP请求发生错误时,可以根据响应状态码定义一个返回的页面或执行跳转。
    • 缺省值:无
    • 上下文:http, server, location, if in location
error_page 404             /404.html;
error_page 500 502 503 504 /50x.html;
error_page 404 = @fallback;
location
  • location [ = | ~ | ~* | ^~ ] uri { ... }
    • 用途:告知客户端跳转到指定的 URI。
    • 缺省值:无
    • 上下文:server, location
    • 参数
      • =:表示精确匹配
      • ^~:表示uri以某个常规字符串开头,理解为匹配url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。以xx开头
      • ~:表示区分大小写的正则匹配,以xx结尾
      • ~*:表示不区分大小写的正则匹配,以xx结尾
      • !~:区分大小写不匹配
      • !~*:不区分大小写不匹配的正则
      • /:通用匹配,任何请求都会匹配到
      • 匹配规则:精确匹配= -> 其次以xx开头匹配^~ -> 然后是按文件中顺序的正则匹配 -> 最后是交给 / 通用匹配,当有匹配成功时候,停止匹配,按当前匹配规则处理请求
# /usr/local/nginx/conf/nginx.conf
location = / {
   # 规则A
}
location = /login {
   # 规则B
}
location ^~ /static/ {
   # 规则C
}
location ~ \.(gif|jpg|png|js|css)$ {
   # 规则D,注意:是根据括号内的大小写进行匹配。括号内全是小写,只匹配小写
}
location ~* \.png$ {
   # 规则E
}
location !~ \.xhtml$ {
   # 规则F
}
location !~* \.xhtml$ {
   # 规则G
}
location / {
   # 规则H
}
# 效果如下:
# 访问根目录/, 比如http://localhost/ 将匹配规则A
# 访问 http://localhost/login 将匹配规则B,http://localhost/register 则匹配规则H
# 访问 http://localhost/static/a.html 将匹配规则C
# 访问 http://localhost/a.gif, http://localhost/b.jpg 将匹配规则D和规则E,但是规则D顺序优先,规则E不起作用, 而 http://localhost/static/c.png 则优先匹配到 规则C
# 访问 http://localhost/a.PNG 则匹配规则E, 而不会匹配规则D,因为规则E不区分大小写
# 访问 http://localhost/a.xhtml 不会匹配规则F和规则G,http://localhost/a.xhtml不会匹配规则G,(因为!)。规则F,规则G属于排除法,符合匹配规则也不会匹配到,所以想想看实际应用中哪里会用到。
# 访问 http://localhost/category/id/1111则最终匹配到规则H,因为以上规则都不匹配,这个时候nginx转发请求给后端应用服务器,比如FastCGI(php),tomcat(jsp),nginx作为方向代理服务器存在。
# 直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理。
# 这里是直接转发给后端应用服务器了,也可以是一个静态首页
# 第一个必选规则
location = / {
    proxy_pass http://tomcat:8080/index
}

# 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {                              //以xx开头
    root /webroot/static/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {     //以xx结尾
    root /webroot/res/;
}
 
# 第三个规则就是通用规则,用来转发动态请求到后端应用服务器
# 非静态文件请求就默认是动态请求,自己根据实际把握
location / {
    proxy_pass http://tomcat:8080/
}
  • root path
    • 用途:设定请求URL的本地文件根目录。当root指令在location指令域时,root设置的是location匹配访问路径的上一层目录
    • 缺省值:root html;
    • 上下文:http, server, location, if in location
# 请求文件的实际本地路径为/data/web/flv/
location /flv/ {
    root /data/web;
}

应用

概况

  • 日志
    • error.log:通过配置项error_log设置,主要记录nginx处理http请求的错误状态,以及nginx本身服务运行的错误状态。
    • access.log:通过配置项access_loglog_format设置,记录nginx每一次http请求的访问状态,主要用于分析每一次访问的请求和客户端的交互行为。

场景

实践

示例

官方示例

#官方示例

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


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  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

方向代理

# 反向代理示例1
# 192.168.1.100:8901 -> http://192.168.1.101:8099
# 反向代理示例2
# 192.168.1.100:8902/101/index.html -> http://192.168.1.101:8099/dist/index.html
# 192.168.1.100:8902/102/index.html -> http://192.168.1.102:8099/dist/index.html

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile      on;
    keepalive_timeout  65;

    server {
        listen       8901;
        server_name  192.168.1.100;
        location / {
            proxy_pass http://192.168.1.101:8099;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    server {
        listen 8902;
        server_name 192.168.1.100;
        location / {
            proxy_pass http://192.168.1.102:8099;
        }
        location ^~ /101/ {
            proxy_pass http://192.168.1.101:8099/dist/;
        }
        location ^~ /102/ {
            proxy_pass http://192.168.1.102:8099/dist/;
        }
    }
}

reference

高可用
nginx底层架构

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-11-22 12:45:44  更:2021-11-22 12:47:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 0:20:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码