一、Nginx常用模块
Nginx模块分为 Nginx 官方模块 以及 Nginx第三方模块
Nginx编译选项
|
模块作用
|
ngx_http_core_module
|
包含一些核心的http参数配置,对应Nginx的配置区块部分
|
ngx_http_log_module
|
访问日志模块,以指定格式记录访问日志信息
|
ngx_http_stub_status_module
|
状态统计模块, 状态页
|
ngx_http_auth_basic_module
|
Web认证模块,使用basic机制进行用户认证
|
ngx_http_access_module
|
四层基于IP的访问控制模块,用来控制网站用户对Nginx的访问;可以通过匹配客户端源IP地址进行限制
|
ngx_http_gzip_module
|
文件的压缩功能,对Nginx返回的数据压缩
|
ngx_http_upstream_module
|
负载均衡模块,提供服务器分组转发、权重分配、状态监测、调度算法等高级功能
|
ngx_http_rewrite_module
|
重定向模块,解析和处理rewrite请求
|
ngx_http_referer_module
|
防盗链功能,基于访问安全考虑
|
ngx_http_proxy_module
|
proxy代理模块,将客户端的请求以http协议转发至指定服务器进行处理
|
ngx_http_ssl_module
|
ssl模块,用于加密的http连接,如https
|
ngx_http_fastcgi_module
|
将客户端对php的请求以fastcgi协议转发至指定服务器处理
|
ngx_http_uwsgi_module
|
将客户端对Python的请求以uwsgi协议转发至指定服务器处理
|
ngx_http_flv_module
|
为flv伪流媒体服务端提供支持
|
ngx_http_gzip_static_module
|
静态压缩模块
|
ngx_http_limit_conn_module
|
限制用户并发连接数及请求数模块
|
ngx_http_limit_req_module
|
限制 Nginx request processing rate 根据定义的key
|
ngx_http_headers_module
|
可以实现对头部报文添加指定的key与值
|
ngx_stream_proxy_module
|
tcp负载,将客户端的请求以tcp协议转发至指定服务器处理
|
ngx_stream_upstream_module
|
后端服务器分组转发、权重分配、状态监测、调度算法等高级功能
|
ngx_http_sub_module
|
|
ngx_http_random_index_module
|
二、 Nginx内置变量
http核心模块的内置变量: http请求变量、 Nginx内置变量、 自定义变量
$uri: 当前请求的uri, 不带参数 $request_uri: 请求的uri, 带完整参数 $request: Request请求行, GET等方法、http协议 $host: http请求报文中host首部, 如果没有则以处理请求的虚拟主机的主机名代替 $hostname: nginx服务运行在主机的主机名 $remote_addr: 客户端IP $remote_port: 客户端端口 $remote_user: 使用用户认证时,客户端用户输入的用户名 $request_filename:用户请求中的URI 经过本地root或 alias转换后映射的本地文件路径 $request_method: 请求方法, GET / POST / PUT $scheme: 在请求中使用scheme, 如 http://xxx.com 中的http $http_user_agent: http头部信息, 客户端访问设备 $server_addr: 服务器地址 $server_name: 服务器名称 $server_port: 服务器端口 $server_protocol: 服务器向客户端发送响应时的协议,如 http/1.1 http/1.0 $http_HEADER: 匹配请求报文中 指定的HEADER $http_host: 匹配请求报文中的 host 首部 $document_root: 当前请求映射到的root配置 $time_local: Nginx服务器的时间 $status: response返回状态码 $body_bytes_sent: 从服务端响应给客户端body信息大小 $http_referer: http上一级页面, 防盗链、用户行为 $http_x_forwarded_for: http请求携带的http信息
if ($http_user_agent ~ "Wget|ApacheBench") {
set $block_user_agent 1;
}
if ($block_user_agent = 1) {
return 403;
}
[root@my-node51 ~]# curl http://192.168.6.10:8300/request_path/code/index.html d1-1
[root@my-node51 ~]# wget http://192.168.6.10:8300/request_path/code/index.html --2023-03-12 08:48:13-- http://192.168.6.10:8300/request_path/code/index.html 正在连接 192.168.6.10:8300... 已连接。 已发出 HTTP 请求,正在等待回应... 403 Forbidden 2023-03-12 08:48:13 错误 403:Forbidden。
set $ip '0';
if ($http_x_forward_for ~ 192.168.6.51) {
set $ip 1;
}
if ($remote_addr ~ 192.168.6.51) {
set $ip 1;
}
location /hello {
if ($ip = "0") {
return 403;
}
default_type application/json;
return 200 '{"status": "success"}';
}