TP6开发单页应用 Nginx的一些配置

390 阅读2分钟

当在 ThinkPHP 6 项目中开发单页面应用(SPA)并使用 Nginx 作为服务器时,需要对 Nginx 进行一些配置以确保单页面应用能正常运行,特别是处理好路由和静态资源的访问。以下是详细的配置步骤:

1. 编辑 Nginx 配置文件

通常 Nginx 的虚拟主机配置文件位于 /etc/nginx/sites - available/etc/nginx/conf.d 目录下。找到你项目对应的配置文件,若没有则创建一个新的配置文件,以下是一个示例配置:

server {
    # 监听的端口,一般 HTTP 为 80,HTTPS 为 443
    listen 80;
    # 你的域名或 IP 地址
    server_name your_domain_or_ip;
    # 指定项目 public 目录的路径
    root /path/to/your/tp6_project/public;

    # 设置字符编码
    charset utf - 8;

    # 访问日志路径
    access_log /var/log/nginx/your_project_access.log;
    # 错误日志路径
    error_log /var/log/nginx/your_project_error.log;

    # 处理静态资源的请求
    location ~* .(css|js|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;
    }

    # 处理单页面应用的路由
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # 处理 PHP 请求
    location ~ .php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

2. 配置说明

静态资源处理

location ~* .(css|js|png|jpg|jpeg|gif|ico)$ {
    expires max;
    log_not_found off;
}
  • location ~* .(css|js|png|jpg|jpeg|gif|ico)$:匹配所有的 CSS、JavaScript、图片等静态资源请求。
  • expires max:设置这些静态资源的缓存时间为最大,这样浏览器会在本地缓存这些资源,减少不必要的请求。
  • log_not_found off:关闭找不到文件时的日志记录,避免日志文件过于庞大。

单页面应用路由处理

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
  • 单页面应用通常只有一个 HTML 文件(如 index.html),不同的路由是通过 JavaScript 在客户端进行处理的。
  • try_files $uri $uri/ /index.php?$query_string:首先尝试访问请求的真实文件 $uri,如果不存在则尝试访问对应的目录 $uri/,如果都不存在则将请求重写到 index.php 文件,并带上原有的查询字符串。这样可以确保当用户直接访问某个路由时,Nginx 会将请求转发到 index.php,然后由 ThinkPHP 6 框架进行处理。

PHP 请求处理

location ~ .php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}
  • location ~ .php$:匹配所有的 PHP 文件请求。
  • fastcgi_pass 127.0.0.1:9000:将 PHP 请求转发到本地的 PHP - FPM 进程(监听在 127.0.0.1 的 9000 端口)进行处理。
  • fastcgi_index index.php:指定默认的 PHP 入口文件为 index.php
  • fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name:设置 PHP 脚本的实际路径。
  • include fastcgi_params:包含 Nginx 的 FastCGI 参数配置文件。

3. 重启 Nginx 服务器

配置完成后,需要重启 Nginx 服务器使配置生效:

sudo systemctl restart nginx

4. 注意事项

  • PHP - FPM 配置:确保 PHP - FPM 服务正在运行,并且监听的地址和端口与 Nginx 配置中的 fastcgi_pass 一致。
  • 文件权限:确保 Nginx 有足够的权限访问项目的 public 目录及其子目录和文件。
  • 域名解析:如果使用域名访问,确保域名已经正确解析到服务器的 IP 地址。