ubuntu

Ubuntu LNMP中Nginx如何配置缓存

小樊
44
2025-06-17 03:15:01
栏目: 智能运维

在Ubuntu LNMP(Linux, Nginx, MySQL, PHP)环境中配置Nginx缓存可以显著提高网站性能。以下是详细的步骤和示例配置,帮助你设置Nginx的缓存功能。

1. 安装必要的软件包

首先,确保你的系统已经安装了Nginx和PHP-FPM。如果尚未安装,可以使用以下命令进行安装:

sudo apt update
sudo apt install nginx php-fpm

2. 配置PHP-FPM(可选)

确保PHP-FPM配置正确,以便Nginx能够正确处理PHP请求。编辑PHP-FPM配置文件:

sudo nano /etc/php/7.4/fpm/pool.d/www.conf

检查并确保以下行未被注释,并且监听地址正确(通常是Unix socket):

listen = /run/php/php7.4-fpm.sock

然后重启PHP-FPM服务:

sudo systemctl restart php7.4-fpm

3. 配置Nginx服务器块

编辑Nginx的服务器块配置文件。通常位于/etc/nginx/sites-available/目录下。例如,编辑默认站点:

sudo nano /etc/nginx/sites-available/default

3.1 基本配置示例

以下是一个基本的Nginx配置示例,包含缓存设置:

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

    root /var/www/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    # PHP-FPM 配置
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # 静态文件缓存
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }

    # 缓存动态内容
    location ~* \.(php)$ {
        fastcgi_cache my_cache;
        fastcgi_cache_valid 200 302 10m;
        fastcgi_cache_valid 404 1m;
        fastcgi_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
        fastcgi_cache_bypass $http_cache_control;
        fastcgi_no_cache $http_cache_control;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param CACHE_KEY "$scheme$request_method$host$request_uri";
    }
}

3.2 详细说明

4. 创建缓存目录并设置权限

Nginx需要一个目录来存储缓存文件。创建并设置适当的权限:

sudo mkdir -p /var/cache/nginx
sudo chown -R www-data:www-data /var/cache/nginx

5. 测试Nginx配置

在重新加载Nginx之前,测试配置文件是否有语法错误:

sudo nginx -t

如果一切正常,你应该会看到类似以下的输出:

nginx: configuration file /etc/nginx/nginx.conf test is successful

6. 重新加载Nginx服务

应用新的配置:

sudo systemctl reload nginx

7. 验证缓存是否生效

访问你的网站,并使用浏览器的开发者工具(通常按F12)查看网络请求。检查静态文件是否有Cache-Control头,并且响应头中包含X-Cache-Status,例如HIT表示缓存命中。

8. 进一步优化(可选)

8.1 使用第三方模块

Nginx的官方缓存模块功能有限,你可以考虑使用第三方模块如ngx_cache_purge来清除缓存,或者使用ngx_http_sub_module进行内容替换。

安装ngx_cache_purge

  1. 下载模块:

    git clone https://github.com/arut/nginx-cache-purge.git
    
  2. 编译并安装:

    cd nginx-cache-purge
    sudo apt install libpcre3 libpcre3-dev zlib1g-dev make gcc
    sudo ./configure
    sudo make
    sudo make install
    
  3. 在Nginx配置中添加模块:

    编辑Nginx配置文件,添加以下内容:

    server {
        # ... 其他配置 ...
    
        location ~ /purge(/.*) {
            allow 127.0.0.1;
            deny all;
            fastcgi_pass unix:/run/php/php7.4-fpm.sock;
            fastcgi_param SCRIPT_FILENAME $document_root/purge.php;
            fastcgi_param PURGE $1;
        }
    
        location ~ \.php$ {
            # ... 缓存配置 ...
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param CACHE_KEY "$scheme$request_method$host$request_uri";
        }
    }
    
  4. 创建purge.php脚本:

    <?php
    if (isset($_GET['purge'])) {
        $file = __DIR__ . $_GET['purge'];
        if (file_exists($file)) {
            @unlink($file);
            echo "Purged: " . $file;
        } else {
            echo "File not found.";
        }
    } else {
        echo "No purge parameter.";
    }
    ?>
    
  5. 重新加载Nginx:

    sudo systemctl reload nginx
    

现在,你可以通过访问http://your_domain.com/purge/path/to/file来清除特定文件的缓存。

8.2 调整缓存参数

根据你的具体需求,调整缓存时间、缓存键等参数。例如,可以基于URL参数、Cookie等进行缓存控制。

8.3 使用Varnish(高级)

对于更高性能和更复杂的缓存需求,可以考虑使用Varnish作为反向代理缓存服务器,与Nginx结合使用。

总结

通过以上步骤,你可以在Ubuntu LNMP环境中成功配置Nginx缓存,提升网站的响应速度和用户体验。根据实际需求,进一步优化和扩展缓存策略,以达到最佳性能。

0
看了该问题的人还看了