【openspeedy使用方法】从零开始:安装、配置与优化指南

在当今高速发展的互联网世界中,网站的加载速度是用户体验和内容触达效率的关键因素。OpenSpeedy作为一款高性能的Web加速模块,正是为解决这一痛点而生。它能够显著提升您网站的响应速度,优化资源传输,从而为您的访问者提供更流畅、更迅捷的体验。本文将围绕OpenSpeedy的实际使用方法,从基础概念到安装配置,再到高级优化,为您提供一份详尽的指南。

I. OpenSpeedy是什么?它能为您做什么?

1. OpenSpeedy的本质

OpenSpeedy并非一个独立的Web服务器,而是一个强大的Nginx模块。它深度集成于Nginx工作流中,作为Nginx的扩展功能,提供了多项网页性能优化特性。其核心目标是减少页面加载时间,通过智能化处理静态资源、压缩数据流、优化HTTP协议等手段,将内容更快地交付给用户。

2. OpenSpeedy的核心功能

OpenSpeedy能够为您带来一系列立竿见影的性能提升:

  • 高效缓存机制: 它能够缓存静态文件(如图片、CSS、JavaScript文件)和动态页面的部分内容,减少对后端服务器的请求,从而大幅降低服务器负载并加快响应速度。
  • 数据压缩优化: 支持Brotli和Gzip两种先进的压缩算法,能够显著减小传输数据的大小,尤其对于文本类内容(HTML、CSS、JS)效果显著。更小的数据量意味着更快的下载速度。
  • HTTP/2支持: 作为Nginx模块,它自然继承并优化了对HTTP/2协议的支持,通过多路复用、头部压缩等特性,进一步提升页面加载效率。
  • 资源合并与精简(部分能力): 尽管其核心是缓存与压缩,但通过与Nginx的配置配合,可以实现对CSS和JavaScript文件的合理管理,减少HTTP请求数量。
  • 智能资源优化: 能够处理一些常见的浏览器优化策略,例如正确的HTTP缓存头设置,强制浏览器缓存特定资源。

II. 为什么选择OpenSpeedy?它解决了哪些痛点?

1. 提升用户体验与留存率

网站加载速度是用户对网站第一印象的关键。根据多项研究,页面加载时间每增加一秒,用户跳出率就会显著上升。OpenSpeedy通过加速网站响应,直接提升了用户体验,减少了用户因等待而流失的可能性,从而有助于提高用户粘性。

2. 降低服务器成本与带宽消耗

通过有效的缓存机制,OpenSpeedy拦截了大量对后端服务器的重复请求,这意味着后端服务器的工作量大大减少,从而可以承载更多的并发访问,甚至在一定程度上降低对服务器硬件配置的要求。同时,数据压缩减少了传输的数据量,直接降低了带宽成本,尤其对于流量较大的网站而言,经济效益显著。

3. 增强网站在性能评测中的表现

无论是Google PageSpeed Insights、Lighthouse还是GTmetrix等性能评测工具,网站加载速度和优化程度都是重要的评分指标。OpenSpeedy提供的缓存、压缩等功能,直接对应了这些工具推荐的多项优化建议,有助于您的网站在这些评测中获得更高的分数。

4. 易于集成与维护

作为Nginx模块,OpenSpeedy的安装和配置相对直接,它利用了Nginx本身强大且成熟的生态系统。一旦配置得当,其日常维护成本较低,且能稳定地提供性能加速服务。

III. 从何处获取OpenSpeedy?环境要求与准备

1. OpenSpeedy的获取渠道

OpenSpeedy是开源项目,其源代码主要托管在GitHub上。您可以从其官方GitHub仓库获取最新的稳定版本。

例如,通常可以通过git clone或者直接下载.zip文件的方式获取源代码。

2. 运行环境要求

OpenSpeedy主要运行在基于Linux操作系统的服务器上,并需要Nginx作为其宿主Web服务器。常见的Linux发行版如CentOS、Ubuntu、Debian等均可支持。

