我们已将多个 Drupal 7 / 8 站点迁移到一个新堆栈,其中主要更改是用 Apache 2.4 和 PHP-FPM 替换 Apache 2.2 和 FastCGI。
我们在多个站点上出现以下错误:
[Fri Oct 19 09:06:26.333135 2018] [:error] [pid 6415:tid 140550690748160] [client 93.xxx.xxx.xxx:0] 客户端被服务器配置拒绝:/var/www/html/example.com /js,引用者:https ://www.example.com/some-page
/js 路径来自JS Drupal 模块,但它出现在我们自己的自定义 Drupal 路由(D7 上的 hook_menu)定义的其他路径上。
这是虚拟主机文件:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
ServerAdmin [email protected]
UseCanonicalName Off
DocumentRoot /var/www/html/example.com
ErrorLog /var/www/logs/example.com.error.log
LogLevel warn
CustomLog /var/www/logs/example.com.log combined
<Directory /var/www/html/example.com>
Options -Indexes +FollowSymLinks +ExecCGI
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
Protocols h2 http/1.1
ServerName example.com
ServerAlias www.example.com
ServerAdmin [email protected]
UseCanonicalName Off
DocumentRoot /var/www/html/example.com
ErrorLog /var/www/logs/example.com.error.log
LogLevel warn
CustomLog /var/www/logs/example.com.log combined
<Directory /var/www/html/example.com>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
SSLCertificateFile /etc/letsencrypt/live/www.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
我尝试了 grep/etc/
和/var/www/html
forOrder
和Allow
/ Deny
(Apache 2.2 旧语法),但我找不到任何重要的东西,只有一件事来自 Apache 的默认配置文件,并且它位于一个不会在我们的案例中运行的 if 语句中)
我们还添加Options -MultiViews
到我们的 Drupal .htaccess 以修复 Apache 2.4 的另一个问题,不确定它是否相关。
请注意,错误只是偶尔出现,并不总是出现,这使得调试变得更加困难。
任何帮助将不胜感激。
更新
如果它在某种程度上相关,我们正在使用 mod_mpm_event。
Apache 的 php.conf 文件:
AddType text/html .php
DirectoryIndex index.php
<IfModule mod_php5.c>
<Proxy "unix:/var/run/php-fpm/default.sock|fcgi://php-fpm">
ProxySet disablereuse=off
</Proxy>
<FilesMatch \.php$>
SetHandler proxy:fcgi://php-fpm
</FilesMatch>
</IfModule>
.htaccess 文件- 我们使用常规的Drupal 7 .htaccess 文件,并进行了以下修改:JS 模块重写规则,高于任何其他重写规则(第 62 行)
RewriteCond %{REQUEST_URI} ^\/([a-z]{2}\/)?js\/.*
RewriteRule ^(.*)$ js.php?q=$1 [L,QSA]
RewriteCond %{QUERY_STRING} (^|&)q=((\/)?[a-z]{2})?(\/)?js\/.*
RewriteRule .* js.php [L]
除此之外,我们已经添加Options -MultiViews
了原始问题中已经提到的内容。
我不认为 JS 模块及其重定向是问题,因为我们也有其他由核心和默认 .htaccess 文件处理的自定义 Drupal 菜单路径的问题。
也许问题出在 php-fpm Apache 的处理程序上?