nginx.org文档中,摘录了一篇nginx介绍的文章,Chapter “nginx” in “The Architecture of Open Source Applications”,这篇文章写得很赞,一起读读:

  • 14.1. Why Is High Concurrency Important? 介绍了Nginx到底解决了什么问题,为什么Apache就解决不了这些问题。
  • 14.2. Overview of nginx Architecture 介绍了Nginx的模块架构,和上下游的关系,Cache,Worker模型。
  • 14.3. nginx Configuration 讲配置的逻辑,没想到配置在Nginx中会有专门的一章介绍。
  • 14.4. nginx Internals 主要是讲Nginx Modules。Nginx的core主要是提供web server,web和mail proxy的功能,主要的功能是由模块和模块pipeline或chain组合完成,分为event modules, phase handlers, output filters, variable handlers, protocols, upstreams and load balancers等等。
  • 14.5. Lessons Learned there is always room for improvement,历史车轮总是在滚滚前行,从不停息。
 
 winlinvip added this to the SRS 4.0 release milestone on 14 Jan
 
MemberAuthor

winlinvip commented on 14 Jan

Nginx的rewrite模块,就是重写path的模块,可以看到nginx在配置中,除了可以用PCRE支持正则表达式,还可以配置比较复杂的流程,比如if可以在不同条件下rewrite路径:

if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/$1 break;
} if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
set $id $1;
} if ($request_method = POST) {
return 405;
} if ($slow) {
limit_rate 10k;
} if ($invalid_referer) {
return 403;
}

这已经相当于解析一部分逻辑了,除了openresty支持lua扩展语言,Nginx还支持了njs也就是javascript。

SRS不会支持脚本语言,目前HTTP(S)作为系统间的通用语言,我觉得HTTP集成是更合适的方式。当然Nginx在配置和脚本扩展语言方面,做得非常的好,值得钦佩和学习。

 
MemberAuthor

winlinvip commented on 16 Jan •

edited 

Nginx可以支持WebSocket代理,参考WebSocket proxying

举个栗子,将直播HTTP-FLV流http://localhost:8082/live/livestream.flv,使用videojs-flow转成WebSocket流ws://localhost:8081/live/livestream.flv,然后用Nginx代理成ws://localhost:8080/live/livestream.flv

SRS配置如下:

listen              1935;
max_connections 1000;
daemon off;
srs_log_tank console;
http_server {
enabled on;
listen 8082;
}
vhost __defaultVhost__ {
http_remux {
enabled on;
mount [vhost]/[app]/[stream].flv;
}
ingest livestream {
enabled on;
input {
type file;
url ./doc/source.200kbps.768x320.flv;
}
ffmpeg ./objs/ffmpeg/bin/ffmpeg;
engine {
enabled off;
output rtmp://127.0.0.1:[port]/live?vhost=[vhost]/livestream;
}
}
}

启动videojs-flow/demo/mse.go,将HTTP-FLV转WS-FLV:

go get golang.org/x/net/websocket &&
go run mse.go -l 8081 -b 8082

配置Nginx,反向代理WS-FLV如下:

daemon off;
worker_processes 1;
events {
worker_connections 1024;
}
http {
server {
listen 8080;
location / {
proxy_pass http://localhost:8081;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
}

使用bilibili/flv.js,播放流地址:ws://localhost:8080/live/livestream.flv

Nginx比SRS做得好的地方的更多相关文章

  1. 使用nginx和iptables做访问权限控制(IP和MAC)

    之前配置的服务器,相当于对整个内网都是公开的 而且,除了可以通过80端口的nginx来间接访问各项服务,也可以绕过nginx,直接ip地址加端口访问对应服务 这是不对的啊,所以我们要做一些限制 因为只 ...

  2. nginx 反向代理做域名转发简单配置

    这里用的是nginx for windows 首先进入nginx配置文件,做以下配置: server { listen 80; server_name abc.com; location / { pr ...

  3. nginx根据域名做http,https分发

    omcat端口:8080 做好虚拟主机 参照我的另一篇文章nginx端口:80 根据域名分派 在conf/nginx.conf中的http中增加 include www.huozhe.com.conf ...

  4. nginx代理天地图做缓存解决跨域问题

    作为一个GISer开发者,天地图是经常在项目中以底图的形式出现,其加载地址如: 天地图矢量:http://t{0-6}.tianditu.com/DataServer?T=vec_w&x={x ...

  5. Linux 针对nginx日志文件做ip防刷限制

    针对nginx日志做ip访问限制 1.cat /var/log/server/nginx/access.log| awk -F '?' '/optionid/{print $1}'|awk '{pri ...

  6. Nginx 到底可以做什么

    本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解到过得,欢迎留言交流. Nginx能做什么 反向 ...

  7. tomcat结合nginx或apache做负载均衡及session绑定

    1.tomcat结合nginx做负载均衡,session绑定 nginx:192.168.223.136   tomcat:192.168.223.146:8081,192.168.223.146:8 ...

  8. 全面了解 Nginx 到底能做什么

    来源:https://www.jianshu.com/p/8bf73d1a758c 前言 本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可 ...

  9. 搭建Nginx反向代理做内网域名转发

    由于公司内网有多台服务器的 http 服务要映射到公司外网静态 IP,如果用路由的端口映射来做,就只能一台内网服务器的 80 端口映射到外网 80 端口,其他服务器的 80 端口只能映射到外网的非 8 ...

随机推荐

  1. HttpClient来自官方的JSON扩展方法

    System.Net.Http.Json Json的序列化和反序列化是我们日常常见的操作,通过System.Net.Http.Json我们可以用少量的代码实现上述操作.正如在github设计文档中所描 ...

  2. python--爬虫之JSON于JsonPath

    JSON json的引入 在python中json作为一个内建库不需要额外安装,只需要使用import json执行引入 json模块的功能 在python中json模块提供了四个功能:dumps.d ...

  3. 请设计 一个密码生成器,要求随机生成4组10位密码(C语言)

    请设计 一个密码生成器,要求随机生成4组10位密码(密码只能由字母和数字组成),每一组必须包含至少一个大写字母,每组密码不能相同,输出生成的密码. #include<stdio.h> #i ...

  4. 抽签小程序,妈妈再也不用担心谁洗碗(分配任务)了,so easy

    背景 今天谁炒菜,谁洗碗,谁买菜...啊,Boss说用抽签吧,于是有了下图 这样存在作弊的问题(记住棍子特征,谁先,谁后抽等等)于是有了这个抽签小程序(当然小程序我一个人控制,我想不想作弊看心情了) ...

  5. "字符反向拼接"组件:<reverse> —— 快应用组件库H-UI

     <import name="reverse" src="../Common/ui/h-ui/text/c_text_reverse"></ ...

  6. AJ学IOS(13)UI之UITableView学习(下)汽车名牌带右侧索引

    AJ分享,必须精品 先看效果图 代码 ViewController #import "NYViewController.h" #import "NYCarGroup.h& ...

  7. 【LeetCode】23.合并K个排序链表

    题目描述 23.合并K个排序链表 合并k个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] ...

  8. 吾八哥学k8s(二):golang服务部署到kubernetes

    本篇主要讲解如何将golang的服务部署到kubernetes集群里,附带相关的golang的demo和yml文件内容.纯新手入门方式,生产服务需要完整的CI/CD流程来支持. golang服务代码 ...

  9. Python 小技之实现的鲜花盛宴,你准备好了吗?

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:派森酱 PS:如有需要Python学习资料的小伙伴可以加点击下方链接 ...

  10. 告诉你那里最受欢迎,python爬取全国13个城市旅游数据

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http ...