Swoole 小技巧 –––– Swoole取X-Forwarded-For HTTP 请求头

在真正使用Swoole(模块, 非 swooleFramework)开发过项目后, 你会发现有不少的坑. 笔者碰到的第一个就是swoole_http_request支持不完整.

swoole_http_request哪些方面的坑呢?

  1. 不支持 X-Forwarded-For, 这在 Nginx 场景下很致命, 应用取不到客户端真实 IP 还不允许 NGINX 追加字段.

  2. 不支持 HTTP 304 的 If-None-Match 和 If-Modified-Since.

  3. 不支持 HTTP 206 的 Range

  4. ...

解决方案

我的方案比较另类, 也不一定适合全部场景, 使用者自己斟酌.

location / {
set $x_cookie '; x_forwarded_for=';
set $x_cookie $x_cookie$remote_addr;
proxy_set_header Cookie $http_cookie$a_cookie;
proxy_pass http://swoole_server;
}
然后在 swoole 的 onRequest 里

$http->on('request', function(swoole_http_request $req, swoole_http_response $res) use($http) {
$req->server['remote_addr'] = $req->cookie['x_forwarded_for'];
$req->server['remote_addr'] = trim(end(explode(',', $req->server['remote_addr'])));
...
});

关键字:php, swoole, #req-# x_cookie


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部