最低系统要求:

  • 操作系统: 推荐使用CentOS 7+, Ubuntu 18.04+ 或 Debian 9+。
  • Nginx版本: 推荐使用Nginx 1.10.x 或更高版本。OpenSpeedy模块需要与Nginx的源代码一同编译。
  • 编译工具链: 需要安装GCC/G++编译器、Make工具等。
  • 必要的开发库:
    • PCRE库: 用于Nginx的正则表达式支持。
    • Zlib库: 用于Nginx的Gzip压缩功能。
    • OpenSSL库: 用于Nginx的SSL/TLS支持(如果您的网站使用HTTPS)。
    • 其他依赖: 可能还需要libunwind, libjudy等库,具体取决于OpenSpeedy的版本和您的编译环境。
  • 内存与CPU: 作为Web加速模块,OpenSpeedy本身对资源消耗不高,但Nginx及其承载的流量会消耗资源。建议至少1GB内存,1核CPU,以确保稳定运行。对于高流量网站,需要根据实际情况扩展资源。

3. 准备工作:安装依赖包

在开始安装OpenSpeedy之前,您需要确保系统上已安装所有必要的编译工具和开发库。

对于CentOS/RHEL系统:

sudo yum update
sudo yum install -y gcc gcc-c++ make zlib-devel pcre-devel openssl-devel libunwind-devel judy-devel

对于Ubuntu/Debian系统:

sudo apt update
sudo apt install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev libunwind-dev libjudy-dev

这些命令将安装Nginx和OpenSpeedy模块编译所需的标准工具和库。

IV. OpenSpeedy的“多少”:资源与成本考量

1. 成本:零授权费用

OpenSpeedy是一个开源且免费的Nginx模块。这意味着您不需要支付任何授权费用来使用它,这对于个人开发者、中小型企业乃至大型公司来说,都大大降低了网站运营的软件成本。您只需承担服务器租用、带宽等基础设施费用。

2. 资源消耗:高效与节约

尽管OpenSpeedy在后台执行着复杂的缓存、压缩等操作,但其设计理念强调效率和资源节约。

  • 内存消耗: 主要取决于缓存的大小。如果您设置了较大的缓存区来存储网页内容和静态文件,那么对应的内存占用也会增加。然而,这部分内存的开销通常是值得的,因为它减少了后端数据库和应用服务器的压力。OpenSpeedy会智能管理缓存,按需淘汰不常用的内容。
  • CPU消耗: 主要发生在数据压缩(如Brotli或Gzip)和缓存命中判断时。Brotli压缩比Gzip更高,但在压缩时可能会消耗更多的CPU资源,解压则相对较快。不过,这些计算通常是短暂且高效的,其带来的网络传输时间节约远大于CPU的额外开销。对于大多数网站而言,OpenSpeedy带来的CPU负载增加微乎其微,甚至在缓存命中率高时,会因为减少后端处理而降低整体CPU使用。
  • 磁盘I/O: 当Nginx将缓存内容写入磁盘或从磁盘读取缓存时,会产生磁盘I/O。合理配置缓存路径和缓存大小,以及使用SSD硬盘,可以有效降低I/O瓶颈。

总体而言,OpenSpeedy旨在通过优化数据传输来节省整体资源,尤其是在带宽和后端服务器负载方面。它是一个“投资小,回报大”的性能优化工具。

V. 如何安装OpenSpeedy?一步步指南

安装OpenSpeedy需要将其作为模块与Nginx一同编译。这里以常见的Nginx环境为例,提供详细的安装步骤。请确保您已完成前述的“环境要求与准备”工作。

1. 下载Nginx和OpenSpeedy源码

首先,选择一个合适的目录存放源码,例如/usr/local/src/

cd /usr/local/src/
# 下载Nginx稳定版源码 (请根据您需求选择版本,这里以 1.24.0 为例)
wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -zxvf nginx-1.24.0.tar.gz

# 下载OpenSpeedy源码 (最新版本请查阅GitHub仓库)
# 推荐使用git clone获取,以便后续更新
git clone https://github.com/openspeedy/openspeedy.git
# 或者直接下载zip并解压
# wget https://github.com/openspeedy/openspeedy/archive/refs/heads/master.zip -O openspeedy-master.zip
# unzip openspeedy-master.zip

假设您将Nginx源码解压到/usr/local/src/nginx-1.24.0,OpenSpeedy源码克隆或解压到/usr/local/src/openspeedy

