linux

怎样用Nginx配置实现动静分离

小樊
50
2025-10-31 21:46:26
栏目: 编程语言

动静分离是一种常见的网站优化策略,通过将静态资源(如图片、CSS、JavaScript文件)和动态内容(如PHP、Java等处理生成的页面)分开处理,可以提高网站的性能和响应速度。Nginx 是一个非常强大的反向代理服务器,可以很好地实现动静分离。以下是一个基本的配置示例:

  1. 安装 Nginx: 如果你还没有安装 Nginx,可以参考官方文档进行安装。例如,在 Ubuntu 上可以使用以下命令安装:

    sudo apt update
    sudo apt install nginx
    
  2. 配置 Nginx: 编辑 Nginx 的配置文件,通常位于 /etc/nginx/nginx.conf/etc/nginx/sites-available/default。以下是一个示例配置:

    server {
        listen 80;
        server_name example.com;
    
        # 静态资源配置
        location /static/ {
            alias /var/www/static/;
            expires 30d;
            add_header Cache-Control "public";
        }
    
        # 动态资源配置
        location / {
            proxy_pass http://backend_server;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
    

    在这个配置中:

    • location /static/ 块用于处理静态资源请求。alias 指令将 /static/ URL 映射到文件系统中的 /var/www/static/ 目录。expiresadd_header 指令用于设置缓存头,以便浏览器可以缓存这些静态资源。
    • location / 块用于处理动态内容请求。proxy_pass 指令将请求转发到后端服务器(例如,一个运行 PHP 的服务器)。
  3. 重启 Nginx: 保存配置文件后,重启 Nginx 以应用更改:

    sudo systemctl restart nginx
    

通过这种方式,Nginx 可以高效地处理静态资源请求,同时将动态内容请求转发到后端服务器,从而实现动静分离。

进一步优化

以下是一个更复杂的示例,展示了如何使用 try_filesfastcgi_cache

server {
    listen 80;
    server_name example.com;

    # 静态资源配置
    location /static/ {
        alias /var/www/static/;
        expires 30d;
        add_header Cache-Control "public";
    }

    # 动态资源配置
    location / {
        try_files $uri $uri/ @backend;
    }

    location @backend {
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_cache my_cache;
        fastcgi_cache_valid 200 302 10m;
        fastcgi_cache_valid 404 1m;
    }
}

在这个示例中,try_files 指令首先检查请求的文件是否存在,如果不存在则将请求转发到 @backend 位置块,该位置块使用 FastCGI 将请求传递给 PHP-FPM 处理,并启用缓存以提高性能。

0
看了该问题的人还看了