首页 > 系统相关 >科普文:软件架构Nginx系列之【万字详解Nginx功能模块功能、应用场景、实操配置】

科普文:软件架构Nginx系列之【万字详解Nginx功能模块功能、应用场景、实操配置】

时间:2024-08-25 13:25:20浏览次数:12  
标签:http ssl nginx ngx Nginx 软件架构 模块 root 实操

Nginx模块分类

Nginx是高度模块化的,他的模块分为核心模块,标准模块,和第三方模块。如上图所示。

其中标准模块又分为三类:

  • HTTP module (web模块)
    • Standard HTTP Module (标准模块)
    • Optional HTTP Module (可选模块)
  • Mail Module (邮箱模块)
  • Stream Module (四层代理相关的模块)

nginx早期版本是不支持模块装卸载的,后来才支持,也仅是比较重量级的模块支持,这些模块跟核心,标准,第三方模块没有关系,跟模块开发本身是否应用了动态装卸载接口有关。

通过命令 nginx -V 查看 nginx已经安装的模块!

核心模块 :是nginx 服务器正常运行必不可少的模块,提供错误日志记录、配置文件解析、事件驱动 机制、进程管理等核心功能

标准HTTP模块 :提供 HTTP 协议解析相关的功能,如:端口配置、网页编码设置、HTTP 响应头设 置等

可选HTTP模块 :主要用于扩展标准的 HTTP 功能,让nginx能处理一些特殊的服务,如:Flash 多 媒体传输、解析 GeoIP 请求、SSL 支持等

邮件服务模块 :主要用于支持 nginx 的邮件服务,包括对 POP3 协议、IMAP 协议和 SMTP 协议的支持

第三方模块 :是为了扩展 Nginx 服务器应用,完成开发者自定义功能,如:Json 支持、Lua 支持等.

Nginx模块列表

Nginx模块名称模块作用
ngx_http_access_module四层基于IP的访问控制,可以通过匹配客户端源IP地址进行限制
ngx_http_auth_basic_module状态页,使用basic机制进行用户认证,在编译安装nginx的时候需要添加编译参数--withhttp_stub_status_module,否则配置完成之后监测会是提示语法错误
ngx_http_stub_status_module状态统计模块
ngx_http_gzip_module文件的压缩功能
ngx_http_gzip_static_module静态压缩模块
ngx_http_ssl_modulenginx 的https 功能
ngx_http_rewrite_module重定向模块,解析和处理rewrite请求
ngx_http_referer_module防盗链功能,基于访问安全考虑
ngx_http_proxy_module将客户端的请求以http协议转发至指定服务器进行处理
ngx_stream_proxy_moduletcp负载,将客户端的请求以tcp协议转发至指定服务器处理
ngx_http_fastcgi_module将客户端对php的请求以fastcgi协议转发至指定服务器助理
ngx_http_uwsgi_module将客户端对Python的请求以uwsgi协议转发至指定服务器处理
ngx_http_headers_module可以实现对头部报文添加指定的key与值
ngx_http_upstream_module负载均衡模块,提供服务器分组转发、权重分配、状态监测、调度算法等高级功能
ngx_stream_upstream_module后端服务器分组转发、权重分配、状态监测、调度算法等高级功能
ngx_http_fastcgi_module实现通过fastcgi协议将指定的客户端请求转发至php-fpm*处理
ngx_http_flv_module为flv伪流媒体服务端提供支持

Nginx常用七模块功能和应用场景

一、ngx_http_core_module

        ngx_http_core_module是Nginx的核心模块,提供了HTTP的基本功能。它负责处理HTTP请求和响应,并包含丰富的配置指令。

        主要作用包括:
- 定义HTTP服务器的监听端口、访问日志、错误日志等。
- 配置请求的解析和响应的处理,如请求头和响应头的处理。
- 设置客户端请求的限速和连接超时等。
        常见应用场景:
- 作为Web服务器,处理客户端的HTTP请求,提供静态资源服务。
- 作为反向代理服务器,将客户端请求转发到后端服务器,实现负载均衡和请求分发。


