Proxy
由于 Swoole Server
對(duì) HTTP
協(xié)議的支持并不完整,建議僅將 EasySwoole
作為后端服務(wù),并且在前端增加 Nginx
或 Apache
作為代理,參照下面的例子添加轉(zhuǎn)發(fā)規(guī)則
Nginx
server {
listen 80;
server_name local.swoole.com;
root /data/wwwroot/;
location / {
proxy_http_version 1.1;
proxy_set_header Connection "keep-alive";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
if (!-f $request_filename) {
proxy_pass http://127.0.0.1:9501;
}
}
}
具體部署時(shí)的 nginx
代理配置,還可參考 Deploy-Nginx 章節(jié)。
代理之后,可通過(guò) $request->getHeaderLine('x-real-ip')
獲取客戶端真實(shí)ip
<?php
// 控制器中獲取客戶端真實(shí)ip的方法
use EasySwoole\EasySwoole\ServerManager;
use EasySwoole\Http\AbstractInterface\Controller;
class Base extends Controller
{
/**
* 獲取用戶的真實(shí)IP
* @param string $headerName 代理服務(wù)器傳遞的請(qǐng)求頭名稱
* @return string|null
*/
protected function clientRealIP(string $headerName = 'x-real-ip'): ?string
{
$server = ServerManager::getInstance()->getSwooleServer();
$client = $server->getClientInfo($this->request()->getSwooleRequest()->fd);
$clientAddress = $client['remote_ip'];
$xri = $this->request()->getHeaderLine($headerName);
$xff = $this->request()->getHeaderLine('x-forwarded-for');
if ($clientAddress === '127.0.0.1') {
if (!empty($xri)) { // 如果有 xri 則判定為前端有 NGINX 等代理
$clientAddress = $xri;
} elseif (!empty($xff)) { // 如果不存在 xri 則繼續(xù)判斷 xff
$clientAddress = $xff;
}
}
return $clientAddress;
}
}
Apache
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
# RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] fcgi 下無(wú)效
RewriteRule ^(.*)$ http://127.0.0.1:9501/$1 [QSA,P,L]
# 請(qǐng)開(kāi)啟 proxy_mod proxy_http_mod request_mod
</IfModule>
其他
-
QQ 交流群
- VIP 群 579434607 (本群需要付費(fèi) 599 元)
- EasySwoole 官方一群 633921431(已滿)
- EasySwoole 官方二群 709134628(已滿)
- EasySwoole 官方三群 932625047(已滿)
- EasySwoole 官方四群 779897753(已滿)
- EasySwoole 官方五群 853946743(已滿)
- EasySwoole 官方六群 524475224(已滿)
- EasySwoole 官方七群 1016674948
-
商業(yè)支持:
- QQ 291323003
- EMAIL admin@fosuss.com
-
作者微信
-
捐贈(zèng) 您的捐贈(zèng)是對(duì)
EasySwoole
項(xiàng)目開(kāi)發(fā)組最大的鼓勵(lì)和支持。我們會(huì)堅(jiān)持開(kāi)發(fā)維護(hù)下去。 您的捐贈(zèng)將被用于:- 持續(xù)和深入地開(kāi)發(fā)
- 文檔和社區(qū)的建設(shè)和維護(hù)
-
EasySwoole
的文檔使用EasySwoole 框架
提供服務(wù),采用MarkDown 格式
和自定義格式編寫,若您在使用過(guò)程中,發(fā)現(xiàn)文檔有需要糾正 / 補(bǔ)充的地方,請(qǐng)fork
項(xiàng)目的文檔倉(cāng)庫(kù),進(jìn)行修改補(bǔ)充,提交Pull Request
并聯(lián)系我們。