# nginx+swoole

> 在此之前建议知道nginx与PHP的通讯原理

## 一、nginx快速安装

首先安装必要的库（nginx 中gzip模块需要 zlib 库，rewrite模块需要 pcre 库，ssl 功能需要openssl库）

```
$ yum install -y zlib zlib-devel pcre pcre-devel openssl openssl-devel
$ yum install nginx
```

### 二、nginx+swoole高效处理

Swoole用作HttpServer虽然性能已经足够强大，但是还是不能直接替代传统的Web服务器比如Nginx。**Swoole的强大之处只在于处理PHP逻辑的能力上**。因此，当我们需要开发Web服务的时候，最合适的方法就是结合使用Nginx和Swoole，从而取代fpm。**静态文件还是交给nginx处理，php请求由swoole处理**。

我们可以对客户端请求做一个判定。如果请求了一个实际存在的文件，那么就通过Nginx直接访问文件；如果不存在，那就把这个请求代理给Swoole的HttpServer，然后在Swoole层做路由处理和PHP文件解析。这样，配置文件可以这样编写：

nginx配置：

```
server {
    listen  80;
    root  www;
    location / {
        if (!-e $request_filename){
            proxy_pass http://127.0.0.1:9501;
        }
    }
}
```

9501就是swoole服务器监听的地址。root设置为静态文件的目录。当请求静态文件是由Nginx直接处理，当请求的文件不存在时，发送给Swoole服务器，来进行处理。根据情况来进行nginx的配置

## 资料

[PHP和Nginx的通信方式](https://blog.csdn.net/u013474436/article/details/47977093)

[nginx和php-fpm 是使用 tcp socket 还是 unix socket ？](https://www.cnblogs.com/creazylinux/p/7723245.html)

[Nginx与PHP交互过程 + Nginx与PHP通信的两种方式](https://blog.csdn.net/wuhuagu_wuhuaguo/article/details/83032578)

[nginx php-fpm 分别安装在不同的机器（理解nginx和php-fpm)](https://blog.csdn.net/chenee543216/article/details/49472573)

> 提示：
>
> 两种通信方式：unix socket 和 tcp socket
>
> 反向代理proxy\_pass时:走的是http协议
