调整专用虚拟Web服务器

当你有一个专用的虚拟服务器来运行你的网站时,很可能它是为每个人配置的,而不是为了最大限度地提高网站的运行性能而定制的。

概述 / 综述

我们希望最大限度地提高性能的问题领域有很多:

Linux配置。 通常有一些不需要运行的服务正在运行,这浪费了本可以用于更多连接的内存。 MySQL配置。 默认设置通常基于小型服务器,我们可以添加一些关键更改来极大地提高性能。 Apache配置。 默认情况下,大多数主机提供商安装Apache时几乎安装了每个模块。如果您永远不打算使用模块,那么就没有理由加载模块。 PHP配置。 默认的PHP配置同样臃肿,通常会安装大量不必要的额外模块。 PHP操作码缓存。 操作码缓存不再允许PHP每次重新编译脚本,而是将编译后的脚本缓存在内存中,以实现巨大的性能提升。 备份。 也许应该设置一些自动备份,因为您的主机提供商不会为您这样做。 安防。 当然,Linux在默认情况下是足够安全的,但是通常有一些明显的安全问题,您可以通过几个快速设置来修复它们。

Linux配置

您可以进行相当多的调整,这些调整会根据您使用的服务器而略有不同。这些调整适用于运行CentOS的服务器,但它们应该适用于大多数DV服务器。

禁用DNS

如果您的主机提供商为您的域处理DNS(可能),那么您可以禁止DNS服务运行。

disable dns /etc/init.d/named stop chmod 644 /etc/init.d/named

chmod命令从脚本中删除EXECUTE权限,使其在启动时停止运行。

禁用垃圾邮件评估

如果您没有在服务器上使用电子邮件帐户,则不应费心运行反垃圾邮件工具。(你还应该看看谷歌应用程序(Google Apps),这是一个更好的电子邮件解决方案)

/etc/init.d/psa-spamassassin stop chmod 644 /etc/init.d/psa-spamassassin

禁用xinetd

xinetd进程包含许多其他进程,这些进程都不适用于典型的Web服务器。

/etc/init.d/xinetd stop chmod 644 /etc/init.d/xinetd

限制Plesk内存使用

如果您使用Plesk面板,您可以通过添加选项文件强制它使用更少的内存。

vi /usr/local/psa/admin/conf/httpsd.custom.include

将以下行添加到文件中:

MinSpareServers 1 MaxSpareServers 1 StartServers 1 MaxClients 5

请注意,已知此选项在MediaTemple DV服务器上有效,但尚未在任何其他服务器上选中。(请参阅参考资料)

禁用或关闭Plesk(可选)

如果你一年只使用一次Plesk,那就没有什么理由让它继续运行了。请注意,此步骤完全是可选的,并且稍微高级一些。

运行以下命令以关闭Plesk:

/etc/init.d/psa stop

您可以通过运行以下命令来禁止其在启动时运行:

chmod 644 /etc/init.d/psa

请注意,如果禁用它,则在不改回文件权限(chmod u+x)的情况下无法手动启动它。

MySQL配置

启用查询缓存

打开/etc/my.cnf文件,并在[mysqld]节中添加以下行,如下所示:

[mysqld] query-cache-type = 1 query-cache-size = 8M

如果愿意,您可以向查询缓存添加更多内存,但不要使用太多内存。

禁用TCP/IP

默认情况下,数量惊人的主机允许通过TCP/IP访问MySQL,这对网站来说毫无意义。您可以通过运行以下命令来确定MySQL是否在监听TCP/IP:

netstat -an | grep 3306

要禁用,请将以下行添加到/etc/my.cnf文件:

skip-networking

Apache配置

打开httpd.conf文件,该文件通常位于/etc/httpd/conf/httpd.conf中

找到如下所示的行:

Timeout 120

并将其更改为以下内容:

Timeout 20

现在查找包含这些行的部分,并调整为类似的内容:

StartServers 2 MinSpareServers 2 MaxSpareServers 5 ServerLimit 100 MaxClients 100 MaxRequestsPerChild 4000

PHP配置

在PHP平台上调整服务器时需要记住的一件事是,每个Apache线程都将在内存中的单独位置加载PHP。这意味着如果一个未使用的模块为PHP增加了256k的内存,那么在40个Apache线程中,您就浪费了10MB的内存。

删除不需要的PHP模块

