# 使用 Caddy 处理 WordPress

- Link: https://www.ixiqin.com/2025/01/04/use-add-handle-wordpress/
- Published: 2025-01-04T10:44:33+08:00
- Author: 白宦成

文章目录

 [Toggle](https://www.ixiqin.com/2025/01/04/use-add-handle-wordpress/#)

 * [安装 Caddy](https://www.ixiqin.com/2025/01/04/use-add-handle-wordpress/#%e5%ae%89%e8%a3%85_caddy)
 * [安装 PHP](https://www.ixiqin.com/2025/01/04/use-add-handle-wordpress/#%e5%ae%89%e8%a3%85_php)
 * [配置 Caddy](https://www.ixiqin.com/2025/01/04/use-add-handle-wordpress/#%e9%85%8d%e7%bd%ae_caddy)
 * [其他配置](https://www.ixiqin.com/2025/01/04/use-add-handle-wordpress/#%e5%85%b6%e4%bb%96%e9%85%8d%e7%bd%ae)
    - [对静态文件提供单独的 404 返回](https://www.ixiqin.com/2025/01/04/use-add-handle-wordpress/#%e5%af%b9%e9%9d%99%e6%80%81%e6%96%87%e4%bb%b6%e6%8f%90%e4%be%9b%e5%8d%95%e7%8b%ac%e7%9a%84_404_%e8%bf%94%e5%9b%9e)
    - [配置缓存头](https://www.ixiqin.com/2025/01/04/use-add-handle-wordpress/#%e9%85%8d%e7%bd%ae%e7%bc%93%e5%ad%98%e5%a4%b4)

在用了很久的 Docker 托管 WordPress 后， 近期我把 Blog 迁移到了腾讯云的香港轻量云
主机上，以获得更快的访问体验。在这次迁移后，出于 Hack 方便的目的，我将 Nginx 替换
成了 Caddy。你目前访问的站点便是一个基于 Caddy 托管的 WordPress 站点。

## 安装 Caddy

安装 [Caddy](https://caddyserver.com/docs/install) 的过程不需要太过赘述，遵循 [Caddy 官方安装文档](https://caddyserver.com/docs/install)
当中的指南安装即可。

## 安装 PHP

完成了 Caddy 的安装后，则是安装 PHP，这里我使用的是 [ondrej](https://launchpad.net/~ondrej)
维护的仓库

    ```bash
    sudo add-apt-repository ppa:ondrej/php
    sudo apt update
    Code language: Bash (bash)
    ```

执行上述命令安装 PPA 仓库，就可以继续执行 `apt install php` 来安装 php & 对应的版本。
此外，记得安装相关的依赖包

    ```bash
    apt-get install php-fpm php-mysql php-curl php-gd php-mbstring php-common php-xml php-xmlrpc -y
    Code language: Bash (bash)
    ```

## 配置 Caddy

完成安装后，就可以正常来配置 Caddy 。得益于社区的集成和 Caddy 官方的支持，Caddy 
配置 WordPress 的支持非常简单，可以直接使用 [Caddyfile 格式](https://caddyserver.com/docs/caddyfile)
来撰写。

    ```php
    example.ixiqin.com { # 这个配置是给 example.ixiqin.com

        root * /data/caddy/example.ixiqin.com # 我的网站文件都放在 /data/caddy/xxx 下，/data 是我挂载的数据盘

        log { #日志配置
            output file /var/log/caddy/example.ixiqin.com.log  # 日志路径
            format console # 日志格式
        }

        request_body { # 请求体大小
            max_size 20MB # 最大 20MB
        }

        encode zstd gzip # 支持 gzip 和 zstd 压缩
        file_server # 直接提供静态文件（比如图片啥的）
        php_fastcgi unix//run/php/php-fpm.sock # 使用 php_fastcgi 调用 php-fpm 来处理动态 php 文件。
    }
    Code language: PHP (php)
    ```

只需要这样的配置，你就可以完成一个最基础的 WordPress 的站点的配置。

## 其他配置

### 对静态文件提供单独的 404 返回

按照上面的配置，其实所有的请求都会转发给 php-fpm 来处理，从而造成额外的 PHP 资源
浪费。因此，可以在配置当中加入如下代码，来让 Caddy 直接返回，从而避免对 PHP 性能
的浪费。

    ```javascript
    @static_404 {  
      path_regexp \.(jpg|jpeg|png|webp|gif|avif|ico|svg|css|js|gz|eot|ttf|otf|woff|woff2|pdf)$  
      not file  
    }  

    respond @static_404 "Not Found" 404 {  
      close  
    }

    Code language: JavaScript (javascript)
    ```

### 配置缓存头

除了静态文件的 404 处理，你还可以在 Caddy 当中配置静态文件的缓存，从而让浏览器更多
的应用缓存，减少服务器的流量，提升加载速度。

    ```javascript
    @static {  
      path_regexp \.(jpg|jpeg|png|webp|gif|avif|ico|svg|css|js|gz|eot|ttf|otf|woff|woff2|pdf)$  
    }  
    header @static Cache-Control "max-age=31536000,public,immutable"

    Code language: JavaScript (javascript)
    ```
