Nginx默认配置块是否满足基础默认Drupal的部署需求?
你的Nginx配置是否满足基础Drupal核心需求?
咱们直接说结论:目前的两个配置都没法满足基础Drupal核心的使用需求,核心问题在于缺少Drupal必需的URL重写规则、独立应用配置缺失关键的PHP处理逻辑和监听端口,默认配置也没适配Drupal的路由机制。下面具体拆解问题,再给出调整方案:
现有配置的核心问题
1. 默认80端口server的问题
这个配置能处理静态文件和PHP,但完全没适配Drupal的路由逻辑:
location /里的try_files $uri $uri/ =404会让所有动态请求(比如/node/1)直接返回404——Drupal需要把这类请求转发到index.php来处理路由,而不是直接找对应文件。- 没有保护Drupal的敏感文件(比如
settings.php、sites/default/files里的私有文件),存在安全风险。
2. 独立应用server的问题
这个配置连基本的运行条件都不满足:
- 没有指定
listen端口,Nginx根本不知道这个server块对应哪个端口的请求,等于无效配置。 - 缺少PHP处理的location规则,访问
.php文件会直接被下载,无法执行Drupal的PHP代码。 - 同样没有Drupal必需的URL重写规则,动态路由无法工作。
适配基础Drupal核心的调整方案
把独立应用的server块补全,整合所有必需的规则,示例如下:
server { listen 80; listen [::]:80; root ${drt}/${domain}/; server_name ${domain} www.${domain}; # Drupal核心必需的URL重写规则:把非静态文件的请求转发到index.php location / { try_files $uri $uri/ /index.php?$query_string; } # 处理PHP请求,确保指向正确的PHP-FPM sock location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.0-fpm.sock; # 额外:确保PHP文件存在才转发,避免恶意请求 try_files $uri =404; } # 静态资源长期缓存(保留你原来的配置) location ~* \.(jpg|jpeg|png|gif|ico|css|js|ttf|woff|pdf)$ { expires 365d; add_header Cache-Control "public, immutable"; } # 保护Drupal敏感文件,禁止直接访问 location ~ /sites/.*/settings\.php$ { deny all; return 403; } location ~ /sites/.*/files/private/ { deny all; return 403; } }
关键调整说明
- 添加了
listen端口,让Nginx识别这个server块的请求入口。 - 替换了
location /的规则,用/index.php?$query_string把动态请求转发到Drupal的入口文件,这是干净URL工作的核心。 - 补充了PHP处理规则,确保Drupal的PHP代码能被正确执行。
- 新增了敏感文件保护规则,避免核心配置文件和私有文件被直接访问。
- 保留了你原来的静态资源缓存规则,这部分对Drupal的性能优化很有帮助。
这样调整后的配置,就能满足Drupal核心功能的基础需求(包括文章管理、用户管理、内容展示等典型场景)。
内容的提问来源于stack exchange,提问作者user82842
相关产品推荐
相关产品推荐

