博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Nginx基础 - 13模块与变量

Posted on 2023-03-12 10:39  Kingdomer  阅读(26)  评论(0编辑  收藏  举报

 

 

一、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"}';
    }