我决定将我的 OP 从 Litespeed 更改为 Nginx,因为我阅读了很多关于 Nginx 将花费的低资源的信息。
我正在运行一个有 500 个在线用户的 Wordpress 网站
好的,谢谢你们的帮助:) 我编辑了一些东西。
我也有一些问题:
我必须删除吗?下午之前。设置?我删除了它什么配置重要?我有两个快速 cgi,一个在 /etc/php5/fpm 中,名为 php-fpm.conf ,另一个在 /etc/php5/fpm/pool.d 中,名为 www.conf ?
我一夜之间尝试了新配置,当我醒来时,我已经得到了一个空白页面。最佳:
top - 13:55:27 up 1 day, 19:28, 2 users, load average: 0.18, 0.36, 0.19
Tasks: 84 total, 1 running, 83 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.0%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 3974264k total, 1051360k used, 2922904k free, 162380k buffers
Swap: 3998700k total, 0k used, 3998700k free, 609220k cached
PID …Run Code Online (Sandbox Code Playgroud) 我使用 proxy_fcgi 在 Apache 2.4 上设置了 PHP-FPM,一切正常,但是 4-6 个请求中的每个请求,Apache 都会返回一个空白页面。这发生在我的主站点http://danielhe.com/ 上,但不是子域 vhosts。
这会显示 Apache 的错误日志,[client x] AH01070: Error parsing script headers
最终,有时 Apache segfaults AH00052: child pid 9740 exit signal Segmentation fault (11)
通过多次刷新页面,我可以很容易地重现“错误解析脚本标题”,但是在几次“错误解析脚本标题”之后,段错误会随机发生
更新 我找到了段错误的修复程序,并且 WSOD 显然已自行修复。mod_deflate 有一些问题,但是 Apache 文档中的这个配置修复了它
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpeg|jpg|png)$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
Run Code Online (Sandbox Code Playgroud) 我正在测试使用nginx/php5-fpm, 与代码
<?php
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
// also tested: header("Status: 404 Not Found");
echo $_SERVER["SERVER_PROTOCOL"];
Run Code Online (Sandbox Code Playgroud)
并强制在命令中使用HTTP 1.0curl。
curl -0 -v 'http://www.example.com/test.php'
> GET /test.php HTTP/1.0
< HTTP/1.1 404 Not Found
< Server: nginx
< Date: Sat, 27 Oct 2012 08:51:27 GMT
< Content-Type: text/html
< Connection: close
<
* Closing connection #0
HTTP/1.0
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我已经在请求使用HTTP 1.0,但是 nginx 回复我HTTP 1.1
赏金
@MaximDounin,@MichaelHampton 已经为规范提供了答案,谢谢。我正在为未来的读者扩展这个问题:
问:当客户端请求 HTTP 1.0 时,响应 HTTP 1.1 的优势是什么?谷歌采取的方法不应该更合理,即当客户端请求 1.0 时,用 1.0 …
在我摸不着头脑试图弄清楚为什么我的站点响应如此缓慢即使服务器资源很好之后,我终于检查了 Apache 状态并发现:
78 requests/sec - 0.7 MB/second - 8.5 kB/request
256 requests currently being processed, 0 idle workers
Run Code Online (Sandbox Code Playgroud)
看来我的 apache 连接数已经达到极限了。任何试图访问我的网站的人都会被列入“等待名单”,直到 Apache 再次免费。
看来我有两个选择。
A) 将最大连接数限制提高到 256 以上。虽然根据这篇文章这并不容易:
默认情况下,MaxClients 参数的编译硬限制为 256。然而,这可以通过重新编译 Apache 来更改。一些发行版或托管公司将此限制提高到非常高的值,例如 512 甚至 1024,以应对大负载。
B) 找到占用太多时间的脚本。这对我来说似乎更棘手,因为大多数 apache 进程只是出现然后又消失了。此外,我的网站 PHP 脚本优化得很好……而且,服务器资源也很好:
Server load 2.69 (8 CPUs)
Memory Used 25.33% (2,039,108 of 8,048,804)
Swap Used 1.32% (54,156 of 4,095,992)
Run Code Online (Sandbox Code Playgroud)
我应该选择哪个选项(如果有任何一个),我应该怎么做?
编辑
更多信息:服务器版本:Apache/2.2.23 (Unix) mod_ssl/2.2.23 OpenSSL/1.0.0-fips DAV/2 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635
HTTP 会议:http : //pastebin.com/yBeLt6mP
Parital 请求示例:http …
我想在我的 SL6.4(RHEL 6.4 重建)Web 服务器上划分不同的 PHP 应用程序,以便它们无法访问彼此的数据。SELinux 似乎可以做到这一点,但我不确定细节。我的问题有两个部分:
httpd_unified,并提供独立的httpd_ttrss_*和httpd_opencloud_*环境,平行于套httpd_user_foo和httpd_sys_foo。考虑到我可以使用的应用程序数量,我什至可以在没有新上下文的情况下使用 sys/user 区别。但是我还没有找到很多关于关闭的含义的文档httpd_unified,或者如何设置不同的 HTTP 上下文。特别是对于通过mod_php.我很擅长创建新的 SELinux 策略模块,但需要一些文档来指出我需要什么来使新策略执行以及如何使其与 SELinux 目标策略很好地集成。
如果尝试仅使用 SELinux 进行这种分离是一个失败的原因,并且我需要在不同的上下文中启动单独的 httpds,甚至可能是 LXC 容器,那么这也是一个有用的答案。
这几天Apache失控了,导致MySQL两次崩溃。这一切都始于我迁移了一个 WordPress 网站,该网站还包含一个 phpBB 论坛。
我在服务器管理方面不是很有经验,所以我很难确定导致问题的原因。当我注意到 MySQL 宕机时,我运行 TOP 并看到我的系统负载飙升至 98.00。服务器运行 10 个 V-HOSTS,所有这些都接收到健康的流量,所以我显然看到许多 apache-2 进程正在运行。
高服务器负载持续了 10 分钟,然后它恢复到正常状态。此时我没有看到网络流量激增。
不幸的是,MySQL 错误日志已被禁用(现在已重新启用),因此那里没有任何线索。但我很确定这是因为 Apache 消耗了所有资源,所以 MySQL 进程 ID 被杀死了。
我的问题是:
下次发生这种情况时 - 我如何确定导致系统负载峰值的原因?会不会是一个发疯的 php 脚本?会不会是 DDOS 攻击?
有没有办法在 MySQL 崩溃时自动重新启动?
我现在已经安装了htop. 这可能比top?
这是我的服务器统计信息:
m1.xlarge (8 ECUs, 4 vCPUs, 15 GiB memory, 4 x 420 GiB Storage Capacity)
Ubuntu Server 12.04.3 LTS
Run Code Online (Sandbox Code Playgroud) 我已经使用 local0创建了一个自定义日志(PHP 将日志条目发送到rsyslog)。它使用新的自定义文件 ( /var/log/sea.log)。问题是日志被发送到/var/log/sea.log, /var/log/messages和/var/log/syslog。我如何防止这种情况发生?我只需要将日志发送到/var/log/sea.log.
/etc/rsyslog.conf:
# /etc/rsyslog.conf Configuration file for rsyslog.
#
# For more information see
# /usr/share/doc/rsyslog-doc/html/rsyslog_conf.html
#################
#### MODULES ####
#################
$ModLoad imuxsock # provides support for local system logging
$ModLoad imklog # provides kernel logging support
#$ModLoad immark # provides --MARK-- message capability
# provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514
# provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
###########################
#### …Run Code Online (Sandbox Code Playgroud) 一旦池达到 pm.max_children,Nginx 就会在尝试向 PHP-FPM 发送新请求时开始超时。“最大侦听队列”在 php-status 页面中始终为 0。
以下是 php-fpm 池的示例:
[example]
catch_workers_output = no
; Configure listener
listen = /var/run/php-fpm/example.sock
listen.backlog = 65535
listen.owner = nginx
listen.group = nginx
; Unix user/group of processes
user = nginx
group = nginx
; Choose how the process manager will control the number of child processes.
pm = ondemand
pm.max_children = 10
pm.max_requests = 200
pm.process_idle_timeout = 30s
pm.status_path = /status
; Pass environment variables
env[HOSTNAME] = $HOSTNAME …Run Code Online (Sandbox Code Playgroud) 我在 cronjob 中有以下命令:
*/5 * * * * php /var/www/domain/yii rss/parse
Run Code Online (Sandbox Code Playgroud)
它以错误的字符集输出电子邮件:
Content-Type: text/plain; charset=ANSI_X3.4-1968
Run Code Online (Sandbox Code Playgroud)
但是当我直接在 CLI 中启动该命令并将其输出到日志时:
php /var/www/domain/yii rss/parse > log
Run Code Online (Sandbox Code Playgroud)
我得到了正确的编码 - UTF-8
已经尝试在 /etc/environment 中设置 lang:
LANG=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)
重新启动了 cron,但它仍然通过 CRON 使用 ANSI。有任何想法吗?
今天我注意到 Apache 网络服务器上异常高的请求率以及相当高的传入网络流量。在检查 Apache 的 mod_status 页面后,我发现有问题的 URL 来自 path www.server.com/www/wp-includes/js/tinymce/plugins/wpautoresize/。事实上,我在那里发现了几个被黑(混淆)的 PHP 脚本。
还注意到 www-data 用户执行的奇怪过程:
www-data 7300 10.8 0.1 2122900 18768 ? Ssl Jul11 121:47 /usr/bin/host
Run Code Online (Sandbox Code Playgroud)
检查/proc/7300/cmdline发现这确实是原始/usr/bin/host二进制文件。netstat -anp显示它打开了许多 HTTP 连接,因此该二进制文件以某种方式被滥用。debsums确认二进制校验和没有问题。由于该过程是在 www-data 用户下运行的,我没有理由相信服务器本身受到了威胁。
这个二进制文件是如何被滥用的?
编辑:这不是广泛的“如何处理受损服务器”问题。而是关于一种特定类型的滥用的问题(并且已经是一个答案),它在技术上是如何完成的,因为这个特殊案例在它的工作方式上非常有创意。似乎这已经流行了好几年了(旧线程和 2012 年的问题),我本周遇到了它。