您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
基於workerman實現ws获取真實客戶端ip(反向代理環境下)
发布时间:2022-01-14 23:00:38编辑:雪饮阅读()
昨天不是配置了wss獲取反向代理提供者所接收的訪問者的真實ip,那麽對於ws是否也可以呢?答案是肯定的。
nginx:
server
{
listen 80;
server_name www.cece1.com www.cece220807.com;
index index.html index.htm default.php default.htm default.html index.php;
root /www/wwwroot/www.cece1.com;
# listen 443 ssl;
#ssl_certificate /www/wwwroot/workerman/ssl.crt;
#ssl_certificate_key /www/wwwroot/workerman/ssl.key;
#ssl_session_timeout 5m;
#ssl_session_cache shared:SSL:50m;
#ssl_protocols SSLv3 SSLv2 TLSv1 TLSv1.1 TLSv1.2;
#ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
#SSL-END
#ERROR-PAGE-START 错误页配置,可以注释、删除或修改
#error_page 404 /404.html;
#error_page 502 /502.html;
#ERROR-PAGE-END
#PHP-INFO-START PHP引用配置,可以注释或修改
include enable-php-56.conf;
#PHP-INFO-END
#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
include /www/server/panel/vhost/rewrite/www.cece1.com.conf;
#REWRITE-END
location / {
add_header Access-Control-Allow-Origin $http_origin;
add_header Access-Control-Allow-Credentials: true;
add_header Access-Control-Allow-Headers 'DNT,token,app-token,Authorization,Accept,
Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,
If-Modified-Since,Cache-Control,Content-Type,Range';
if ($request_method = 'OPTIONS') {
return 204;
}
}
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
#一键申请SSL证书验证目录相关设置
location ~ \.well-known{
allow all;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
set $allow_origin "www.cece1.com";
add_header Access-Control-Allow-Headers Content-Type,api_key,Authorization;
add_header Access-Control-Allow-Origin *;
#proxy_pass http://www.cece1.com/;
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
error_log /dev/null;
access_log /dev/null;
}
location /ws
{
proxy_pass http://127.0.0.1:8282;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
# 这部分是利用http头透传真实客户端ip
proxy_set_header X-Real-IP $remote_addr;
}
access_log /www/wwwlogs/www.cece1.com.log;
error_log /www/wwwlogs/www.cece1.com.error.log;
}
脚本实现:
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('websocket://0.0.0.0:8282');
// 客户端练上来时,即完成TCP三次握手后的回调
$worker->onConnect = function(TcpConnection $connection) {
$connection->onWebSocketConnect = function(TcpConnection $connection){
//非wss也可以,无论wss还是ws都是需要在onWebSocketConnect时候才能获取,不能直接在onConnect这里获取
$connection->realIP = $_SERVER['HTTP_X_REAL_IP'];
};
};
$worker->onMessage = function(TcpConnection $connection, $data)
{
//這裏糾正下,這裏實際上獲取不到,如果昨天那個文章中有這個内容也請忽略之
$connection->send($connection->realIP);
};
Worker::runAll();
ws客户端:
var ws=new WebSocket("ws://www.cece220807.com/ws");
ws.onopen=function(evt){
console.log("connect success");
ws.send("hi!");
};
ws.onmessage=function(evt){
console.log("onMessage",evt);
};
ws.onclose=function(evt){
console.log("onClose",evt);
};
ws.onerror=function(evt){
console.log("onError",evt);
};
关键字词:workerman,ws,反向代理
相关文章
- workerman系列之nginx配置反向代理于workerman時候實
- workerman系列之tp5(thinkphp5)日志结合workerman使用
- workerman常见问题-php的几种回调写法-类的静态方法作
- workerman常见问题-php的几种回调写法-类方法作为回调
- workerman常见问题-php的几种回调写法-普通函数回调
- workerman作爲客戶端系列之socket5即s5代理搭建基於ce
- workerman作爲客戶端系列之http代理搭建
- workerman作爲客戶端-作爲ws或wss客戶端-做為ws客戶端
- workerman創建https服務(普通請求轉https請求,基於寶塔
- workerman創建https服務