nginx代理配置文件 linux 一样原理自己看
windows-nginx1.27.4.zip


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen 80;
        server_name voice.xxxx.com;
        # 12080节点 HTTP 代理 12080   集群 http://voice.xxxx.com/api12080 API 前缀
        location /api12080 {
            proxy_pass http://localhost:12080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        } 
    }
    server {
        listen 8080;
        server_name voice.xxxx.com; 
        # 12080节点 HTTP 音频文件代理  集群 http://voice.xxxx.com/file12080   前缀
        location /file12080 {
             root C:\\AdoreMixV8.0.1PackControl\\AdoreMixV8.0.1PackControl\\etc\\docroot ;
             index index.html;
        } 
    } 

    server {
        listen 443 ssl;
        server_name voice.xxxx.com;

        # SSL 配置 这种写法是证书和 本conf 文件放在一个目录
        ssl_certificate     voice.xxx.com.pem; 
        ssl_certificate_key voice.xxx.com.key;
        ssl_protocols       TLSv1.2 TLSv1.3;
        ssl_ciphers         HIGH:!aNULL:!MD5;

        # WebSocket 代理 (WSS)  WebSocket 服务端口 给互联网 浏览器喊话使用 不同的交接点可以使用不同的前缀区分
        location /ws12080 {
            proxy_pass http://127.0.0.1:6082;     
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
        # https 代理    可选
        location / {
            proxy_pass http://localhost:12080;     # HTTP 服务端口
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }



}


webSocketDemo点我下载

server
{
    listen 80;
    listen 443 ssl http2 ;
    server_name hwywss.xxx.com;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/hwywss.xxx.com;
    #CERT-APPLY-CHECK--START
    # 用于SSL证书申请时的文件验证相关配置 -- 请勿删除
    include /www/server/panel/vhost/nginx/well-known/hwywss.xxx.com.conf;
    #CERT-APPLY-CHECK--END
    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    ssl_certificate    /www/server/panel/vhost/cert/hwywss.xxx.com/fullchain.pem;
    ssl_certificate_key    /www/server/panel/vhost/cert/hwywss.xxx.com/privkey.pem;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    add_header Strict-Transport-Security "max-age=31536000";
    error_page 497  https://$host$request_uri;

    # WebSocket 代理配置


    location /wss23020 {
        proxy_pass http://localhost:23020;  # 后端 WS 服务器
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_read_timeout 3600s;
    }

    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END

    #PHP-INFO-START  PHP引用配置,可以注释或修改
    include enable-php-00.conf;
    #PHP-INFO-END

    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include /www/server/panel/vhost/rewrite/hwywss.zjjklj.com.conf;
    #REWRITE-END

    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }

    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }

    #禁止在证书验证目录放入敏感文件
    if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {
        return 403;
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
        error_log /dev/null;
        access_log /dev/null;
    }

    location ~ .*\.(js|css)?$
    {
        expires      12h;
        error_log /dev/null;
        access_log /dev/null;
    }
    access_log  /www/wwwlogs/hwywss.xxx.com.log;
    error_log  /www/wwwlogs/hwywss.xxx.com.error.log;
}

wss 代理 ws的 重点就这么一点

局域网浏览器喊话或者是别的不是必须wss的场景的可以不用配置wss代理

实例代码在对应 etc/docroot/luyin2/index.html

<!DOCTYPE html>
<html>

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Html5网页JavaScript实时音频通信</title>
  <meta charset="utf-8" />
  <link href="favicon.ico" rel="shortcut icon">
</head>

<body>
  <h1>Html5网页JavaScript实时音频通信</h1>
  <button onclick="funStart(this);" id="btnStart" disabled>录制</button>
  <button onclick="funStop(this);" id="btnStop" disabled>停止</button>
  <button onclick="funOntime(this);" id="btnOntime" disabled>开启广播</button>
  <button onclick="funOnStop(this);" id="btnOnStop" disabled>关闭广播</button>
  <button onclick="funMp3(this);" id="btnMp3" disabled>歌曲播放</button>
  <button onclick="funUpload(this);" id="btnUpload" disabled>上传</button>
  <h4>调试信息:</h4>
  <div id="recordingslist"></div>

  <script src="js/recordmp3.js"></script>
  <script src="js/jquery-1.10.1.min.js"></script>

  <script>
    var ws;  //实时喊话 句柄声明
    // 采集播放器的初始化
    var recorder = new MP3Recorder({
      debug: true,
      funOk: function () {
        btnStart.disabled = false;
        btnOntime.disabled = false;
        btnMp3.disabled = false;
        btnOnStop.disabled = false;
        console.log('初始化成功');
      },
      funCancel: function (msg) {
        console.log(msg);
        recorder = null;
      }
    });

    //喊话按钮按下  开启广播 入口函数 是  function funOntime()
    function funOntime () {
      console.log('开启广播...');
      ws = new WebSocket('wss://hwywss.xxx.com/wss23020');
      // ws = new WebSocket('ws://局域网IP:23020');
      //这里填写Avadore 服务器的IP地址 和 ws 端口号 对应的 websocket 服务信息  
      //喊话按钮 按下;创建 一个 websocket  连接句柄 延时1秒是给连接提供了一个时间。
      setTimeout("test()", "1000");
    }
    //1秒钟后 开始 进入test 发送 数据包头

    function funOnStop () {
      recorder.Onstop();  // 停止采播器工作
      console.log('关闭广播...');
      ws.send('CLOSE');
      ws.close();//断开传输数据链
    }


    function test () {

      var josnobj =
      {
        Meport: 6002,  //跨服端口号
        Umagic: 89686, //快服句柄随机数
        userid: 6, //userid 用户id
        token: "aece294b871a9d28ab36df14fff371370f3a008c", //用户token
        Umask: "84d3def493da487b96ed12744ad44c7a", //快服填随机字符串
        plevel: 9,//该用户内播放等级1~9 9是最高优先级 
        ulevel: 600,//用户间等级 1~600   不同用户间同时推流一个音响 等级高的会切掉等级低的
        snlist: ["7f31ad8327b02b6cad62ab23c1e67252"], //被播放的设备序列号
        cmd: "PLAYLIST",//固定值
        Meip: "127.0.0.1" // 您的节点服务器IP地址 
      }
      //websocket 发送的内容是 格式 【 Json内容长度 +\n + JSON内容 】
      console.log(josnobj);
      var uu = JSON.stringify(josnobj).length + "\n" + JSON.stringify(josnobj);
      // console.log("uu:");
      // console.log(uu);
      //这里的 userinfo 是为了展示 发送数据的原始信息才这样书写的。
      //正常的程序里面应该是业务逻辑生成json对象数据结构然后用函数转成字符串计算长度进行数据拼写
      ws.send(uu);//这里 发送的是 信息头;
      recorder.Ontime(2);
      //这里是启动 实时喊话业务数据通信。如果喊话停止 直接断开ws连接就可以了。ws.close();
    }


  </script>
</body>

</html>
作者:oxiaom  创建时间:2025-04-08 11:25
最后编辑:oxiaom  更新时间:2025-04-10 10:53