2. 编译Nginx并集成OpenSpeedy模块

进入Nginx源码目录,执行./configure命令,并添加--add-module参数指向OpenSpeedy源码目录。

cd /usr/local/src/nginx-1.24.0

# 常见Nginx配置参数,请根据您的需求调整
# --prefix: Nginx安装路径
# --with-http_ssl_module: 启用SSL模块
# --with-http_gzip_static_module: 启用gzip静态文件服务
# --add-module: 添加OpenSpeedy模块的路径

./configure \
    --prefix=/etc/nginx \
    --sbin-path=/usr/sbin/nginx \
    --modules-path=/usr/lib/nginx/modules \
    --conf-path=/etc/nginx/nginx.conf \
    --error-log-path=/var/log/nginx/error.log \
    --http-log-path=/var/log/nginx/access.log \
    --pid-path=/var/run/nginx.pid \
    --lock-path=/var/run/nginx.lock \
    --http-client-body-temp-path=/var/cache/nginx/client_temp \
    --http-proxy-temp-path=/var/cache/nginx/proxy_temp \
    --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
    --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
    --http-scgi-temp-path=/var/cache/nginx/scgi_temp \
    --user=nginx \
    --group=nginx \
    --with-compat \
    --with-file-aio \
    --with-threads \
    --with-http_addition_module \
    --with-http_auth_request_module \
    --with-http_dav_module \
    --with-http_flv_module \
    --with-http_gunzip_module \
    --with-http_gzip_static_module \
    --with-http_realip_module \
    --with-http_slice_module \
    --with-http_stub_status_module \
    --with-http_v2_module \
    --with-mail \
    --with-mail_ssl_module \
    --with-stream \
    --with-stream_realip_module \
    --with-stream_ssl_module \
    --with-stream_ssl_preread_module \
    --with-pcre \
    --with-pcre-jit \
    --with-zlib=/usr/local/src/zlib-1.2.13 \ # 如果您手动下载zlib, 否则系统自带即可
    --with-openssl=/usr/local/src/openssl-1.1.1u \ # 如果您手动下载openssl, 否则系统自带即可
    --add-module=/usr/local/src/openspeedy

重要提示:

  • 请将/usr/local/src/openspeedy替换为您的OpenSpeedy源码实际路径。
  • --prefix参数定义了Nginx的安装目录。
  • 如果之前Nginx用户/组不存在,请先创建:sudo groupadd nginx && sudo useradd -s /sbin/nologin -g nginx nginx
  • --with-zlib--with-openssl参数是可选的,如果您想使用系统自带的库,可以省略,但通常建议手动编译这些库以确保兼容性和功能。

配置成功后,执行编译和安装命令:

make
sudo make install

如果之前有旧的Nginx安装,make install可能会覆盖现有文件,请注意备份。

3. 验证安装

安装完成后,您可以通过以下命令检查Nginx是否成功集成了OpenSpeedy模块:

nginx -V

在输出的配置参数中,您应该能看到--add-module=/usr/local/src/openspeedy(或者您指定的路径)这一行,这表明模块已成功编译到Nginx中。

4. 创建Nginx缓存目录

OpenSpeedy需要Nginx的缓存目录来存储优化后的文件。请创建并设置正确的权限:

sudo mkdir -p /var/cache/nginx/openspeedy
sudo chown -R nginx:nginx /var/cache/nginx/openspeedy

这里的nginx:nginx是您Nginx运行的用户和组,请确保与Nginx配置中的user指令一致。

VI. 怎么配置OpenSpeedy?核心指令与优化

OpenSpeedy的配置主要通过Nginx的配置文件(通常是/etc/nginx/nginx.conf或其conf.d目录下的虚拟主机配置文件)进行。以下是一些核心的配置指令。

1. 全局配置(http块)

在Nginx的http块中,定义OpenSpeedy的缓存区域。