二、ngx_http_proxy_module

        ngx_http_proxy_module是Nginx的代理模块,用于将客户端请求转发到后端服务器。

        主要作用包括:
- 实现反向代理功能,将客户端请求转发到后端服务器。
- 支持HTTP、HTTPS和WebSocket协议。
- 配置代理缓存,减少后端服务器的负载。
        常见应用场景:
- 作为反向代理服务器,将客户端请求分发到多个后端服务器,实现负载均衡。
- 在缓存代理场景中,缓存后端服务器的响应,提高访问速度和性能。

三、ngx_http_rewrite_module

        ngx_http_rewrite_module是Nginx的重写模块,用于修改客户端请求的URL。

        主要作用包括:
- 根据特定的规则对请求进行重写或重定向。
- 支持正则表达式的使用,实现灵活的URL重写规则。
        常见应用场景:
- URL重写:将旧的URL重写为新的URL,实现网站的伪静态化。
- 路径重定向:根据不同的请求条件,将请求重定向到不同的页面或服务器。

四、ngx_http_ssl_module

        ngx_http_ssl_module是Nginx的SSL模块,用于支持HTTPS协议,提供加密传输和安全认证功能。

        主要作用包括:
- 支持SSL证书的管理,对客户端和服务器之间的数据进行加密处理。
- 提供安全的HTTPS连接,保障数据的安全性和完整性。
        常见应用场景:
- 在需要加密传输和安全认证的场景中,使用HTTPS协议保护客户端和服务器之间的通信。
- 在电子商务、银行等对安全性要求较高的领域,使用SSL模块保障交易和用户数据的安全。

五、ngx_http_gzip_module

        ngx_http_gzip_module是Nginx的压缩模块,用于对HTTP响应数据进行压缩,减少数据传输量,提高访问速度。

        主要作用包括:
- 对HTTP响应数据进行压缩,减少数据传输量。
- 支持多种压缩算法和级别,可以根据需要调整压缩效果。
        常见应用场景:
- 在带宽有限或网络延迟较高的场景中,使用压缩模块减少数据传输时间,提高用户体验。
- 在提供大量静态资源的场景中,压缩文件大小,减少服务器带宽消耗。

六、ngx_stream_core_module

        ngx_stream_core_module是Nginx的流模块,用于处理TCP和UDP协议的流量,实现四层负载均衡功能。

        主要作用包括:
- 处理TCP和UDP协议的流量,实现高性能和可扩展的解决方案。
- 应用于游戏服务器、实时通信等场景。
        常见应用场景:
- 在游戏服务器场景中,使用流模块处理玩家与服务器之间的TCP和UDP流量,实现游戏的稳定运行。
- 在实时通信场景中,使用流模块处理音视频流的传输,保证通信的质量和稳定性。

七、ngx_http_upstream_module

        ngx_http_upstream_module是Nginx的负载均衡模块,用于配置后端服务器列表和负载均衡策略。       

        主要作用包括:
- 配置后端服务器列表,定义服务器的地址和权重等。
- 支持多种负载均衡算法,如轮询、IP哈希等。
        常见应用场景:
- 在高并发场景中,使用负载均衡模块将请求分发到多个后端服务器,提高系统的并发处理能力。
- 在多服务器部署场景中,使用负载均衡模块实现故障转移和故障恢复,提高系统的可用性。

Nginx常用模块功能示例

ngx_http_core_module 核心模块

该模块是nginx的最基本的模块,在所有模块里编号为0,至关重要。

-----------------------------------------与套接字相关的配置:---------------------------------

1、server { ... }

配置一个虚拟主机;

server {
listen address[:PORT]|PORT;监听地址端口
server_name SERVER_NAME;服务名
root /PATH/TO/DOCUMENT_ROOT;网页根目录地址
proxy_pass http://ip;#反向代理到指定ip的http服务器,此服务器变成代理服务器,上面的root网页根目录就没用了
}

2、监听listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE

格式:listen address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size]

default_server:设定为默认虚拟主机;
ssl:限制仅能够通过ssl连接提供服务;
backlog=number:后援队列长度;
rcvbuf=size:接收缓冲区大小;
sndbuf=size:发送缓冲区大小;