您需要找到php.ini文件,该文件通常位于/etc/php.ini(请注意,在某些发行版上,/etc/php.d/目录包含许多.ini文件,每个模块一个。

注释掉包含以下模块的所有装入模块行:

ODBC。 SNMP。 PDO。 ODBC PDO。 梅斯。 离子立方体装载机。 杰森。 IMAP。 LDAP。 诅咒

TODO:在此处添加更多信息。

PHP操作码缓存

您可以使用许多操作码缓存,包括APC、eAccelerator和Xcache,由于稳定性原因,最后一种是我个人喜欢的。

下载xcache并解压缩到一个目录中,然后从xcache源目录运行以下命令:

phpize ./configure --enable-xcache make make install

打开php.ini文件并为xcache添加一个新部分。如果您的php模块是从其他地方加载的,则需要调整路径。

vi /etc/php.ini

将以下部分添加到文件中:

[xcache-common] zend_extension = /usr/lib/php/modules/xcache.so [xcache.admin] xcache.admin.user = "myusername" xcache.admin.pass = "putanmd5hashhere" [xcache] ; Change xcache.size to tune the size of the opcode cache xcache.size = 16M xcache.shm_scheme = "mmap" xcache.count = 1 xcache.slots = 8K xcache.ttl = 0 xcache.gc_interval = 0 ; Change xcache.var_size to adjust the size of variable cache xcache.var_size = 1M xcache.var_count = 1 xcache.var_slots = 8K xcache.var_ttl = 0 xcache.var_maxttl = 0 xcache.var_gc_interval = 300 xcache.test = Off xcache.readonly_protection = On xcache.mmap_path = "/tmp/xcache" xcache.coredump_directory = "" xcache.cacher = On xcache.stat = On xcache.optimizer = Off

TODO:需要稍微扩展一下,并在引用中链接到xcache。

备份

没有什么比自动备份您的网站更重要的了。你也许可以从你的主机提供商那里获得快照备份,这也非常有用,但我更喜欢自动备份。

创建自动备份脚本

我通常从创建一个/backups目录开始,在它下面有一个/backups/files目录。如果需要,您可以调整这些路径。

mkdir -p /backups/files

现在,在backups目录内创建一个backup.sh脚本:

vi /backups/backup.sh

将以下内容添加到文件中,并根据需要调整路径和mysqldump密码:

#!/bin/sh THEDATE=`date +%d%m%y%H%M` mysqldump -uadmin -pPASSWORD DATABASENAME > /backups/files/dbbackup$THEDATE.bak tar -cf /backups/files/sitebackup$THEDATE.tar /var/www/vhosts/my-website-path/httpdocs gzip /backups/files/sitebackup$THEDATE.tar find /backups/files/site* -mtime +5 -exec rm {} \; find /backups/files/db* -mtime +5 -exec rm {} \;

该脚本将首先创建一个日期变量,以便为单个备份将所有文件命名为相同的名称,然后转储数据库,将Web文件压缩并压缩它们。Find命令用于删除任何超过5天的文件,因为您不希望驱动器空间不足。

通过运行以下命令使脚本可执行:

chmod u+x /backups/backup.sh

接下来,您需要将其指定为由cron自动运行。请确保您使用的帐户可以访问备份目录。

crontab -e

将以下行添加到crontab:

1 1 * * * /backups/backup.sh

您可以通过在登录到用户帐户时运行脚本来提前测试脚本。(我通常以root身份运行备份)

使用rsync异地同步备份

现在您已经运行了服务器的自动备份,您可以使用rsync实用程序在其他地方同步它们。您将希望阅读这篇关于如何设置ssh密钥以实现自动登录的文章:在单个命令中将公共SSH密钥添加到远程服务器

您可以通过在另一个位置的Linux或Mac机器上运行此命令来测试这一点(我家里有一台Linux服务器,我就是在那里运行这个命令的)

rsync -a user@website.com:/backups/files/* /offsitebackups/

这将需要相当长的时间才能第一次运行,但最后您的本地计算机应该在/offsitebackups/目录中有一个文件目录的副本。(确保在运行脚本之前创建该目录)

您可以通过将其添加到crontab行来对其进行调度:

crontab -e

添加以下行,它将每小时在45分钟标记处运行rsync。您会注意到,我们在这里使用完整路径进行rsync。

45 * * * * /usr/bin/rsync -a user@website.com:/backups/files/* /offsitebackups/

您可以安排它在不同的时间运行,也可以每天只运行一次。这真的要看你的了。

请注意,有很多实用程序允许您通过ssh或ftp进行同步。您不必使用rsync。

安全 / 抵押品 / 保证 / 证券

您要做的第一件事是确保您有通过ssh使用的常规用户帐户,并确保您可以使用su切换到root用户。允许root通过ssh直接登录是一个非常糟糕的主意。

禁用通过SSH的超级用户登录

编辑/etc/ssh/sshd_config文件,并查找以下行:

#PermitRootLogin yes

将该行更改为如下所示:

PermitRootLogin no

在进行此更改之前,请确保您拥有常规用户帐户,并且可以通过su切换为root用户,否则您可能会将自己锁在门外。

禁用SSH版本1

除了SSH版本2之外,确实没有理由使用任何其他版本,因为它比以前的版本更安全。编辑/etc/ssh/sshd_config文件,并查找以下部分:

#Protocol 2,1 Protocol 2

确保您只使用如图所示的协议2。

重新启动SSH服务器

现在您需要重新启动SSH服务器才能使其生效。

/etc/init.d/sshd restart

检查打开的端口

您可以使用以下命令查看服务器正在侦听哪些端口:

netstat -an | grep LISTEN

对于Plesk,除了端口22、80,可能还有8443之外,您真的不应该有任何其他监听。

设置防火墙

正文:在linux‎上使用iptables

您可以选择设置iptables防火墙以阻止更多连接。例如,我通常会阻止从我的工作网络以外的任何其他端口进行访问。如果您有一个动态IP地址,您将希望避免使用该选项。

如果到目前为止您已经遵循了本指南中的所有步骤,那么可能没有必要再添加防火墙,但是了解您的选择是很好的。

亦见

在linux‎上使用iptables

参考文献

优化您的DV服务器(mediateple.net)。 XCache

相关文章