从零开始打造自己的直播服务器-Nginx安装

直播行业火了很长一段时间了,抛开那些复杂的实现,本系列将从零开始实现一个直播服务器。

功能

  1. RTMP拉流(基于HLS)

Nginx alias和root指令

Nginx的root指令相信大家用的都挺多,用来指定document_root,但是如果是针对特定path的请求才启用的话,root指令显得不好用

1
2
3
location /web {
root /home/wwwroot/site1;
}

访问 http://demo.com/web/a.js的时候,nginx会去查找/home/wwwroot/site1/web/a.js,一般就会404了。因为文件是放在site1目录下的。
这时候就需要alias指令了。

1
2
3
location /web/{
alias /home/wwwroot/site1/;
}

访问 http://demo.com/web/a.js的时候,nginx会去查找/home/wwwroot/site1/a.js

nginx反向代理websocket支持跨域

今天在调试远程websocket的时候发现控制台提示跨域错误,看到浏览器Network中方向响应头没有跨域方面的数据。

nginx做websocket反向代理挺简单的

1
2
3
4
5
6
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_pass http://socket服务器地址;

nginx反向代理websocket

nginx泛域名解析配置

最近一个项目需要承载高并发请求,所以在后端语言上选择了NodeJs,但是nodejs有时候读取不到请求的主机名,所以想到使用nginx+nodejs的方式进行处理。

Nginx 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
upstream io_nodes {
server 127.0.0.1:8081;
}

server {
listen 80;
listen [::]:80;
root /var/www/html;
server_name ~^(?<subdomain>.+).example.com;

location / {
proxy_set_header Host $host;
proxy_set_header X-AppId $subdomain;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://io_nodes;
}
}

重启nginx服务器即可。nginx会将所有的 .example.com 格式的域名反向代理到本机的8081端口,该端口为nodejs监听端口。

免费SSL证书申请

收费SSL证书对于个人来说还是略贵,本文将交大家申请免费的SSL证书。

打开申请网站

startssl.com

点击Sign-up注册

nginx使用goddy ssl证书

随着人们对网络安全要求的提高,越来越多的http站点已经转换为了https站点,保证网站在传输过程中不被监听、恶意篡改,本文将使用goddy提供的ssl证书来升级HTTPS网站。

生成私钥和证书请求文件

终端执行

1
openssl req -new -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr

解决 angularjs html5Mode 404的问题

采用location的html5Mode之后,链接是正常的,但是刷新的时候会404,此时就需要后端服务器配置URL重写了。

nginx 配置

1
2
3
location / {
try_files $uri $uri/ /index.html$is_args$args;
}

这样子就可以将所有不是文件夹且不是文件的请求转发到index.html。

nginx服务器启用SSL访问

HTTP和HTTPS的区别

  1. https协议需要到ca申请证书,一般免费证书很少,需要交费。  
  2. http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。   

nginx url重写和pathinfo配置

nginx近年来的上涨趋势确实挺快的,但是apache作为老牌HTTP服务器,拥有的生态圈是nginx比不上的。一个最简单的例子,URL重写,apache的话利用无所不能的.htaccess文件就可以了。nginx还要改主配置文件。

URL重写配置

主配置文件

1
2
3
4
5
6
location /
{
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php?$1 last;
}
}

if和(中间要有括号,url重写这里就配置完了。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×