http {
    # ...其他Nginx配置...

    # 定义OpenSpeedy缓存区域
    # path: 缓存存储路径
    # levels: 缓存目录的层级结构(例如 1:2 会创建 /path/to/cache/a/b 这样的目录)
    # keys_zone: 存储缓存键的共享内存区域名称和大小 (例如 my_cache:100m)
    # inactive: 缓存项在多长时间内不被访问就从缓存中删除
    # max_size: 缓存的最大大小
    # use_temp_path: 开启临时路径,避免在写缓存时阻塞请求
    openspeedy_cache_path /var/cache/nginx/openspeedy levels=1:2 keys_zone=openspeedy_zone:100m inactive=7d max_size=10g use_temp_path=on;

    # ...其他Nginx配置...
}
  • /var/cache/nginx/openspeedy: 这是您之前创建的缓存目录。
  • levels=1:2: 定义了两级子目录结构,例如/var/cache/nginx/openspeedy/a/bc。这有助于在单个目录下文件过多时提高文件系统性能。
  • keys_zone=openspeedy_zone:100m: 创建了一个名为openspeedy_zone的100MB共享内存区域,用于存储缓存键和元数据。这个区域的大小决定了可以存储多少个缓存项的元信息。
  • inactive=7d: 缓存文件在7天内没有被访问,将被删除。
  • max_size=10g: 缓存文件的最大总大小为10GB。当达到此限制时,Nginx将根据LRU(最近最少使用)原则删除旧的缓存文件。
  • use_temp_path=on: 启用临时缓存路径,确保缓存写入的原子性,避免在文件写入过程中影响请求。

2. 服务器/Location块配置

在您的serverlocation块中启用OpenSpeedy模块,并定义缓存策略。

server {
    listen 80;
    server_name example.com www.example.com;

    # 可以将所有HTTP请求重定向到HTTPS
    # return 301 https://$host$request_uri;

    # ... 其他Nginx配置 ...

    location / {
        # 启用OpenSpeedy代理缓存,并指定使用的缓存区域
        openspeedy_pass http://backend_servers; # 您的后端服务器地址或upstream名称
        openspeedy_cache openspeedy_zone; # 使用前面定义的缓存区域

        # 定义哪些HTTP状态码的响应可以被缓存以及缓存时间
        # 例如:200, 301, 302 缓存1小时;404 缓存1分钟;任何其他状态码不缓存
        openspeedy_cache_valid 200 301 302 1h;
        openspeedy_cache_valid 404 1m;
        openspeedy_cache_valid any 0; # 默认不缓存其他状态码

        # 针对不同类型的资源设置浏览器缓存过期时间 (Expires/Cache-Control)
        expires max; # 默认所有文件在浏览器端永久缓存,直到手动清除

        # 可以针对特定文件类型设置不同的过期时间
        location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|webp)$ {
            openspeedy_cache openspeedy_zone;
            openspeedy_cache_valid 200 7d; # 静态资源缓存7天
            expires 7d; # 浏览器缓存7天
        }

        # 强制重新验证,而不是直接从缓存返回,用于需要频繁更新但又希望利用缓存的情况
        # openspeedy_cache_revalidate on;

        # 允许某些请求不经过缓存,直接回源
        # openspeedy_cache_bypass $cookie_nocache $http_pragma;
        # openspeedy_no_cache $cookie_nocache $http_pragma;

        # 添加或修改响应头,例如Cache-Control
        # add_header X-OpenSpeedy-Cache-Status $openspeedy_cache_status;

        # 启用Brotli压缩 (如果您的Nginx支持Brotli模块,需要额外编译)
        brotli on;
        brotli_comp_level 5; # 压缩级别 1-11,越高压缩率越高但CPU消耗越大
        brotli_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml;

        # 启用Gzip压缩 (如果Brotli不可用或兼容性需求)
        gzip on;
        gzip_comp_level 5;
        gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml;
        gzip_min_length 256; # 小于此大小的文件不压缩
        gzip_proxied any; # 允许代理请求的响应也进行压缩
        gzip_vary on; # 添加Vary: Accept-Encoding 头,通知代理服务器根据客户端的Accept-Encoding能力缓存不同版本
    }

    # 如果有PHP-FPM或其他应用服务
    location ~ \.php$ {
        openspeedy_pass http://127.0.0.1:9000; # 例如,指向PHP-FPM
        openspeedy_cache openspeedy_zone;
        openspeedy_cache_valid 200 1h; # 动态页面缓存1小时
        expires epoch; # 动态内容不设置浏览器强缓存,每次都回源验证

        # 对于动态内容,通常需要排除某些不应缓存的请求(如登录后的用户页面)
        # openspeedy_cache_bypass $cookie_sessionid; # 排除有sessionid cookie的请求
        # openspeedy_no_cache $cookie_sessionid;
    }

    # ... 其他location块 ...
}

