目前PHP项目基本上都是http_server,nginx 代理转发。这种方式有很大优势:因为swoole是常驻内存处理简单的php和nginx处理静态html差不多。php-fpm是创建-》销毁-》创建的方式,占用更多内存,所以swoole http_server比php-fpm快很多。
<?php
class Http
{
CONST PORT = 8811;
CONST HOST = '0.0.0.0';
CONST ENABLE_STATIC_HANDLER = TRUE;
CONST DOCUMENT_ROOT = '/var/www/weibo/swoole/data';
private $http = null;
public function __construct() {
$this->http = new swoole_http_server(self::HOST, self::PORT);
$this->http->set(
[
'enable_static_handler' => self::ENABLE_STATIC_HANDLER,
'document_root' => self::DOCUMENT_ROOT,
]
);
$this->http->on('request', [$this, 'onRequest']);
$this->http->start();
}
public function onRequest($request, $response) {
var_dump($request->get, $request->post);
$response->header("Content-Type", "text/html; charset=utf-8");
$response->end("<h1>Hello Swoole.#" . rand(1000, 9999) . "</h1>");
}
}
new Http();
- ‘enable_static_handler’=>true,是否允许启动静态处理,如果存在会直接发送文件内容给客户端,不再触发onRequest回调
- ‘document_root’=>’/var/www/weibo/swoole/data’,静态资源根目录
首先开启http服务器
php http.php
没有配置反向代理只能用ip访问
http://127.0.0.1:8811
在nginx.conf中添加反向代理
server {
root /var/www/weibo/swoole/data/;
server_name weibo.felixfan.cn;
listen 8811;
location / {
proxy_http_version 1.1;
proxy_set_header Connection "keep-alive";
proxy_set_header X-Real-IP $remote_addr;
if (!-e $request_filename) {
proxy_pass http://127.0.0.1:8811;
}
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
我是通过http服务器处理的静态资源内容
</body>
</html>
没设置允许静态资源之前,可以看到还是输出我们之前end方法内的字符串
设置静态之后,跳到默认的静态资源目录 。
访问url如:weibo.felixfan.cn:8811会自动定位到 /var/www/weibo/swoole/data/目录下