Nginx(19)-更多实用功能:身份认证、流媒体支持、大文件传输、流量镜像、分片、获取客户端真实ip等

本文介绍了Nginx的高级特性,包括身份验证(基本验证和子请求验证)、流媒体支持(实时流与渐进下载)、大文件传输、流量镜像、获取客户端真实IP等,详细阐述了各功能的配置和应用场景,有助于提升Nginx的利用效率。
摘要由CSDN通过智能技术生成

        Nginx具有很多强大功能,专栏前面讲述的主要是常用功能。本文主要讲述常用之外的其它实用功能,如身份认证、流媒体支持、大文件传输等。为充分利用Nginx,对这些技术都又必要了解。

目录

身份认证

基本身份验证

创建身份验证文件

配置身份验证

测试

身份验证子请求

流媒体支持

实时流媒体

渐进式下载和伪流技

MP4配置

flv配置

图片处理

大文件支持

响应正文前后增加内容

从memcached获取响应

流量镜像

配置示例

阻塞处理

扩展处理

应用场景

获取客户端真实IP

单级部署 

多级部署

proxy1配置

 proxy2配置

 负载均衡器配置     

分片

响应内容替换

身份认证

        Nginx能够对客户端进行身份验证。使用 NGINX 对客户端请求进行身份验证可以减轻服务器的工作负载,并能够阻止未经身份验证的请求到达应用服务器。NGINX 开源版模块包括基本身份验证和身份验证子请求。

基本身份验证

        基本身份验证来保护整个 NGINX 主机的上下文、特定的虚拟服务器甚至只是特定的 location 代码块。基本身份验证不会取代 Web 应用的用户身份验证,但可以保护私人信息的安全。

        该功能由ngx_http_auth_basic_module模块提供。

创建身份验证文件

       首先创建身份验证文件,格式如下:

# 格式:身份名:密码[:注释]  注释可选。每一行代表一个身份
# name:password:comment 
idcode1:JJGeHm5C4c85I:这是测试,密码abc#111
# 测试密码abc#112
idcode2:cppBHPWd4gtmQ

其中密码是用如下命令命令加密的:

openssl passwd abc#111
        Nginx支持几种密码生成方式,如用Apache的htpasswd 命令生成密码,也支持 openssl htpasswd 使用 apr1 算法生成密码,还可以是轻型目录访问协议( LDAP)和 Dovecot 使用的 Salted SHA-1 格式。

配置身份验证

密码文件在conf.d/user.pwd,配置如下:

location / {
    # auth_basic 指令表示Nginx启动基本身份验证,带一个字符串参数(可任意)
    auth_basic "Private web by auth"; 
    # auth_basic_user_file 指令指定文件位置,可相对于Nginx工作目录,也可用绝对路径,保证Nginx可读即可
    auth_basic_user_file conf.d/user.pwd;
}

auth_basic值显示在响应头(没有正确授权),如下图:

测试

用curl测试如下(密码不对会显示401错误):

用浏览器测试,会弹出如下要求登陆的界面:

身份验证子请求

        身份验证子请求的意思是Nginx验证身份由第三方提供的子请求进行,Nginx再根据子请求的结果实现对客户端授权。如果子请求返回2xx响应代码,则允许访问。如果返回401或403,则使用相应的错误代码拒绝访问。子请求返回的任何其他响应代码都被视为错误。

        该功能由ngx_http_auth_request_module模块提供。如果编译版,应该使用--with-http_auth_request_module编译。

配置如下:

# 需身份验证的访问
location /private/ {
    # auth_request指令带一个URI参数,必须是本地内部位置
    auth_request /auth;
    # 在授权请求完成后,将请求变量设置为给定值。该值可能包含来自授权请求的变量
    auth_request_set $auth_status $upstream_status;
}
# 授权子请求
location = /auth {
    # 由第三方提供授权连接
    proxy_pass http://auth-server;
    # 默认是将原始请求(包括正文和请求头)传递到身份验证服务器。为提升效率,可通过proxy_pass_request_body off取消正文传递,同时把头字段Content-Length设置为空
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
    proxy_set_header X-Original-URI $request_uri;
}

授权子请求通过后,继续请求的正常处理。

流媒体支持

实时流媒体

        NGINX为MP4和MOV媒体文件提供http实时流媒体(hls)服务器端支持。此类文件通常具有.mp4、.m4v、.m4a、.mov或.qt文件扩展名。该模块支持H.264视频编解码器、AAC和MP3音频编解码器。

        该功能由ngx_http_hls_module模块提供。

        配置示例:

location /hls/ {
    # 开启实时流媒体
    hls;
    # 定义不使用“len”参数请求的播放URI的默认片段长度。
    hls_fragment            5s;
    # 设置用于读取和写入数据帧的缓冲区的数量和大小。
    hls_buffers             10 10m;
    # 设置用于处理MP4和MOV文件的缓冲区的初始大小
    hls_mp4_buffer_size     1m;
    # 设置用于处理MP4和MOV文件的缓冲区最大值
    hls_mp4_max_buffer_size 5m;

    root /var/video/;
}

访问URI可接受以下参数:

  • start:以秒为单位定义播放开始位置。
  • end:以秒为单位定义播放结束位置。
  • offset&#x
  • 27
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐享技术

每一个打赏,都是对我最大的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值