3、server_name name ...;主机名
  • 指明虚拟主机的主机名称;后可跟多个由空白字符分隔的字符串;
  • 支持*通配任意长度的任意字符;server_name .magedu.com www.magedu.#左侧和右侧匹配
  • 支持~起始的字符做正则表达式模式匹配;server_name ~^www\d+.magedu.com$#正则表达式匹配

匹配机制:
(1) 首先是字符串精确匹配;
(2) 左侧通配符;
(3) 右侧
通配符;
(4) 正则表达式;

4、tcp_nodelay on | off;默认是on

在keepalived保持连接模式下的连接是否启用TCP_NODELAY合并选项#选项是数据包不会马上传送出去,等到数据包最大时,一次性的传输出去,这样有助于解决网络堵塞。

tcp_nopush on|off;默认是:on
在sendfile模式下,是否启用TCP_CORK选项;#是否等待应用层首部合并一起发布

5、sendfile on | off;默认是on

是否启用sendfile功能;

---------------------------------------定义路径相关的配置------------------------------------

6、root path;资源路径映射

设置web资源路径映射;用于指明用户请求的url所对应的本地文件系统上的文档所在目录路径;可用的位置:http, server, location, if in location;

7、location [ = | ~ | ~* | ^~ ] uri { ... }

根据请求URI设置配置.

在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;ngnix会根据用户请求的URI来检查定义的所有location,并找出一个最佳匹配,而后应用其配置;

[root@C712 ~]# vim /etc/nginx/conf.d/vhost1.conf#创建一个server

server{
       listen 8080;  
       server_name www.ilinux.io;
       root /data/nginx/vhost1;
location / {                        #匹配根,如果里面有root,则上面的root失效
# root /data/nginx/vhost1;
               allow all;
}
location ~*\.(jpg|png)${        #限制访问jpg和png文件,~号表明使用正则表达式
               deny 172.16.0.68;  #限制那台主机ip
               allow all;
}

}

=:对URI做精确匹配;例如, http://www.magedu.com/, http://www.magedu.com/index.html
location = / {
...
}
~:对URI做正则表达式模式匹配,区分字符大小写;
~*:对URI做正则表达式模式匹配,不区分字符大小写;
^~:对URI的左半部分做匹配检查,不区分字符大小写;
不带符号:匹配起始于此uri的所有的url;

匹配优先级:=, ^~, ~/~*,不带符号;

root /vhosts/www/htdocs/
http://www.magedu.com/index.html --> /vhosts/www/htdocs/index.html

server {
root /vhosts/www/htdocs/

location /admin/ {
root /webapps/app1/data/
}
}

8、alias path;

定义路径别名,文档映射的另一种机制;仅能用于location上下文;

注意:location中使用root指令和alias指令的意义不同;
(a) root,给定的路径对应于location中的/uri/左侧的/;
(b) alias,给定的路径对应于location中的/uri/右侧的/;

[root@C712 ~]# vim /etc/nginx/conf.d/vhost1.conf#创建一个server

