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
最后编辑:oxiaom 更新时间:2025-04-10 10:53