Nginx 教程

Nginx 教程 Nginx 简介 Nginx 源码架构分析 Nginx 编译安装 Nginx(Tengine) 编译安装 Nginx(OpenResty) 编译安装 Nginx 配置简述 Nginx Docker 容器化配置

Nginx 核心配置指令

Nginx 核心配置指令 Nginx 配置文件 Nginx 进程配置指令 Nginx 端口监听:listen Nginx 主机名server_name Nginx 处理HTTP请求 Nginx 路由匹配规则:localhost Nginx 重定向配置:rewrite Nginx 根目录配置:root Nginx 访问路径别名:alias Nginx 文件判断:try_files Nginx 零复制:sendfile Nginx 日志记录配置

Nginx HTTP模块

Nginx 镜像模块 Nginx 请求头控制模块 Nginx IP访问控制模块 Nginx 用户cookie模块 Nginx 并发连接数限制模块 Nginx 首页处理模块 Nginx 请求频率限制模块 Nginx 页面缓存时间配置 Nginx gzip压缩及相关配置

Nginx Web服务

Nginx 静态资源服务器搭建 Nginx 文件下载服务器搭建 Nginx 伪动态SSI服务器 Nginx HTTPS服务器搭建 Nginx FastCGI模块配置简述 Nginx PHP服务器环境搭建 Nginx 基于FastCGI负载均衡 Nginx CGI网关接口 Nginx uWSGI模块配置 Nginx Python项目部署 Nginx 伪流媒体服务器搭建 Nginx HTTP2模块配置简述 Nginx WebDAV模块配置简述

Nginx 代理服务器

Nginx HTTP代理服务器 Nginx stream模块简述 Nginx TCP/UDP代理简述 Nginx 基于SSL的TCP代理服务器 Nginx gRPC代理服务器

Nginx 缓存

Nginx Web缓存配置 Nginx 代理缓存配置 Nginx Memcached 缓存模块 Nginx 反向代理缓存服务器配置 Nginx 客户端缓存控制

Nginx 负载均衡

Nginx 负载均衡模块 Nginx 负载均衡策略 Nginx 长连接负载均衡 Nginx upstream容错机制 Nginx upstream动态更新 Nginx TCP/UDP负载均衡

Nginx 日志管理监控

Nginx 日志分析简述 Nginx 访问日志配置 Nginx 错误日志配置 Nginx 日志归档配置 Nginx 日志分析工具 ELK Nginx 监控工具 Prometheus

Nginx 集群

LVS(Linux虚拟服务器)简介 Keepalived 配置简述 Nginx 集群负载搭建 Nginx 集群配置管理规划 Nginx 配置归档工具GitLab Nginx 配置修改工具Ansible Jenkins 安装与配置简述 Nginx 集群配置管理实例

Nginx 在 k8s 的应用

Kubernetes(k8s)系统简述 Kubernetes(k8s)集群部署 Kubernetes(k8s)网络通信 Nginx Ingress 简介 Nginx Ingress 安装部署 Nginx Ingress 配置映射 Nginx Ingress 注解


Nginx 伪流媒体服务器搭建

Nginx 支持伪流媒体播放功能,其可以和客户端的 Flash 播放器结合,对以 .flv、.f4f、.mp4、.m4v、.m4a 为扩展名的文件实现流媒体的播放功能。若启用伪流媒体的支持功能,需要按媒体文件格式在配置编译时增加 --with-http_f4f_module、--with-http_flv_module 和 --with-http_mp4_module 这 3 个参数。

1、模块配置指令

伪流媒体模块配置指令如下表所示。

指令名称 指令值格式 默认值 指令说明
f4f -- -- 启用 F4F 文件支持
f4f_buffer_size size 512k 设置读取 .f4x 索引文件的缓冲区大小
flv -- -- 启用 FLV 文件支持
mp4 -- -- 启用 MP4 文件支持
mp4_buffer_size size 512k 设置处理 MP4 文件的缓冲区大小
mp4_max_buffer_size size 512k Metadata 数据处理过程中的最大缓冲区大小
mp4_limit_rate on 或 off 或 facto off 限制客户单媒体流请求的最大速率。仅在 Nginx 商业版本中提供
mp4_limit_rate_after time 60s 客户单媒体流请求的速率达到指定值时开始限速。仅在 Nginx 商业版本中提供

F4F 格式仅在 Nginx 商业版本中提供。

2、伪流媒体配置样例

