AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 936267
Accepted
Rotem
Rotem
Asked: 2018-10-19 22:41:58 +0800 CST2018-10-19 22:41:58 +0800 CST 2018-10-19 22:41:58 +0800 CST

Apache 2.4 上的服务器配置拒绝客户端

  • 772

我们已将多个 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/htmlforOrder和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 的处理程序上?

apache-2.2
  • 2 2 个回答
  • 5343 Views

2 个回答

  • Voted
  1. Best Answer
    Rotem
    2018-10-22T03:46:43+08:002018-10-22T03:46:43+08:00

    最后,我设法解决了这个问题。

    mod_evasive 出于某种原因阻止了一些请求,尽管我们使用与 Apache 2.2 相同的配置,但似乎它处理 X-Forwarded-For 的方式与使用 mod_extract_forwarder 的 Apache 2.2 不同,因此检测到一些我们的异步请求作为 DDOS。

    为了验证这是问题所在,我使用 ab -n 100 -c 5 -p payload.txt -T 'application/x-www-form-urlencoded' https://www.example.com/js/mycallback并立即在我们的错误日志中看到了错误,并且一旦禁用 mod_evasive 那些错误就停止了。

    我们最终完全禁用了 mod_evasive(我们的应用程序前面有带有 DDOS 保护的 WAF,所以这对我们来说并不重要)。

    • 1
  2. Fanfurlio
    2018-10-20T14:01:15+08:002018-10-20T14:01:15+08:00

    还不能发表评论,但是您没有使用 php-fpm,而是 mod_php,因为您的两个虚拟主机中都缺少处理程序,而且我认为 Apache 不会乐于在没有处理程序的情况下启用 HTTP2 支持。

    <FilesMatch "\.php$">
        <If "-f %{REQUEST_FILENAME}">
            SetHandler "proxy:unix:/run/php-fpm/whatever.sock|fcgi://localhost/"
        </If>
    </FilesMatch>
    

    您必须将 /run/php-fpm/whatever.sock 更改为您在 php-fpm 池中设置的 sock 文件,或者使用正确的端口将 localhost/ 部分更改为 localhost:port/ (同样,在php-fpm 池)

    • 0

相关问题

  • Apache Django Mod_Wsgi - 自动重新加载应用程序

  • Apache:对多个虚拟主机使用相同的目录指令

  • Apache 上的子域不工作 - 找不到服务器

  • PHP 作为 CGI 还是 Apache 模块?

  • 避免将某些丢失的文件记录到 Apache2 错误日志中

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve