在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. pip 命令参数以及如何配置国内镜像源

    文章更新于:2020-04-05 注:如果 pip 命令不可以用,参见:python pip命令不能用 文章目录 一.参数详解 1.命令列表 2.通用参数列表 二.实际应用 1.常用命令 2.`pip ...

  2. Pytest系列(16)- 分布式测试插件之pytest-xdist的详细使用

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 平常我们功能测试用例非常多时 ...

  3. tf.train.AdamOptimizer 优化器

    adaptive moment estimation(自适应矩估计) tf.train.AdamOptimizer( learning_rate=0.001, beta1=0.9, beta2=0.9 ...

  4. Docker php安装扩展步骤详解

    前言 此篇,主要是演示docker-php-source , docker-php-ext-install ,docker-php-enable-docker-configure 这四个命令到底是用来 ...

  5. Spring 中 用 ${xxx} 读取properties文件的说明

    properties 如果在 spring 中通过 PropertyPlaceholderConfigurer 加载,当spring 中需要 用到 properties 中的一些 key 和value ...

  6. 一个不错的博客-涉及el 、jstl、log4j 入门等

    http://www.cnblogs.com/Fskjb/category/198224.html

  7. iOS技能 - 最新美团、百度、腾讯、头条、阿里 面试题目记录

    关于面试题,可能没那么多时间来总结答案,有什么需要讨论的地方欢迎大家指教.主要记录一下准备过程,和面试的一些总结,希望能帮助到正在面试或者将要面试的同学吧. 美团 一面 1.简历上写的项目问了一遍,然 ...

  8. 2019-08-01【机器学习】有监督学习之分类 KNN,决策树,Nbayes算法实例 (人体运动状态信息评级)

    样本: 使用的算法: 代码: import numpy as np import pandas as pd import datetime from sklearn.impute import Sim ...

  9. G++编译链接的那些事

    语言 CPP 前言   虽然 VSCodeC++ 编辑器非常受大家的欢迎,无论是大佬还是小白都说对其爱不释手...   我...用了一段时间后发现实在是麻烦,配置往往花费我大量时间.可以说真的是吃力不 ...

  10. 练习,自定义TextView(1.1)

    重新自定义TextView是非常有趣的事情,跟着Android4高级编程,通过自定义TextView,来敲一下代码: 这个是那么的简单,自定义TextView,新建CustomTextView继承Te ...