配置文件实例
server { listen 8000; server_name 1.2.3.4:8000 192.168.1.1:8000; error_log /var/log/nginx/hls/hls_error.log; access_log /var/log/nginx/hls/hls_access.log; location / { auth_basic "HLS Root Restricted"; auth_basic_user_file /etc/nginx/hls_passwd; root /srv/hls; index index.html index.htm; } location /hls/ { auth_basic "HLS Restricted"; auth_basic_user_file /etc/nginx/hls_passwd; rewrite /hls/(.*) /$1 break; proxy_pass http://192.168.1.2:$query_string; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
详细注释
- 第3行:当前nginx虚拟站点监听的本地端口
- 第4行:虚拟站点可用的主机名
- 第8行:HTTP Basic认证的提示字符串
- 第9行:HTTP Basic认证使用的用户口令凭据文件
- 第10行:强制指定虚拟站点根目录物理路径
- 第16行:将/hls/ 路径下的所有请求进行重写,从原始请求中去除:/hls/
- 第17行:将原始请求反向代理到http://192.168.1.2:$query_string ,其中$query_string是原始请求中的请求参数
实例:
流媒体客户端直接访问:
http://1.2.3.4:8000/hls/proxyStream-vlc-491efc62-aa0f-4df8-ad6b-5da242e43d25?8554
经过以上nginx反向代理之后,实际请求的后端流媒体服务器地址为:
http://192.168.1.2:8554/proxyStream-vlc-491efc62-aa0f-4df8-ad6b-5da242e43d25
由于nginx反向代理服务器启用了HTTP Basic认证,流媒体客户端需要按提示输入正确的用户名和密码才可以正常访问流媒体服务。
基于nginx生成auth_basic_user_file
参考How do I generate an .htpasswd file without having Apache tools installed?
sudo printf "tom:$(openssl passwd -crypt jerry)\n" >> /etc/nginx/hls_passwd
以上命令对应生成了一对Basic认证的用户名密码对:
- 用户名:tom
- 密码:jerry
注意,使用crypt加密算法,最大只支持8位密码。如需更高强度密码位数,建议使用另外几种加密算法,例如:Apache MD5算法。
基于VLC将rtsp流媒体转换为HLS流媒体
/usr/bin/vlc -I dummy -vv rtsp://admin:123456@192.168.1.120/mpeg4cif --sout #standard{access=http,mux=ts,dst=192.168.1.2:8554/proxyStream-vlc-491efc62-aa0f-4df8-ad6b-5da242e43d25} /usr/bin/vlc -I dummy -vv rtsp://admin:123456@192.168.1.121/mpeg4cif --sout #standard{access=http,mux=ts,dst=192.168.1.2:8555/proxyStream-vlc-491efc62-aa0f-4df8-ad6b-5da242e43d25}
通过nginx反向代理方式访问后端的RTSP流媒体服务时,就可以通过GET参数来访问不同的后端RTSP端口。