关键指令详解:

  • openspeedy_pass http://backend_servers;:这是核心指令,它定义了OpenSpeedy作为反向代理,将请求转发到哪个后端服务器或upstream集群。所有经过这个location的请求都会尝试通过OpenSpeedy进行缓存处理。
  • openspeedy_cache openspeedy_zone;:激活当前location的缓存功能,并指定使用哪个在http块中定义的缓存区域。
  • openspeedy_cache_valid [status codes] time;:定义了不同HTTP状态码的响应在缓存中存储的时间。例如200 1h表示HTTP 200 OK的响应将缓存1小时。any 0表示默认不缓存其他状态码。
  • expires time;:这是Nginx的标准指令,用于设置响应头中的ExpiresCache-Control,控制浏览器端的缓存行为。max表示尽量长时间缓存。
  • brotli on;gzip on;:分别启用Brotli和Gzip压缩。强烈推荐同时配置两者,并确保您的Nginx编译时包含了Brotli模块(通常需要额外下载并--add-module)。Brotli在现代浏览器中的支持度越来越高,并且通常比Gzip提供更好的压缩率。
  • brotli_comp_level / gzip_comp_level:压缩级别,数字越大压缩率越高,但CPU消耗越大。通常5-6是一个较好的平衡点。
  • gzip_min_length:设置最小压缩文件大小,小于此大小的文件不进行压缩,避免对小文件进行压缩带来的额外CPU开销。
  • add_header X-OpenSpeedy-Cache-Status $openspeedy_cache_status;:这是一个非常有用的调试指令,它会在响应头中添加一个自定义字段,显示当前请求是否命中缓存。$openspeedy_cache_status变量会显示HIT(命中)、MISS(未命中)、EXPIRED(过期)、STALE(过时)、UPDATING(正在更新)等状态。

3. 启动或重启Nginx

配置完成后,务必检查Nginx配置文件的语法是否正确,然后重启Nginx服务使其生效。

sudo nginx -t # 检查配置语法
sudo systemctl restart nginx # 重启Nginx服务 (适用于使用systemd的系统)
# 或者
sudo service nginx restart # (适用于较旧的init系统)

VII. 常见问题排查与性能监控

1. 常见问题排查

  • 缓存不生效:
    • 检查Nginx错误日志(/var/log/nginx/error.log),看是否有关于OpenSpeedy的错误信息。
    • 确认openspeedy_cache_path指向的目录是否存在且权限正确(Nginx用户可读写)。
    • 检查openspeedy_cache指令是否正确应用于目标location块。
    • 确认请求是否命中了缓存策略(查看X-OpenSpeedy-Cache-Status响应头)。如果显示MISS,可能是缓存过期、请求头中有Cache-Control: no-cachePragma: no-cache,或者URL中带有查询字符串导致缓存键不同。
    • 确保后端服务器返回了可缓存的响应头(如没有Cache-Control: no-storeno-cache)。
  • 压缩不生效:
    • 检查brotli on;gzip on;是否已配置。
    • 确认请求的Accept-Encoding头是否包含brgzip
    • 检查brotli_typesgzip_types中是否包含您期望压缩的文件类型。
    • 检查文件大小是否超过gzip_min_length的限制。
    • 确认Nginx是否正确编译了Brotli模块(如果使用)。
  • Nginx启动失败:
    • 最常见的原因是配置文件语法错误,使用nginx -t进行检查。
    • 端口冲突,确保80/443端口没有被其他服务占用。
    • 权限问题,Nginx用户无法读取配置文件或写入日志/缓存目录。