server{
       listen 8080;  
       server_name www.ilinux.io;
location  ^~ /images/{           #^~优先级最高
                   root /data/pictures/;#匹配/data/pictures/目录里面的images目录里面的文件
                # alias /data/pictures/;#匹配/data/pictures/目录里面的文件
}

9、index file ...;

默认资源;http, server, location;

10、error_page code ... [=[response]] uri;

指定URL错误页

[root@C712 ~]# vim /etc/nginx/conf.d/vhost1.conf#创建一个server

server{
       listen 8080;  
       server_name www.ilinux.io;
......
error_page 404 /notfound.html;#也可修改error_page 404=200    页面上的报文显示status code变成了200
location = /notfound.html{
      root /data/nginx/error_pages;#定义错误页面路径
}
}
[root@C712 ~]# mkdir /data/nginx/error_pages#创建错误页目录
[root@C712 ~]# vim /data/nginx/error_pages/notfound.html#编辑错误页内容

<h2>404</h2>
[root@C712 ~]# nginx -s reload #重载nginx

11、try_files file ... url;

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

12、keepalive_timeout timeout [header_timeout];

设定保持连接的超时时长,0表示禁止长连接;默认为75s;

13、keepalive_requests number;

在一次长连接上所允许请求的资源的最大数量,默认为100;

14、keepalive_disable none | browser ...;

对哪种浏览器禁用长连接;

15、send_timeout time;

向客户端发送响应报文的超时时长,此处,是指两次写操作之间的间隔时长;

16、client_body_buffer_size size;

用于接收客户端请求报文的body部分的缓冲区大小;默认为16k;超出此大小时,其将被暂存到磁盘上的由client_body_temp_path指令所定义的位置;

17、client_body_temp_path path [level1 [level2 [level3]]];

设定用于存储客户端请求报文的body部分的临时存储路径及子目录结构和数量;

16进制的数字;

  • client_body_temp_path /var/tmp/client_body 2 1 1

1:表示用一位16进制数字表示一级子目录;0-f
2:表示用2位16进程数字表示二级子目录:00-ff
2:表示用2位16进程数字表示三级子目录:00-ff

---------------------------------------对客户端进行限制的相关配置-----------------------------------

18、limit_rate rate;

限制响应给客户端的传输速率,单位是bytes/second,0表示无限制;

19、limit_except method ... { ... }

限制对指定的请求方法之外的其它方法的使用客户端;

limit_except GET {
allow 192.168.1.0/24;
deny  all;
}

----------------------------------------------文件操作优化的配置----------------------------------------

20、aio on | off | threads[=pool];

是否启用aio功能;

21、directio size | off;

在Linux主机启用O_DIRECT标记,此处意味文件大于等于给定的大小时使用,例如directio 4m;

22、open_file_cache off;

open_file_cache max=N [inactive=time];
nginx可以缓存以下三种信息:

  • (1) 文件的描述符、文件大小和最近一次的修改时间;
  • (2) 打开的目录结构;
  • (3) 没有找到的或者没有权限访问的文件的相关信息;

max=N:可缓存的缓存项上限;达到上限后会使用LRU算法实现缓存管理;

  • inactive=time:缓存项的非活动时长,在此处指定的时长内未被命中的或命中的次数少于* * * open_file_cache_min_uses指令所指定的次数的缓存项即为非活动项;
23、open_file_cache_valid time;

缓存项有效性的检查频率;默认为60s;

24、open_file_cache_min_uses number;

在open_file_cache指令的inactive参数指定的时长内,至少应该被命中多少次方可被归类为活动项;

25、open_file_cache_errors on | off;

是否缓存查找时发生错误的文件一类的信息;

ngx_http_access_module 模块:

实现基于ip的访问控制功能
26、allow address | CIDR | unix: | all;
27、deny address | CIDR | unix: | all;
http, server, location, limit_except

ngx_http_auth_basic_module 模块

实现基于用户的访问控制,使用basic机制进行用户认证;

28、auth_basic string | off;
29、auth_basic_user_file file;

[root@C712 ~]# yum -y install httpd-tools #安装http工具
[root@C712 ~]# htpasswd -c -m /etc/nginx/.ngxpasswd tom #创建一个用户
New password: #输入密码
Re-type new password: 
Adding password for user tom
[root@C712 ~]# htpasswd -m /etc/nginx/.ngxpasswd jerry   #创建一个用户
New password: #输入密码
Re-type new password: 
Adding password for user jerry
[root@C712 ~]# cat /etc/nginx/.ngxpasswd #查看密码状态
tom:$apr1$wglyVLHX$Qv/ttSwO13iyWVBoUerPF/
jerry:$apr1$zHqX7iMf$lRidKTnlz3.HQC/MRUrTT0

[root@C712 ~]# vim /etc/nginx/conf.d/vhost1.conf 

server{
       listen 8080;
       server_name www.ilinux.io;
       root /data/nginx/vhost1;
location ~* ^/(admin|login){   #url以admin或login开头匹配
      auth_basic "admin area or login url";
      auth_basic_user_file /etc/nginx.ngxpasswd;
}
}

[root@C712 ~]# mkdir /data/nginx/vhost1/admin
[root@C712 ~]# vim /data/nginx/vhost1/admin/index.html

<h1>Admin Area</h1>
[root@C712 ~]# nginx -s reload

注意:htpasswd命令由httpd-tools所提供;

ngx_http_stub_status_module 模块

用于输出nginx的基本状态信息

Active connections: 291 
server accepts handled requests
16630948 16630948 31070465 
Reading: 6 Writing: 179 Waiting: 106     

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

30、stub_status;

ngx_http_log_module模块

配置nginx以指定的格式写入请求日志

(1)、log_format name string ...;
string可以使用nginx核心模块及其它模块内嵌的变量;
(2)、access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;#关闭日志记录
server{
.....
access_log /var/log/nginx/vhost1_access.log main; # 自定义日志路径,格式为main
location /ngxstatus {
stub_status;
access_log off;#关闭访问信息页日志记录
}
}

访问日志文件路径,格式及相关的缓冲的配置;
buffer=size
flush=time
(3)、open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
open_log_file_cache off;
缓存各日志文件相关的元数据信息;
max:缓存的最大文件描述符数量;
min_uses:在inactive指定的时长内访问大于等于此值方可被当作活动项;
inactive:非活动时长;
valid:验正缓存中各缓存项是否为活动项的时间间隔;

ngx_http_gzip_module 模块

配值nginx的压缩传输功能

  • (1)、gzip on | off;
    启用或禁用压缩响应
  • (2)、gzip_comp_level level;
    设置响应的GZIP压缩级别。可接受的值在1到9的范围内。
  • (3)、 gzip_disable regex ...;
    禁用与“用户代理”标题字段匹配的任何指定正则表达式的请求响应的GZIPIP。
  • (4)、 gzip_min_length length;
    启用压缩功能的响应报文大小阈值;
  • (5)、gzip_buffers number size;
    支持实现压缩功能时为其配置的缓冲区数量及每个缓存区的大小;
  • (6)、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的值为此三者中任何一个,则启用压缩功能;

  • (7)、gzip_types mime-type ...;
    压缩过滤器,仅对此处设定的MIME类型的内容启用压缩功能;

示例:
vim /etc/nginx/conf
http {
gzip  on;
gzip_comp_level 6;
gzip_min_length 64;
gzip_proxied any;
gzip_types text/xml text/css  application/javascript;
}

ngx_http_ssl_module 模块

ssl安全套接字模块

  • (1)、 ssl on | off;
    是否启用ssl
  • (2)、ssl_certificate file;
    当前虚拟主机使用PEM格式的证书文件;
  • (3)、ssl_certificate_key file;
    当前虚拟主机上与其证书匹配的私钥文件;

在CA证书服务器生成自签证书
[root@C711 ~]# cd /etc/pki/CA/
[root@C711 CA]# ls
certs crl newcerts private
[root@C711 CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus
...........+++
......+++
e is 65537 (0x10001)
[root@C711 CA]# ll private
总用量 4
-rw------- 1 root root 1675 7月 9 23:02 cakey.pem
[root@C711 CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pm
[root@C711 CA]# touch index.txt
[root@C711 CA]# echo 01 > serial

在nginx服务器上:
[root@C712 ~]# mkdir /etc/nginx/ssl #创建ssl目录
[root@C712 ~]# cd /etc/nginx/ssl
[root@C712 ssl]# (umask 077; openssl genrsa -out nginx.key 2048) #创建秘钥
[root@C712 ssl]# ll #查询
总用量 4
-rw------- 1 root root 1679 7月 9 23:19 nginx.key
[root@C712 ssl]# openssl req -new -key nginx.key -out nginx.csr #创建私钥
[root@C712 ssl]# ll #查询
总用量 8
-rw-r--r-- 1 root root 989 7月 9 23:22 nginx.csr
-rw------- 1 root root 1679 7月 9 23:19 nginx.key
[root@C712 ssl]# scp nginx.csr 192.168.1.11:/tmp/#传输到CA服务器上

在CA服务器上认证
[root@C711 CA]# openssl ca -in /tmp/nginx.csr -out /etc/pki/CA/certs/nginx.crt -days 365
[root@C711 CA]#scp certs/nginx.crt 192.168.1.12:/etc/nginx/ssl #传送回nginx服务器

回到nginx服务器上
[root@C712 ~]# cd /etc/nginx
[root@C712 nginx]# cp conf.d/vhost1.conf conf.d/vhost1_ssl.conf
[root@C712 nginx]# vim conf.d/vhost1_ssl.conf

server{
listen 443 ssl; #修改监听端口
server_name www.ilinux.io;
root /data/nginx/vhost1;
access_log /var/log/nginx/vhost1_ssl_access.log main;

ssl on; #开启ssl
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_protocols sslv3 tlsv1 tlsv1.1 tlsv1.2;#支持哪些协议
ssl_session_cache shared:sslcache:20m;#指明缓存大小,1M能够缓存4000个会话

location ~* ^/(admin|login){
auth_basic "admin area or login url";
auth_basic_user_file /etc/nginx/.ngxpasswd;
}
}
[root@C712 ~]# nginx -s reload

  • (4)、ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
    支持ssl协议版本,默认为后三个;
  • (5)、ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
    builtin[:size]:使用OpenSSL内建的缓存,此缓存为每worker进程私有;
    [shared:name:size]:在各worker之间使用一个共享的缓存;
  • (6)、ssl_session_timeout time;
    客户端一侧的连接可以复用ssl session cache中缓存 的ssl参数的有效时长;

ssl_session_timeout time 模块

URL重定向,URL重写查找替换

例如:
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所描述的模式进行检查,而后完成替换;

  • (1)、rewrite regex replacement [flag]
    将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URI;

[root@C712 nginx]# vim /etc/nginx/conf.d/vhost1.conf 

server{
       listen 8080;
       server_name www.ilinux.io;
       root /data/nginx/vhost1;
       rewrite /(.*)\.png$ /$1.jpg;#请求png返回jpg
       rewrite  /(.*)$ https://www.ilinux.io/$1#URL的8080请求都要自动重定向到https上

  • 注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查,因此,隐含有循环机制;[flag]所表示的标志位用于控制此循环机制;

  • 如果replacement是以http://或https://开头,则替换结果会直接以重向返回给客户端;

  • 301:永久重定向;

  • [flag]标志位:

ast:(循环)
重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮重写检查;提前重启新一轮循环;
break:(跳出循环)
重写完成后停止对当前URI在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环;
redirect:
重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;不能以http://或https://开头;
permanent:
重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;

  • (2)、return返回
    return code [text];
    return code URL;
    return URL;
    停止处理并将指定的代码返回给客户端。

  • (3)、 rewrite_log on | off;
    是否开启重写日志;

  • (4)、 if (condition) { ... }条件判断
    引入一个新的配置上下文 ;条件满足时,执行配置块中的配置指令;server, location;

condition:
比较操作符:
==
!=
~:模式匹配,区分字符大小写;
~:模式匹配,不区分字符大小写;
!~:模式不匹配,区分字符大小写;
!~
:模式不匹配,不区分字符大小写;
文件及目录存在性判断:
-e, !-e
-f, !-f
-d, !-d
-x, !-x

  • (5)、set $variable value;
    用户自定义变量 ;

ngx_http_rewrite_module 模块

允许引用模块

网站的合法引用,防止盗链

  • 格式:valid_referers none | blocked | server_names | string ...;
  • 定义referer首部的合法可用值;

none:请求报文首部没有referer首部;
blocked:请求报文的referer首部没有值;
server_names:参数,其可以有值作为主机名或主机名模式;
arbitrary_string:直接字符串,但可使用作通配符;
regular expression:被指定的正则表达式模式匹配到的字符串;要使用~打头,例如 ~..magedu.com;

配置示例:
valid_referers none block server_names *.magedu.com *.mageedu.com magedu.* mageedu.* ~\.magedu\.;#匹配指定URL

if($invalid_referer) {
return http://www.magedu.com/invalid.jpg; #非法引用自动跳转到指定URl
}

标签:http,ssl,nginx,ngx,Nginx,软件架构,模块,root,实操
From: https://blog.csdn.net/Rookie_CEO/article/details/141527872

相关文章

  • 科普文:软件架构Nginx系列之【万字详解Nginx防盗链】
    概叙盗链攻击是一种常见的网络安全威胁,不仅侵犯了内容创作者的版权,还可能会给原网站带来严重的损失。了解盗链攻击的原理和类型,采取有效的防范措施,是保护网站和服务的重要手段。通过技术和法律手段的结合,可以有效地防止和减轻盗链攻击的影响。随着技术的发展,防盗链的方法也......
  • 科普文:软件架构Nginx系列之【Nginx 核心架构设计和原理】
    概叙Nginx是什么Nginx(engineX)是一个开源的轻量级的HTTP服务器,能够提供高性能的HTTP和反向代理服务。与传统的Apache服务器相比,在性能上Nginx占用系统资源更小、支持高并发,访问效率更高;在功能上,Nginx不仅作为Web服务软件,还适用于反向代理、负载均衡等场景;在安装配置上,Nginx......
  • 银河麒麟系统V10(arm版)安装nginx-1.14.1说明
    #银河麒麟系统#、#nginx#随着2024年微软全球蓝屏事件的出现,系统安全越来越重要。目前很多企业开始尝试国产化操作系统上,本文介绍如何在国产化银河麒麟系统V10(arm)版上安装nginx-1.14.1。本资源是arm版本的nginx-1.14.1的rpm离线安装包(下载地址:银河麒麟系统arm版nginx-1.14.1-......
  • Nginx rewrite
    NginxrewriteURL组成http://www.wingsredevsecops.top/download?name=docker.pdf这个URL的格式可以分为以下⼏个部分:协议部分:指定了访问资源的协议,这个URL使⽤了默认的协议HTTP、HTTPS。域名部分:指定服务器的域名和顶级域名,这个URL的域名部分是www.wingsredevsecops.top......
  • Nginx缓存服务
    Nginx缓存服务7.1缓存配置语法proxy_cache配置语法Syntax:proxy_cachezone|off;Default:proxy_cacheoff;Context:http,server,location//缓存路径Syntax:proxy_cache_pathpath[levels=levels][use_temp_path=on|off]keys_zone=name:size[inactive=time]......
  • nginx知识点
    1、nginx的角色web服务器、缓存服务器、做反向代理和负载均衡2、proxy_pass加不加斜杠的区别主机:192.168.20.144:80(1)、proxy_pass后面有斜杠 location/api/{ proxy_passhttp://192.168.20.145:80/ } 当用户去访问http://192.168.20.144:80/api时会代理到http://19......
  • 通过Nginx日志检测异常ip并封禁
    需求来源从攻防演练中获得灵感,不需要使用其他防火墙即可实现异常ip拦截nginx.conf增加配置log_formatmain'$remote_addr-$remote_user[$time_local]"$request"''$status$body_bytes_sent"$http_referer"''&qu......
  • Docker安装Nginx
    第一步:拉取镜像可指定版本,也可不写,则为默认最新版本第二步:拷贝配置文件首先运行容器dockerrun-d--namenginx-p8082:8082nginx然后复制配置文件到宿主机文件夹,此处的宿主文件夹为自己手动创建,即为D:/usr/nginx/conf#将容器nginx.conf文件复制到宿主机dock......
  • docker对的tomcat、mysql、redis、nginx的安装
    本章篇章主要讲解了docker对常用软件的安装说明总体步骤:搜索镜像、拉取镜像、查看镜像、启动镜像、停止容器、移除容器tomcatdockerseachertomcat//也可以在dockerhub上面查找tomcat镜像dockerpulltomcat从dockerhub上拉取tomcat镜像到本地dockerimages//查看是否......
  • docker mysql导入导出 nginx
    导出MySQL文件mysqldump--no-tablespaces-uroot-pabc>abc.sql导入MySQL文件mysql-uwpp-pvGgM701wWSBNwj8--default-character-set=utf8wpp<D:\wpp\nest\tmp\wpp.sql问题:docker中MySQL无法输入中文解决:dockerexec-itmysqlenvLANG=C.UTF-8/bin/bash将权限json......