如何通过Nginx重写URL以MP4格式直接响应视频请求?
Nginx实现URL重写与MP4内容类型响应
要实现将example.com/videos/name/这类请求重写为对应MP4文件并返回正确的内容类型,可以通过Nginx的rewrite指令和内容类型配置完成,具体步骤如下:
核心配置代码
在你的Nginx站点配置的server块中添加以下规则:
# 匹配以/videos/xxx/结尾的请求,重写为对应的.mp4文件 location ~* ^/videos/([^/]+)/$ { rewrite ^/videos/([^/]+)/$ /videos/$1.mp4 last; } # 处理MP4文件请求,确保返回正确的内容类型 location ~* \.mp4$ { # 显式设置MP4的内容类型(若mime.types已配置可省略,但显式设置更稳妥) types { video/mp4 mp4; } # 可选:添加缓存优化,和直接请求MP4文件的行为保持一致 expires 1y; add_header Cache-Control "public, immutable"; }
配置说明
第一部分location:
- 正则
^/videos/([^/]+)/$精准匹配/videos/后接任意非斜杠字符、且以斜杠结尾的请求,捕获其中的name部分; rewrite指令将请求URL替换为/videos/name.mp4,last参数表示终止当前location的处理,让Nginx重新匹配新URL对应的规则。
- 正则
第二部分location:
- 匹配所有
.mp4结尾的请求,通过types指令强制设置响应的Content-Type为video/mp4; - 额外添加的
expires和Cache-Control头是为了和直接请求MP4文件时的缓存行为保持一致,属于优化项,可根据需求调整或移除。
- 匹配所有
验证方法
配置完成后重启Nginx,用以下命令测试:
curl -I http://example.com/videos/name/
查看响应头中的Content-Type字段,若显示为video/mp4,且能正常播放视频,则配置生效。
内容的提问来源于stack exchange,提问作者Toxiro
相关产品推荐
相关产品推荐