2. 性能监控

  • Nginx状态模块: 启用Nginx的stub_status_module可以监控Nginx的基本连接数、处理请求数等信息,有助于判断Nginx的整体负载。
    location /nginx_status {
        stub_status on;
        allow 127.0.0.1; # 只允许本机访问
        deny all;
    }

    然后访问http://your_domain/nginx_status

  • 日志分析: 定期查看Nginx的访问日志(access.log)和错误日志(error.log),可以发现异常请求、缓存未命中情况、错误等。
  • 系统资源监控: 使用tophtopfree -h等命令监控服务器的CPU、内存和磁盘I/O使用情况,确保OpenSpeedy在优化性能的同时,没有导致资源瓶颈。
  • 外部性能测试工具: 使用PageSpeed Insights、GTmetrix、WebPageTest等工具定期测试网站性能,对比优化前后的效果,根据报告进一步调整OpenSpeedy配置。

VIII. OpenSpeedy的进阶使用与维护

1. 缓存清理(Cache Purging)

在某些情况下,您可能需要手动清除OpenSpeedy的缓存,例如:

  • 网站内容更新后,希望立即向用户提供最新版本。
  • 发现缓存内容有误。

OpenSpeedy本身没有提供直接的HTTP接口进行精确的URL缓存清除。常见的做法是:

  • 删除缓存目录: 最直接但粗暴的方式是删除openspeedy_cache_path指定的缓存目录内容,Nginx会重建。
    sudo rm -rf /var/cache/nginx/openspeedy/*

    执行后,需要sudo systemctl reload nginx使Nginx感知到缓存目录的变化。

  • 基于URL的清除(需要第三方模块或脚本): 如果需要更精细的控制,可以考虑使用ngx_cache_purge等第三方Nginx模块,或者通过发送特定请求到Nginx来触发清除逻辑(例如,配置一个特殊的location,当收到特定URL和请求头时,执行删除对应缓存文件的操作)。
  • 通过控制缓存生命周期: 调整openspeedy_cache_validinactive参数,让缓存自动过期。

2. 版本更新与维护

当OpenSpeedy或Nginx发布新版本时,为了获取最新的性能优化、安全补丁和功能,您需要进行更新。由于OpenSpeedy是Nginx的一个模块,更新通常意味着重新编译Nginx。

更新步骤:

  1. 备份当前的Nginx配置文件(/etc/nginx/nginx.conf以及conf.d目录下的文件)。
  2. 下载最新版本的Nginx和OpenSpeedy源码。
  3. 重复安装步骤中的编译和安装过程。
  4. 平滑升级Nginx:为了避免服务中断,可以先启动新版本的Nginx(通常在编译时指定不同的安装路径或使用Nginx的平滑升级特性),然后发送信号给旧的Nginx进程进行切换。
    # 编译安装到新路径,例如 /usr/local/nginx-new
    # 启动新Nginx
    /usr/local/nginx-new/sbin/nginx
    
    # 如果旧Nginx在运行,发送USR2信号让旧Nginx开启一个新进程加载新配置
    # kill -USR2 旧Nginx主进程ID
    # 检查新Nginx是否正常运行
    # kill -QUIT 旧Nginx老进程ID (当新Nginx确认无误后,关闭旧进程)

    或者,如果您编译安装在同一路径,可以直接sudo systemctl restart nginx,但会有短暂服务中断。

  5. 测试网站功能和性能。

3. 与内容分发网络(CDN)的集成

OpenSpeedy与CDN是互补的。OpenSpeedy在源站层提供加速,而CDN则将内容分发到离用户更近的边缘节点。

集成方式:
将OpenSpeedy部署在您的源站Nginx上。然后,配置您的CDN服务,使其回源到您的Nginx(即OpenSpeedy处理过的地址)。这样,CDN可以缓存OpenSpeedy优化后的内容,进一步减少回源请求,并利用CDN的全球分发能力,最大限度地提升用户访问速度。

总结

OpenSpeedy作为Nginx生态系统中的一员,为网站性能优化提供了一个强大且灵活的解决方案。通过本文详尽的安装、配置和优化指南,您应该能够掌握OpenSpeedy的核心使用方法,并将其应用于您的Web服务中。记住,性能优化是一个持续的过程,除了OpenSpeedy,结合合理的后端架构、数据库优化和前端最佳实践,您的网站将能达到卓越的用户体验。持续监控性能指标,根据实际流量和用户行为调整配置,是确保网站始终保持高速响应的关键。

openspeedy使用方法