nginx入门

nginx入门NginxenginxX Nginxhttp 协议 web 服务器 类似于 httpd httpreversep 类似于 httpd imap pop3reversep open source high performanceH aswellasanIM POP3 gxnx

Nginx

  • enginx X=Nginx
    • http协议:web服务器(类似于httpd)、http reverse proxy(类似于httpd)、imap/pop3 reverse proxy
    • Nginx is a free, open-source,high-performance HTTP server and reverse proxy,as well as an IMAP/POP3 proxy server.
    • C10K(10K Connections).
    • Tengine,OpenResty
  • http协议:
    • URL:scheme://username:password@host:port/path;params?query#frag
      • DocumentRoot:/PATH/TO/SOMEDIR
        • Location:URL
      • Alias
      • params:
        • key=value&key=vlaue
      • query:查询条件,过滤表达式
        • field=vlaue
      • 网页中的位置
    • http事务:
      •  <method><URL><VERSION> HEADERS name:value <body> 
      •  <VERSION><STATUS><REASON-PHRASE> HEADERS <body> 
      • Method:GET请求资源/HEAD头部/POST提交表单,PUT上传/DELETE,TRACES,OPTIONS方法
      • Status Code:
        • 1xx:
        • 2xx:成功类型响应码,200
        • 3xx:重定向类的响应码,301(permanent),302,304(not modified)
        • 4xx:客户端错误,403,404
        • 5xx:服务端错误,502
      • 认证:
        • 基于ip认证
        • 基于用户认证:basic(明文)/digest(校验后加密传输,但是支持较差)
      • httpd MPM:
        • prefork:进程模型,两级结构,主进程master负责生成子进程,每个子进程负责相应一个请求;
        • woker:线程模型,三级结构,主进程master负责生成多个子进程,每个子进程负责生成多个线程,每个线程响应一个请求;
        • event:主进程master负责生成子进程,每个子进程相应多个请求;
      response:
    request:
  • I/O模型:
    • 阻塞型(两段都是阻塞型)、非阻塞型(第一阶段是非阻塞型,第二阶段是阻塞型)、复用型(,两阶段都为阻塞型,但是阻塞在多路IO上,不直接面向第一或第二阶段,即IO复用器,IO复用器可监控IO阻塞情况)、信号驱动型(第一阶段非阻塞型,第二阶段为阻塞型)、异步
    • 同步/异步:
      • 关注消息通知机制;
      • 消息通知:
        • 同步:等待对方发送消息;
        • 异步:被调用者通过状态、通知或回调机制通知调用者被调用者的运行状态;
    • 阻塞/非阻塞:
      • 关注调用者在等待结果返回之前所处的状态;
        • 阻塞:blocking,调用结果返回之前,调用者被挂起;闲等
        • 非阻塞:nonblocking,调用结果返回之前,调用者不会被挂起;忙等,只能一遍一遍重复问调用结果情况,不能进行其他操作;
    • 一次文件IO请求,都会由两阶段组成:
      • 第一步:等待数据,即数据从磁盘到内核内存;
      • 第二步:复制数据,即数据内核内存到进程内存;
    • 复用型IO调用:
      • select():1024 prefork模型,最大并发数为1024
      • poll():nolimit
      • event-driven;
        • epoll(Linux):libevent
          • yum info libevent
        • Kquene(BSD):
        • /dev/poll(Solaris):
          在这里插入图片描述

  • httpserver
    • static
    • nmap,nmt
  • reverse proxy

  • nginx
    在这里插入图片描述

  • Nginx的架构
    • master/worker
      • 一个master进程:
        • 负责加载和分析配置文件、管理worker进程、平滑升级
      • 一个或多个woker进程
        • 处理并响应用户请求
      • 缓存相关的进程:
        • cache loader:载入缓存对象
        • cache manager:管理缓存对象
    • 特性:异步,时间驱动和非阻塞
      • 并发请求处理:通过kevent/epoll/select,/dev/poll
      • 文件IO:高级IO、sendfile、异步、mmap
    • nginx高度模块化,但其模块早期不支持DSO机制,近期版本支持动态装载和卸载;
      • 模块分类:
        • 核心模块:core module
        • 标准模块:
          • HTTP modules:
            • Standard HTTP modules
            • Optional HTTP modules
          • Mail modules
          • Stream modules
        • 3rd party modules
    • nginx的功用:
      • 静态的web资源服务器;(图片服务器,或js/css/html/txt等静态资源服务器);
      • 结合fastcgi/uwsgi/scgi等协议反代动态资源请求;
      • http/https协议的反向代理;
      • imap4/pop3协议的反向代理;
      • tcp/udp协议的请求转发;

