我在运行 Apache Httpd 的服务器上托管了一些网站。每个网站都有自己的域或子域和虚拟主机。因此,我不需要默认的文档根目录。是否有可能禁用DocumentRoot
的/etc/httpd/conf/httpd.conf
?
通常有两种在 Apache 上处理东西的可能性:
使用htaccess文件对文件夹进行一一配置
完全放弃htaccess并将所有规则放入httpd.conf
htaccess 的使用是一个加载时间问题。我想知道,htaccess 的使用在加载时间方面有多昂贵?有任何测试吗?
是否可以将用户重定向到文件file too big
页面
当 POST 请求大小超过指定限制时?
我知道 max-request-size 选项,但它只提供不能重载的静态页面。
我正在考虑创建一个重写规则,它需要
来自请求正文的内容大小作为输入并重定向到错误页面
更新
现在我们使用 nginx 作为前端。有什么新建议吗?
我想 301 将所有 example.org 重定向到 www.example.org。下面的例子就是这样做的,但是它有很多噪音,因此很难维护并且容易出错:
<VirtualHost 192.0.2.123:80>
ServerName example.org
RedirectPermanent / http://www.example.org
</VirtualHost>
<VirtualHost 192.0.2.123:80>
ServerName www.example.org
DocumentRoot /usr/local/www/example
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
您是否碰巧知道上面的整个内容是否有一些更短的版本?
像这样的伪配置:
<VirtualHost 192.0.2.123:80>
ServerName www.example.org
ServerAlias example.org
# Redirect-Every-ServerAlias-To-ServerName
DocumentRoot /usr/local/www/example
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
这样我就只需要提供应该重定向到的每个子域ServerAlias
?
我最初发布在webmasters.stackexchange.com 上,但被告知我会在这里得到更好的接待。
在过去的几天里,我一直在遭受(可能是无意的)DDOS 攻击。我从一个标识为“Mozilla/4.0(兼容;ICS)”的代理那里收到了很多请求,apache 吃掉了所有可用内存。
因此,我想阻止此用户代理伴随的所有请求,因此我尝试在 httpd.conf 中执行此操作:
SetEnvIfNoCase User-Agent "Mozilla/4.0 (compatible; ICS)" bad_user
Deny from env=bad_user
Run Code Online (Sandbox Code Playgroud)
但是当我重新启动 apache 时,它抱怨在deny
这里使用。不必将它包装在一个location
或directory
块中,这意味着我必须为每个站点添加一个新块,有什么办法可以拒绝访问整个服务器?
更新:我得到的错误
- 重新启动 Web 服务器 apache2
/etc/apache2/httpd.conf 第 4 行出现语法错误:这里不允许拒绝 [失败]
我有 2 个 LAMP Web 服务器,它们经常用完交换空间(请参阅附加的顶部屏幕截图)。
Apache的设置如下:
<IfModule prefork.c> 启动服务器 64 最小备用服务器 64 最大备用服务器 128 服务器限制 256 第 256 章 MaxRequestsPerChild 4096 </IfModule>
PHP 的资源限制是:
最大执行时间 = 30 最大输入时间 = 30 内存限制 = 80M
我是这样的服务器管理员的新手(我是一名开发人员);我可以调整什么来防止交换?
我在我的新开发机器 (mac) 上安装并运行了 Apache 2.2.29 (unix)。我正在尝试为 API 项目设置 CORS 标头 - 我已经做过很多次了。
该项目的 htaccess 文件如下所示:
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "POST, GET, PUT, OPTIONS, PATCH, DELETE"
Header set Access-Control-Allow-Headers "X-Accept-Charset,X-Accept,Content-Type"
ServerSignature Off
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /cms/public
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/(favicon\.ico|apple-touch-icon.*\.png)$ [NC]
RewriteRule (.+) index.php?p=$1 [QSA,L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
并且 headers 模块已加载到我的 conf 中:
LoadModule headers_module libexec/mod_headers.so
Run Code Online (Sandbox Code Playgroud)
模块文件存在于 apache conf 中显示的位置,并且加载正常:
dan$ httpd -M
Loaded Modules:
core_module (static)
mpm_event_module (static)
http_module …
Run Code Online (Sandbox Code Playgroud) 我希望 Apache 侦听特定接口上的本地链路 ipv6 地址。我的 httpd.conf 中有以下行:
Listen [fe80::a00:16ff:fe89:420f]:80
Run Code Online (Sandbox Code Playgroud)
它基于此处的 Apache 文档:https : //httpd.apache.org/docs/2.4/bind.html “IPv6 地址必须括在方括号中”
我的操作系统/Apache版本详情如下:
$ httpd -v
Server version: Apache/2.4.18 (Unix)
Server built: Dec 14 2015 08:05:54
$ uname -rv
4.3.3-3-ARCH #1 SMP PREEMPT Wed Jan 20 08:12:23 CET 2016
Run Code Online (Sandbox Code Playgroud)
使用显示的结果journalctl -e
是:
(22)Invalid argument: AH00072: make_sock: could not bind to address [fe80.....
IPv6 正在工作,因为我有 sshd 和 dnsmasq 监听。我曾尝试向地址附加两个不同的范围 ID 后缀。您可以使用的接口ID3
或名字net1
作为既是scopeidping6
和sshd
。
$ ip addr | grep -Po …
Run Code Online (Sandbox Code Playgroud) 是否可以在 Apache 2.4 上配置一个包罗万象的(默认)HTTPS Vhost?我目前有 4 个域,并且一个 HTTP 捕获所有域,但是一旦我尝试添加任何类型的配置,我的其他虚拟主机就会中断。这是我的配置的样子:
<VirtualHost _default_:80>
# Default catch-all virtual host.
Redirect permanent / https://example-prod.com
</VirtualHost>
<VirtualHost _default_:80>
ServerName example-prod.com
ServerName www.example-prod.com
Include conf/sites/example-prod.com.conf
</VirtualHost>
<VirtualHost _default_:80>
ServerName example-dev.com
Include conf/sites/example-dev.com.conf
</VirtualHost>
#
# This is the virtual host I'm missing and that I cannot get to work.
#
#<VirtualHost _default_:443>
# # Default catch-all virtual host.
# ServerAlias *
# SSLEngine on
# SSLCertificateFile "C:/prod/hosts.crt.pem"
# SSLCertificateKeyFile "C:/prod/hosts.key.pem"
# SSLCertificateChainFile "C:/prod/intermediate.crt.pem"
# Redirect permanent …
Run Code Online (Sandbox Code Playgroud) 全部。我有语法问题。我尝试过遵循其他来源,但它不起作用。
我已成功创建无条件 HTTP 到 HTTPS 重定向。访问http://www.robjvargas.com,以 HTTPS 结束。那里一切都很好。
但现在我的证书似乎需要HTTP。它使用 Let's Encrypt,因此需要每 90 天更新一次。重定向生效后,试运行会失败。关闭重定向后,试运行就会成功。
所以我尝试放入 RewriteCond 来免除证书续订流量:
# HTTP to HTTPS redirect
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{Request_URI} !^./acme-challenge/*
RewriteRule (.*) https://www.robjvargas.com$1 [R,L]
Run Code Online (Sandbox Code Playgroud)
只是它不起作用。我想我错过了一些值得我一看到就拍额头的东西,但我没有看到它。通过上面的代码,HTTP 到 HTTPS 的重定向似乎仍然是通用的。因此,显然 RewriteCond 是不正确的。URI 之前的句点可能是错误的,但我已经尝试过使用和不使用它。
我还将完整的 URI 放入 RewriteCond 中,但这也没有免除它。
快到了。我没有收到任何错误。它只是永远不会满足预期的条件。
我缺少什么?
httpd.conf ×10
apache-2.2 ×6
.htaccess ×3
apache-2.4 ×3
httpd ×2
arch-linux ×1
cors ×1
documentroot ×1
http ×1
http-headers ×1
ipv6 ×1
lighttpd ×1
link-local ×1
mod-alias ×1
mod-rewrite ×1
nginx ×1
performance ×1
redirect ×1
security ×1
swap ×1
upload ×1
useragent ×1
virtualhost ×1