workerman 实现的websocket 反向代理 nginx 亲测
php workerman 实现websocket WEB消息推送 非常简单,不过默认都是带端口的,例如前段端口:2120 后端:2626 (注意端口可以在start.php根据需要自行修改)我们现在为了安全,在nginx里面做个反向代理,省去外网端口访问,方便在线网页程序中调用:
亲测可用
1,后端调用api向任意用户推送
后端 nginx反向代理片段: /wss_admin/ 可以根据自己需要任意修改
location /wss_admin/
{
proxy_pass http://127.0.0.1:2626;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
}
后端 php部分:
<?php
// 指明给谁推送,为空表示向所有在线用户推送
$to_uid = "";
// 推送的url地址,使用自己的真实地址
$push_api_url = "https://www.yizuotu.net/wss_admin/";
$post_data = array(
"type" => "publish",
"content" => "这个是推送的测试数据",
"to" => $to_uid,
);
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, $push_api_url );
curl_setopt ( $ch, CURLOPT_POST, 1 );
curl_setopt ( $ch, CURLOPT_HEADER, 0 );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $post_data );
curl_setopt ($ch, CURLOPT_HTTPHEADER, array("Expect:"));
$return = curl_exec ( $ch );
curl_close ( $ch );
var_export($return);
2,前端 nginx反向代理片段: /socket.io 不要该成其他的,改了麻烦多或者不成功
location /socket.io
{
proxy_pass http://127.0.0.1:2120;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
}
前端 js代码,请改成自己的真实域名:
<script src='http://yizuotu.net/socket.io/1.3.7/socket.io.js'></script>
<script>
var socket = io('https://www.yizuotu.net');
// uid可以是自己网站的用户id,以便针对uid推送以及统计在线人数
uid = 123;
// socket连接后以uid登录
socket.on('connect', function(){
socket.emit('login', uid);
});
// 后端推送来消息时
socket.on('new_msg', function(msg){
console.log("收到消息:"+msg);
});
// 后端推送来在线数据时
socket.on('update_online_count', function(online_stat){
console.log(online_stat);
});
</script>
这样操作一番,web防火墙和iptables 只需要打开 端口 80 和 443 ,不用额外开放 php workerman 的运行端口,是不是很开心
欢迎访问yizuotu.net测试 一次登录 一次注销 所有页面同时更新状态
图片放大缩小多种特效,返回处理结果