nginx的安装
  1. rpm(epel源)安装,官方有文档
  2. 源码编译安装
  3. 二进制安装
  • 配置:
    • 配置文件的组成部分:
      • /etc/nginx/nginx.conf
      • /etc/nginx/conf.d/*.conf
      • include conf.d/*.conf
      • fastcgi,uwsgi,scgi等协议相关的配置文件
      • mime.types:支持的mime类型:多用途互联网邮件扩展类型
    • 主程序文件:
      • /usr/sbin/nginx
        • nginx -V #查看nginx安装时的配置以及版本和编译环境
        • nginx -t #检查nginx配置文件语法
        • nginx -s signal #向nginx进程发送信号,有reload|restart|start|sop等
        • nginx -p #设置配置文件路径
      • Unit File:nginx.service
    • 主配置文件的配置指令:
      • directive value [value2…];
      • 注意:
        • 指令必须以分号结尾
        • 支持使用配置变量;
          • 内建变量:由nginx模块引入,可直接引用;
          • 自定义变量:由用户使用set命令定义:
            • set variable_name value;
            • 引用变量:$variable_name
    • 主配置文件结构:
main block:主配置段,也即全局配置段 event { ... }:事件驱动相关的配置; http { ... }:http/https协议相关的配置段 mail { ... } stream { ... } 
    • http协议相关的配置结构
http { ... ...:各server的公共配置 server { ... }:每个server用于定义一个虚拟主机; server { ... listen 监听地址端口 server_name 主机名 root 相当于DocumentRoot alias 路径别名 location [OPERATOR] URL { ... if CONDITION { ... } } } } 

main配置段常见的配置指令


    • main配置段常见的配置指令
        • 正常运行必备的配置
        • 优化性能相关的配置
        • 用于调试及定位问题相关的配置
        • 事件驱动相关的配置
        1. pid /PATH/TO/PID_FILE;
          指定存储nginx主进程进程号码的文件路径;
        2. include file | mask;
          指明包含进来的其他配置文件片段;
        3. load_module file;
          指明要装载的动态模块
        user
        syntax:user user [group];
        Default:user nobody nobody;
        Context:main
      • 性能优化相关的配置:
        1. worker_process number | auto;
          woker进程的数量;通常应该小于等于当前主机的cpu的物理核心数;
          auto:当前主机物理cpu核心数;
        2. worker_cpu_affinity cpumask …;
          worker_cpu_affinity auto | [cpumask];
          CPUMASK:
          00000001:0号CPU
          00000010:1号CPU
          … …
          将进程绑定在指定CPU上
          ps axo comm,pid,psr | grep nginx:查看进程运行在哪个cpu上
        3. woker_priority number;
          指定woker进程的nice值,设定woker进程优先级;[-20,20]
          ps axo comm,pid,psr,ni | grep nginx:查看进程优先级
          woker_priority -5
        4. woker_rlimit_nofile number;
          woker进程能够打开的文件数量上限;需要先上调nginx用户的ulimit数;
          woker_rlimit_nofile 65535;
      • 调试、定位问题:
        1. daemon on | off;
          是否以守护进程方式运行nginx
        2. master_process on | off;
          是否以master/worker模型运行nginx;默认为on;
        3. error_log_file [level];
      • 事件驱动相关的配置:
      正常运行必备的配置:
    分类:
events { 
    ... } 
  •  1. woker_connections number; 每个worker进程所能够打开的最大并发连接数数量; worker_processes * worker_connections 2. use method; 指明并发连接请求的处理方法; use epoll; 3. accept_mutex on | off; 处理新的连接请求的方法;on意味着由各worker轮流处理新请求,off意味着每个新请求的到达都会通知所有的worker进程; 

http协议的相关配置


    • http协议的相关配置:
      • 与套接字相关的配置:
          • 配置一个虚拟主机;
            server {
            listen address[:PORT] | PORT;
            server_name SERVER_NAME;
            root /PATH/TO/DOCUMENT_ROOT; #web服务器
            #proxy_pass http://192.168.79.7 #反代
            }
        • server_name name …
          • 指明虚拟主机的主机名称;后可跟多个由空白字符分隔的字符串;
            • 支持*通配任意长度的任意字符串;server_name *.magedu.com www.magedu.*
            • 支持~起始的字符做正则表达式模式匹配;server_name ~^www\d+.magedu.com$
          • 匹配机制:
            • 首先是字符串精确匹配
            • 左侧*通配符;
            • 右侧*通配符;
            • 正则表达式;
          • 练习:定义四个虚拟主机,混合使用三种类型的虚拟主机;仅开放给来自于本地网络中的主机访问;
        listen address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size]
        defualt_server:设定为默认虚拟主机;
        ssl:限制仅能够通过ssl连接提供服务;
        backlog=number:后援队列长度;
        rcvbuf=size:接收缓冲区大小;
        sndbuf=size:发送缓冲区大小
      listen PORT | address[:port]|unix:/PATH/TO/SOCKET_FILE
    server {…}
server { 
    listen 80; server_name www.a.com; root /data/test; location / { 
    allow 192.168.79.27; deny all; } } server { 
    listen 192.168.79.47:8080; server_name www.b.cn; root /data/test2; location / { 
    allow 192.168.79.27; deny all; } } server { 
    listen 8080; server_name www.c.org; root /data/test3; location / { 
    allow 192.168.79.27; deny all; } } 
  • tcp_nodelay on | off;
    • 仅对keepalive连接生效,使之不等待合并一起发送;
  • tcp_nopush on | off;
    • 仅当sendfile为on时生效,先将响应报文的首部和文件头部在一个报文中进行发送,然后将一个完整的文件通过一个完整的报文发送出去;
    • 在sendfile模式下,是否启用TCP_CORK选项;文件内容与应用层首部合并起来一块发送
  • types_hash_max_size 2048;
    • 设定保存类型hash表的最大值;
  • sendfile on | off;
    • 是否启用sendfile功能
  • 路径相关的配置
  • root path;
location = / { 
    ... } 
    • 设置web资源路径映射;用于指明用户请求的rul所对应的本地文件系统上的文档所在目录路径;可用的位置:http,server,location,if in location;
      • location [ = | ~ | ~* | ^~ ] uri {…}
        • set configuration depending on a request URI.
          • ^~:对URi的左半部分做匹配检查,不区分字符大小写;
          • 不带符号:匹配起始与此URL的所有url;
          • 匹配优先级:=,^,,~*,不带符号;
          ~*:对URI做正则表达式模式匹配,不区分字符大小写;
        ~:对URI做正则表达式模式匹配,区分字符大小写;
      =:对URI做精确匹配;例如,http://www/magedu.com/,http://www/magedu.com/index.html
    在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;nginx会根据用户请求的URI来检查定义的所有location,并找出一个最佳匹配,而后应用其哦欸之;
root /vhsots/www/htdocs/
        http://www.magedu.com/index.html -->/vhosts/www/htdocs/index.html
        
server { 
    root /vhosts/www/htdocs/ location /admin/ { 
    root /webapps/app1/data/ } } 
    • alias path:
      • 定义路径别名,文档映射的另一种机制;仅能用于location上下文;
        • 注意:location中使用root指令和alias指令的意义不同;
          • root,给定的路径对应于location中的/url/最左侧的/;
          • alias,给定的路径对应于location中的/url/最右侧的/;
        • index file …;
          • 默认资源:http,server,location;
        • error_page code … [=[response]] url;
          • Defines the URL that will be shown for the specified errors.
        • try_files file … url;

2019/5/28 2:24

定义客户端请求的相关配置


    • 定义客户端请求的相关配置
        • 设定保持连接的超时时长,0表示禁止长连接;默认为75s;
        • 在上一次长连接上所允许请求的资源的最大数量,默认为100;
      • keepalive_disable none | browser …;
        • 对哪种浏览器禁用长连接;
      • send_timeout time;
        • 向客户端发送响应报文的超时时长,此处,是指两次写操作之间的间隔时长;
      • client_body_buffer_size size;
        • 用于接收客户端请求报文的body部分的缓冲区大小;默认为16K;超出此大小时,其将被暂存到磁盘上的由client_body_temp_path指令所定义的位置;
      • client_body_temp_path path [level1 [level2 [level3]]];
        • 设定用于存储客户端请求报文的body部分的临时存储路径及子目录结构和数量;
          • 16进制的数字;
          • client_body_temp_path path /var/tmp/client_body 2 1 1
            • 1:表示用一位16进制数字表示一级子目录;0-f
            • 2:表示用2位16进制数字表示二级子目录;00-ff
            • 2:表示用2位16进制数字表示二级子目录;00-ff
      • limit_rate rate;
        • 限制响应给客户端的传输速率,单位时bytes/second,0表示无限制;
      • limit_except method … { … }
        • 限制对指定的请求方法之外的其他方法使用客户端;
          limit_except GET {
          allow 192.168.1.0/24; 仅允许192.168.1.0/24的主机使用GET以外的请求方法
          deny all;
          }
      keepalive_requests number;
    keepalive_timeout timeout [header_timeout];
文件操作优化的配置
    • aio on | off | threads=[pool];
      • 是否启用aio功能;异步非阻塞,建议设置为on
    • directio size | off;
      • 在linux主机启用O_DIRECT标记,此处意味着文件大于等于给定的大小时使用,例如directio 4m;
    • open_file_cache off;
    • open_file_cahce max=N [inactive=time]; 建议设置
      • nginx可以缓存一下三种信息:
        • 1.文件的描述符、文件大小和最近一次的修改时间;
        • 2.打开的目录结构;
        • 3.没有找到的或者没有权限访问的文件的相关信息;
          • max=N:可缓存的缓存项上线;达到上限后会使用LRU算法实现缓存管理;
          • inactive=time:缓存项的非活动时长,在此处指定的时长内未被命中的或命中的次数少于open_file_cache_min_users指令所指定的次数的缓存项即为非活动项;
    • open_file_cache_valid time;
      • 缓存项有效性的检查频率;默认为60s;
    • open_file_cache_min_users number;
      • 在open_file_cache指令的inactive参数指定的时长内,至少应该呗命中多少次方可被归类为活动项;
    • open_file_cache_erroes on | off;
      • 是否缓存查找时发生错误的文件一类的信息;缓存否定应答

ngx_http_access_module模块:实现基于ip的访问控制功能


  • allow address | CIDR | unix:| all;
  • deny address | CIDR | unix | all;
    可用的位置:http,server,location,limit_except

ngx_http_auth_basic_module模块:实现基于用户的访问控制,使用basic机制进行用户认证


  • auth_basic string | off;
    Default:auth_basic off;
    Context: http, server, location, limit_except
  • auth_basic_user_file file;
    注意:htpasswd命令由httpd-tools所提供;
    示例:
    [root@www ~]# yum -y install httpd-tools
    [root@www ~]# htpasswd -c -m /etc/nginx/.ngxpasswd tom
    New password:
    Re-type new password:
    Adding password for user tom
    #修改nginx配置文件
    [root@www ~]# vim /etc/nginx/conf.d/vhost1.conf
    #在vhost1.conf配置中添加新的location,如下:
    location ~* ^/(admin|login) {
    auth_basic “admin area or login url”;
    auth_basic_user_file /etc/nginx/.ngxpasswd;
    #创建目录和admin主页
    [root@www ~]# mkdir /data/nginx/vhost1/admin
    [root@www ~]# vim /data/nginx/vhost1/admin/index.html
    [root@www ~]# nginx -t
    [root@www ~]# nginx -s reload
    使用另外主机测试访问:

ngx_http_stub_status_module模块:用于输出nginx的基本状态信息


  • stub_status;

配置示例:
[root@www ~]# vim /etc/nginx/conf.d/vhost1.conf
location ~* ^/(admin|login) {
auth_basic “admin area or login url”;
auth_basic_user_file /etc/nginx/.ngxpasswd;
stub_status;
}
[root@www ~]# nginx -s reload
访问测试:

Active connections: 活动状态的连接数; accepts:已经接受的客户端请求的总数; handled:已经处理完成的客户端请求的总数; requests:客户端发来的总的请求数; Reading:处于读取客户端请求报文首部的连接的连接数; Writing:处于向客户端发送响应报文过程中的连接数; Waiting:处于等待客户端发出请求的空闲连接数 

curl --silent hhtp://www/ilinux.io/ngxstatus | awk '/^Active/{print $2}' 处于活动状态的连接数

ngx_http_log_module模块:用于以指定的格式写入请求日志


  • log_format name string …;
    string 可以使用nginx核心模块及其它模块的内嵌变量
    注意:此配置只能用于http段中
  • access_log path [format [buffer=size] [gzip=[level1]] [flush=time][if=condition]];
  • access_log off;
    • 访问日志文件路径,格式及相关的缓冲的配置;
      • buffer=size: 设置日志缓冲区大小
      • flush=time:定义清空时长
  • open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
  • open_log_file_cache off;
    缓存各日志文件相关的数据信息;
    max:缓存的最大文件描述符数量;
    min_uses:在inactive指定的时长内访问大于等于此值方可被当作活动项;
    inactive:非活动时长
    valid:验证缓存中各缓存项是否为活动项的时间间隔
示例:为nginx定义使用类似于httpd的combined格式的访问日志 #在/etc/nginx/nginx.conf文件中http段配置日志格式 [root@www ~]# vim /etc/nginx/nginx.conf http { 
    log_format comd '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent"'; ... } #给vhost1主机添加访问日志,设置为comd格式 [root@www ~]# vim /etc/nginx/conf.d/vhost1.conf server { 
    ... access_log /var/log/nginx/vhost1-access.log comd; ... } #访问测试后查看日志格式 [root@www ~]# tail -2 /var/log/nginx/vhost1-access.log  192.168.79.1 - - [31/May/2019:11:34:07 +0800] "GET /image/flower.png HTTP/1.1" 200 3572 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-" 

ngx_http_gzip_module:用gzip格式压缩响应;


  • gzip on | off;
    Enables or disables gzipping of responses.
  • gzip_comp_level level;
    Sets a gzip compression level of a response. Acceptable values are in the range from 1 to 9.
  • gzip_disable regex …;
    Disables gzipping of responses for requests with “User-Agent” header fields matching any of the specified regular expressions.
  • gzip_min_length length;
    启用压缩功能的响应报文大小阈值;
  • gzip_buffers number size;
    支持实现压缩功能时为其配置的缓冲区数量及每个缓存区的大小;
  • gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any …;
    nginx作为代理服务器接收到从被代理服务器发送的响应报文后,在何种条件下启用压缩功能的;
    off:对代理的请求不启用
    no-cache, no-store,private:表示从被代理服务器收到的响应报文首部的Cache-Control的值为此三者中任何一个,则启用压缩功能;
  • gzip_types mime-type …;
    压缩过滤器,仅对此处设定的MIME类型的内容启用压缩功能;
  • 配置示例:
    • gzip on;
    • gzip_comp_level 6;
    • gzip_min_length 64;
    • gzip_proxied any;
    • gzip_types text/xml text/css application/javascript;
      此配置可用位置:http, server, location

ngx_http_ssl_module模块:


  • ssl on | off;
    Enables the HTTPS protocol for the given virtual server.
    是否启用htttps协议
  • ssl_certificate file;
    当前虚拟主机使用PEM格式的证书文件;
  • ssl_certificate_key file;
    当前虚拟主机上与其证书匹配的私钥文件;
  • ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1][TLSv1.2]
    支持ssl协议版本,默认为后三个;
  • ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
    builtin[:size]:使用Openssl内建的缓存,此缓存为每worker进程私有;
    [shared:name:size]:在各worker之间使用一个共享的缓存;
  • ssl_session_timeout time;
    客户端一侧的连接可以服用ssl session cache中缓存的ssl参数的有效时长;

配置示例:

#创建私有CA自签证书,以192.168.32.132为CA [root@www ~]# cd /etc/pki/CA [root@www CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048) Generating RSA private key, 2048 bit long modulus ........................................................................+++ ..................................+++ e is 65537 (0x10001) [root@www CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365 You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:beijing Locality Name (eg, city) [Default City]:beijing Organization Name (eg, company) [Default Company Ltd]:magedu Organizational Unit Name (eg, section) []:devops Common Name (eg, your name or your server's hostname) []:www.c.org Email Address []: [root@www CA]# touch index.txt [root@www CA]# echo 01 > serial #在nginx主机上生成私钥和申请证书 [root@www ~]# mkdir /etc/nginx/ssl [root@www ~]# (umask 066;openssl genrsa -out /etc/nginx/ssl/.nginx.key 2048) [root@www ~]# openssl req -new -key /etc/nginx/ssl/.nginx.key -out /etc/nginx/ssl/nginx.crs -days 365 [root@www ssl]# scp nginx.csr 192.168.79.37:/tmp/ #在CA上签署证书 [root@www CA]# openssl ca -in /tmp/nginx.csr -out certs/nginx.crt -days 365 #把签署好的证书nginx.crt传会nginx主机 [root@www CA]# scp certs/nginx.crt root@192.168.79.37:/etc/nginx/ssl #修改nginx配置文件,启用ssl [root@www ~]# vim /etc/nginx/conf.d/test.conf server { 
    listen 443; ssl on;
       root /var/www/html; gzip on; gzip_comp_level 9; gzip_types text/xml text/css; ssl_certificate "/etc/nginx/ssl/nginx.crt"; ssl_certificate_key "/etc/nginx/ssl/.nginx.key"; ssl_protocols sslv2 sslv3 tlsv1 tlsv1.1 tlsv1.2; ssl_session_cache shared:SSL:10m;
       index index.html; location / { 
    allow all; } location /etc { 
    autoindex on; alias /var/www/html/etc/; access_log /var/log/nginx/ssl_nginx_test.log; } location /image { 
    rewrite /(.*)\.png$ /$1.jpg break; return http://192.168.79.27; autoindex on; allow all; } [root@www ~]# vim /var/www/html/index.html <h1>nginx</h1> <h2>192.168.79.7</h2> #检查语法,重载配置 [root@www ~]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root@www ~]# nginx -s reload 

ngx_http_rewrite_module模块:用于使用正则表达式模式更改请求URI,返回重定向,并有条件的选择配置


例如:
bbs.magedu.com/ --> www.magedu.com/bbs/
http://www.magedu.com/ --> https://www.magedu.com/
http://www.magedu.com/login.php;username=tom --> http://www.magedu.com/tom/
http://www.ilinux.io/bbs/ --> http://bbs.ilinux.io/
将用户请求的URI基于regex所描述的模式进行检查,然后完成替换;

  • rewrite regex replacement [flag]
    将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URI;
    • 注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而上逐个检查;被某条件规则替换完成后,会重新一轮的替换检查,因此,隐含有循环机制;[flag]所表示的标志位用于控制此循环机制;
      如果replacement是以http://或https://开头,则替换结果会直接以重定向返回给客户端;301:永久重定向;
    • [flag]:
      • break:重写完成后停止对当前URI在当前location中后续的其他重写操作,而后直接跳转至重写规则配置块之后的其他配置;循环结束;
      • redirect:重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,有客户端重新发起请求;不能以http://或https://开头;
      • permanent:重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;
      • redirect和permanent可以重定向至其他服务器。
      last:重写完成后停止对当前URI在当前location中后续的其他重写操作,而后对新的URI启动新的一路重写检查;提前重启新一轮循环;感觉容易发生死循环,返回500报错。
  • return
    停止处理并将指定的代码返回给客户端
    return code [text];
    return code URL;
    return URL;
  • rewrite_log on |off;
    是否开启重写日志
  • if (condition) {…}
    引入一个新的配置上下文:条件满足时,执行配置块中的配置指令;
    可用于server和location段中
    • condition:
  • 比较操作符:
    ==
    !=
    ~*:模式匹配,不区分字符大小写
    ~:模式匹配,区分字符大小写
    !~:模式不匹配,区分字符大小写
    !~:模式不匹配,不区分字符大小写
    文件及目录存在性判断:
    -e, !-e
    -f, !-f
    -d, !-d
    -x, !-x
  • set $variable value
    用户自定义变量
简单示例: #重新编辑配置文件vhost.conf [root@www conf.d]# vim vhost.conf server { 
    listen 80; server_name www.ilinux.com; root /data/nginx/vhost1; rewrite /(.*)\.png$ /$1.jpg; } [root@www1 conf.d]# nginx -s reload 访问测试.png能否重写为.jpg 

ngx_http_referer_module模块:


The ngx_http_referer_module module is used to block access to a site for requests with invalid values in the “Referer” header field.

  • valid_referers none | blocked | server_names | string …;
    定义referer首部的合法引用用值;
    • none:请求报文首部没有referer首部;
    • blocked:请求报文的referer首部没有值;
    • server_names:参数,其可以有值作为主机名或主机名模式;
    • arbitrary_string:直接字符串,但可使用*作通配符;
    • regular expression:被指定的正则表达式模式匹配到的字符串;要使用~打头,例如 ~.*.magedu.com;
    • $invalid_referer : 模块内置变量,非法引用,只要没被valid_referers定义匹配到的就是非法引用
 配置示例: valid_referers none block server_names *.magedu.com *.mageedu.com magedu.* mageedu.* ~\.magedu\.; if($invalid_referer) { 
    return http://www.magedu.com/invalid.jpg; } 
今天的文章 nginx入门分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2025-01-05 20:11
下一篇 2025-01-05 20:06

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/102289.html