标签 Nginx 下的文章

借助 Nginx 搭建带简单认证的直播推流服务器,实现多平台同步直播

原理

使用 nginx-rtmp-module 接收 rtmp 流,然后同时推送到多个直播平台,同时使用 lua-nginx-module 来做简单的身份验证。

安装必须的 nginx 模块

debian 9 用户可以直接使用 apt 安装,需启用 stretch-backports 源:

sudo apt install libnginx-mod-rtmp libnginx-mod-http-lua -t stretch-backports

nginx 配置

Gist: nginx.conf

# file: nginx.conf
# date: 2018-10-13
# license: GPLv3 https://www.gnu.org/licenses/gpl-3.0.txt
# author: nanpuyue <[email protected]> https://blog.nanpuyue.com

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 768;
}

rtmp {
    server{
        listen 1935;
        chunk_size 10240;

        application live {
            live on;
            record off;
            on_publish http://127.0.0.1:2080/auth;
            push rtmp://live.twitch.tv/app/xxxxxxxxxx;
            push rtmp://a.rtmp.youtube.com/xxxxxxxxxx;
        }
    }
}  

http {
    server {
        listen 127.0.0.1:2080;
        location /auth {
            rewrite_by_lua '
                ngx.req.read_body()
                local name = ngx.req.get_post_args().name
                if (name == "xxxxxxxxxx") then
                    ngx.status = 200
                    ngx.say("OK")
                    ngx.exit(200)
                else
                    ngx.status = 403
                    ngx.say("Forbidden")
                    ngx.exit(403)
                end
            ';
        }
    }
}

- 阅读剩余部分 -

HAProxy 做 TCP 反代获取客户端真实 IP

大约半年前,因为一些奇怪的原因,需要给博客添加 HAProxy 做基于 TCP 的反代,配置倒也简单,但是遇到一个很麻烦的问题,就是服务端无法获取到客户端的真实 IP 了,所有访问都有一个共同的来源:127.0.0.1,简直可怕。

当初解决这个问题也花了点时间,Google 了好几圈总算给解决了,分享一下解决方案。

全局配置就不贴了,关键配置如下:

frontend ft_ssl_vip
  bind <公网 IP>:443
  mode tcp

  timeout client 5m

  tcp-request inspect-delay 5s
  tcp-request content accept if { req_ssl_hello_type 1 }

  use_backend bk_ssl_nanpuyue_com if { req.ssl_sni -i nanpuyue.com }
  use_backend bk_ssl_nanpuyue_com if { req.ssl_sni -m end .nanpuyue.com }
  default_backend bk_ssl_nanpuyue_com

# nanpuyue.com
backend bk_ssl_nanpuyue_com
  mode tcp
  server http 127.0.0.1:2066 send-proxy

frontend ft_ssl_nanpuyue_com
  mode http
  bind 127.0.0.1:2066 ssl crt /path/nanpuyue_com.pem accept-proxy
  option forwardfor
  reqadd X-Forwarded-Proto:\ https
  default_backend bk_http_nanpuyue_com

backend bk_http_nanpuyue_com
  mode http
  server http 127.0.0.1:80
  server https 127.0.0.1:443 ssl verify none

- 阅读剩余部分 -