伪流媒体配置样例是利用 Nginx 的自动索引功能生成 XML 格式的目录列表,通过 XSLT 生成前端页面,使用 jQuery 插件 video.js 的 Flash 播放器播放 FLV 及 MP4 格式的流媒体文件。页面效果如下图所示。

Nginx 配置样例如下:
server {
    listen 8081;
    server_name localhost;
    charset utf-8;
    root /opt/nginx-web/files;
    default_type text/xml;

    location / {
       autoindex on;                                    # 启用自动页面功能
       autoindex_localtime on;                          # 使用Nginx服务器时间
       autoindex_format xml;                            # 自动页面输出格式为XML
       xslt_stylesheet conf/conf.d/example/test.xslt;   # 引入XSLT模板文件
    }

    location ~ \.flv$ {
        flv;                                            # FLV文件启用伪流媒体支持
    }
    location ~ \.mp4$ {
        mp4;                                            # MP4文件启用伪流媒体支持
        mp4_buffer_size       1m;                       # MP4文件的缓冲区大小为1MB
        mp4_max_buffer_size   5m;                       # MP4文件最大缓冲区大小为5MB
    }
}
文件test.xslt内容如下:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3. <xsl:template match="/">
  4. <html>
  5. <head>
  6. <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
  7. <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/ 3.3.7/css/bootstrap.min.css"/>
  8. <script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
  9. <script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
  10. <link href="https://cdn.bootcss.com/video.js/6.6.2/video-js.css" ref= "stylesheet"/>
  11. <script src="https://cdn.bootcss.com/video.js/6.6.2/video.js"></script>
  12. </head>
  13. <body>
  14. <h3>Nginx流媒体示例</h3>
  15. <table class="table table-striped table-bordered">
  16. <thead>
  17. <th>文件名</th>
  18. <th>文件类型</th>
  19. <th>文件大小</th>
  20. <th>文件修改时间</th>
  21. </thead>
  22. <xsl:for-each select="list/*">
  23. <xsl:sort select="mtime"/>
  24.  
  25. <xsl:variable name="name">
  26. <xsl:value-of select="."/>
  27. </xsl:variable>
  28. <xsl:variable name="ext">
  29. <xsl:value-of select="substring($name,string-length($name)-2,3)"/>
  30. </xsl:variable>
  31. <xsl:variable name="size">
  32. <xsl:if test="string-length(@size) &gt; 0">
  33. <xsl:if test="number(@size) &gt; 0">
  34. <xsl:choose>
  35. <xsl:when test="round(@size div 1024) &lt; 1"> <xsl:value-of select="@size" /></xsl:when>
  36. <xsl:when test="round(@size div 1048576) &lt; 1"><xsl:value-of select="format-number((@size div 1024), '0.0')" />K</xsl:when>
  37. <xsl:otherwise><xsl:value-of select="format-number((@size div 1048576), '0.00')" />M</xsl:otherwise>
  38. </xsl:choose>
  39. </xsl:if>
  40. </xsl:if>
  41. </xsl:variable>
  42. <xsl:variable name="date">
  43. <xsl:value-of select="substring(@mtime,1,4)"/>-<xsl:value-of select= "substring(@mtime,6,2)"/>-<xsl:value-of select="substring(@mtime,9,2)"/><xsl:text> </xsl:text>
  44. <xsl:value-of select="substring(@mtime,12,2)"/>:<xsl:value-of select="substring(@mtime,15,2)"/>:<xsl:value-of select="substring(@mtime,18,2)"/>
  45. </xsl:variable>
  46.  
  47. <tr>
  48. <td>
  49. <a href="{$name}"><xsl:value-of select="."/></a>
  50. </td>
  51. <td>
  52. <xsl:choose>
  53. <xsl:when test="$ext='mp4' or $ext='flv'">
  54. <video id="example_video_1" class="video-js vjs-default-skin" controls="true" preload="none" width="640" height="264" poster="http://vjs.zencdn.net/v/oceans.png">
  55. <source src="{$name}" type="video/mp4"/>
  56. </video>
  57. </xsl:when>
  58. <xsl:otherwise>
  59. <xsl:value-of select="$ext"/>
  60. </xsl:otherwise>
  61. </xsl:otherwise>
  62. </xsl:choose>
  63. </td>
  64. <td align="center"><xsl:value-of select="$size"/></td>
  65. <td><xsl:value-of select="$date"/></td>
  66. </tr>
  67. </xsl:for-each>
  68. </table>
  69. </body>
  70. <script>