You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Ubuntu下Nginx/1.24.0+PHP的403错误及动态静态文件配置

问题

在Ubuntu 24.04服务器上使用Nginx 1.24.0和PHP 8.3时,访问PHP文件出现403 Forbidden错误。已检查文档根目录权限、确认index.php文件存在,且php8.3-fpm服务正常运行,但问题仍未解决。站点Nginx配置如下:

server {
    listen 80;
    server_name alertik.io;

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

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }

    error_log /var/log/nginx/alertik.io_error.log;
    access_log /var/log/nginx/alertik.io_access.log;
}

补充信息:代码库通过PHP脚本每分钟生成index.html及各类JavaScript等静态文件,这些文件有过期时间,通过cron任务自动更新。请问是否需要在Nginx的root配置块中明确定义这些动态生成的静态文件路径?以及处理频繁更新静态文件的Nginx配置推荐方案是什么?

解决方案

一、排查403 Forbidden错误的额外方向

  1. 验证Nginx进程权限
    Nginx默认以www-data用户运行,需确保以下路径对www-data具备对应权限:

    • /var/www/html/app目录:需有读+执行权限(执行chmod 755 /var/www/html/app)
    • index.php文件:需有读权限(执行chmod 644 /var/www/html/app/index.php)
    • 父目录/var/www/html:需有执行权限(确保Nginx能遍历到子目录)
  2. 修复FastCGI配置冲突
    你的PHP location块中同时包含了snippets/fastcgi-php.conf和自定义的fastcgi_param SCRIPT_FILENAME,而snippets/fastcgi-php.conf本身已经定义了该参数,重复定义可能导致解析异常。建议修改为二选一:
    要么保留默认配置:

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        include fastcgi_params;
    }
    

    要么自定义完整参数(移除snippets/fastcgi-php.conf):

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_index index.php;
    }
    
  3. 检查SELinux状态(若启用)
    若服务器开启了SELinux,可能会阻止Nginx访问文件。执行getenforce查看状态,若返回Enforcing,可执行以下命令临时放行(永久生效需加-P参数):

    setsebool -P httpd_can_network_connect on
    restorecon -R /var/www/html/app
    
  4. 验证PHP-FPM池用户配置
    检查/etc/php/8.3/fpm/pool.d/www.conf中的user和group配置,确保与Nginx运行用户一致(默认应为www-data)。若使用了其他用户,需同步调整文件权限。

二、动态生成静态文件的配置建议

  1. 无需额外定义静态文件路径
    只要静态文件生成在root指定的/var/www/html/app目录(或子目录)下,Nginx会自动通过location /规则匹配处理,无需单独配置路径。

  2. 频繁更新静态文件的优化配置

    • 设置短缓存有效期:针对静态文件配置短时间的缓存,既减少重复请求,又保证文件更新后能快速生效:
      location ~* \.(html|js|css)$ {
          expires 1m;
          add_header Cache-Control "public, max-age=60";
      }
      
    • 禁用Nginx文件缓存:若出现文件更新后Nginx仍返回旧内容的情况,可关闭Nginx的文件缓存:
      open_file_cache off;
      
    • 确保生成文件的权限正确:执行cron任务的用户需保证生成的静态文件对www-data有读权限,可在生成脚本中添加chmod 644 [文件路径],或把执行用户加入www-data组:
      usermod -aG www-data [cron用户名]
      
    • 避免浏览器强制缓存:若需要实时获取最新文件,可给静态文件添加版本参数(如app.js?v=123),或配置Cache-Control: no-cache让浏览器每次验证文件有效性。

内容的提问来源于stack exchange,提问作者yoony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 15:24:51