[更新 2] – 似乎 W3 Total Cache 支持已经悄无声息地停止了 – 现在已经超过 12 个月没有更新了,并且据称存在一些安全问题。因此,我建议不要在这些说明中安装 W3 Total Cache,其他一切都应该运行良好。[/更新]
[更新] – 我已经使用新的 Ubuntu 12.04 LTS 版本对此进行了测试,所有设置似乎都可以正常工作而无需修改。如果您发现问题,请告诉我 [/Update]
[2013 年 9 月更新] – 我最近将自己的博客托管从Digital Ocean转移到每月 10 美元的 VPS (该链接通过附属链接为您提供 10 美元的折扣)并且对它们非常满意,包括性能博客。
这些说明相当冗长,但希望很容易遵循,使用 Varnish、Nginx、W3 Total Cache 和 WordPress 构建新 Linux 服务器的步骤,在 Amazon Micro 服务器(或同等服务器)上构建 WordPress 博客,所有成本根据blitz.io衡量,每月不到 15美元,每天能够维持 1000 万次点击。
在 15 美元的虚拟服务器上使用 WordPress 每天点击 1000 万次
在新的虚拟专用服务器上安装 Ubuntu 11.10 (Oneiric) - 我要列出的所有软件包都必须是 11.10 才能开箱即用,但其他发行版都可以。
我使用 Amazon EC2 构建我的测试服务器,但 Linode 也非常好。截至 2013 年 9 月,此博客现在托管在Digital Ocean 上
出于文档的目的,我的服务器详细信息如下,您的将有所不同:
公共 DNS 名称:ec2-23-20-235-223.compute-1.amazonaws.com
公共 IP 地址:23.20.235.223
登录服务器并成为root
通过 ssh 以 ubuntu 身份登录,然后运行 sudo -i 命令成为 root
ssh ubuntu@ec2-23-20-235-223.compute-1.amazonaws.com
sudo -i
先配置防火墙
由于我们将安装默认侦听所有接口的各种网络服务,因此配置防火墙很重要。
对于 Ubuntu,这很简单,只需使用 ufw 包。
执行以下命令进行配置:
ufw 允许 ssh
ufw 允许 http
ufw 注销
ufw 启用
完成此操作后,您的服务器将拥有一个相对安全的防火墙,尽管值得查看 fail2ban 以防止暴力密码攻击。
如果您使用的是 Amazon EC2,您还需要打开安全组以允许端口 80 上的流量。您可以使用AWS 安全组控制台执行此操作,您可能需要更改区域。选择启动实例时使用的安全组,然后点击“Inbound”,然后从下拉菜单中选择“HTTP”,最后点击“Add Rule”。您无需重新启动实例即可使其生效。
安装和配置 MySQL
apt-get 更新
apt-get 安装 mysql-server
出现提示时,设置 mysql “root”用户密码
mysql -u 根目录 -p
出现提示时,输入新设置的 root 密码
在 mysql> 提示符下,运行以下 4 个命令,将 ENTER_A_PASSWORD 替换为您自己的密码
创建数据库 wordpress;
授予 wordpress 上的所有权限。* 到“wp_user”@“localhost”由“ENTER_A_PASSWORD”识别;
同花顺特权;
出口
即安装了 MySQL,为 PHP 和 Web 服务器安装 (nginx) 做好了准备。
安装和配置 PHP
我们不仅需要安装 PHP,还需要安装 PHP FPM 系统、APC 和 MySQL 模块
apt-get install php5-fpm php-pear php5-common php5-mysql php-apc php5-gd
编辑 /etc/php5/fpm/php.ini 并在底部添加这些行:
[apc]
apc.write_lock = 1
apc.slam_defense = 0
编辑 /etc/php5/fpm/pool.d/www.conf
代替
听 = 127.0.0.1:9000
和
听 = /dev/shm/php-fpm-www.sock
在此之下,插入这 3 行
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
然后,在同一个文件中再往下,替换这两行
用户 = www 数据
组 = www 数据
和
用户 = nginx
组 = nginx
保存文件,PHP FPM现在已经完成了,但是在我们安装好nginx之前它不会工作,所以现在不用担心启动它。
安装和配置 Nginx
基于Nginx 网站的说明。
下载nginx安全密钥验证包
cd /tmp/
wget http://nginx.org/keys/nginx_signing.key
apt-key add /tmp/nginx_signing.key
通过运行这 2 个命令将源添加到 APT 源文件(>> 很重要!)
echo “deb http://nginx.org/packages/ubuntu/ lucid nginx” >> /etc/apt/sources.list
echo “deb-src http://nginx.org/packages/ubuntu/ lucid nginx” >> /etc/apt/sources.list
通过运行下载并安装 nginx
apt-get 更新
apt-get 安装 nginx
完成后,将安装 nginx,但需要为 WordPress 进行配置。
nginx配置文件在/etc/nginx
首先,编辑 /etc/nginx/nginx.conf
在 http 部分中,插入以下行,以便以后在前面添加 varnish 时,事情不会到处乱七八糟,因此 varnish 会缓存压缩文件:
port_in_redirect 关闭;
gzip打开;
gzip_types 文本/css 文本/xml 文本/javascript 应用程序/x-javascript;
gzip_vary on;
接下来,cd 到 /etc/nginx/conf.d 并创建一个新文件 /etc/nginx/conf.d/drop ,其中包含来自 GitHub的 drop 文件的内容
然后,将 /etc/nginx/conf.d/default.conf 替换为github default.conf 文件的内容,将domainname.com 的所有条目更改为您自己的域名(有 3 个条目,包括底部附近的 1 个)
创建一个目录 /var/www/ 并设置所有权:
mkdir -p/var/www/
chown nginx:nginx/var/www/
chmod 775/var/www
这是配置好的 nginx,通过运行重新启动它和 PHP FPM 服务:
服务 nginx 重启
服务 php5-fpm 重启
现在,您实际上已准备好安装 WordPress!
这很简单,运行:
cd /tmp
wget http://wordpress.org/latest.tar.gz
tar zxvf latest.tar.gz
cd wordpress
mv * /var/www/
chown -R nginx:nginx /var/www
要配置 WordPress,请运行:
cp /var/www/wp-config-sample.php /var/www/wp-config.php
chown nginx:nginx /var/www/wp-config.php
在网络浏览器中,访问https://api.wordpress.org/secret-key/1.1/salt/并复制结果
编辑 /var/www/wp-config.php
并向下滚动以将 AUTH_KEY 行向下滚动到 NONCE_SALT,并将它们替换为您从 api.wordpress.org 站点复制的值
然后,将默认值替换为您之前选择的 MySQL 值(不是 root 用户):
定义('DB_NAME','database_name_here');
定义('DB_USER','username_here');
定义('DB_PASSWORD','password_here');
完成后,如果您没有任何错误并且您的域名指向正确的 IP(这很重要!),那么您将能够访问您的域并在 http:/ 上查看 WordPress 配置页面/www.domainname.com/wp-admin/install.php
通过安装问题,选择一个合理的用户名和密码(强烈建议您将管理员用户从“admin”更改为其他用户名。
转到设置,然后选择永久链接,然后选择“自定义结构”,然后粘贴下面的值(包括 % 符号)
/%post_id%/%postname%
然后点击“保存更改”
是时候创建一个测试帖子了,所以点击“帖子”然后“添加新”
输入标题和正文,然后点击“发布”,并记下它的友好 URL。
100 个用户,60 秒。超时、低命中率、错误等 CPU 耗尽,似乎是最初的瓶颈。
这一高峰在 1.0 分钟内产生了 632 次成功点击,我们将 1.76 MB 的数据传入和传出您的应用程序。9.81 次/秒的平均命中率相当于每天 847,776 次点击。
但是你遇到了更大的问题:34.91% 的用户在这个高峰期间遇到了超时或错误!
所以服务器在运行,但是还是太慢了!
接下来,我们将启用 WordPress 缓存系统
转到 wordpress 管理页面,然后是插件,然后单击安装新插件。
更新 如果您将此作为教程,请跳过 W3 Total Cache 插件,它已经很久没有更新了。我将来会用W3 Super Cache指令更新这篇文章,但其他一切都应该像现在一样工作
搜索“W3 Total Cache”,然后在搜索结果返回时单击“立即安装”。安装完成后,点击“激活插件”。
转到页面左侧菜单中的新“性能”部分。
滚动浏览缓存选项,在每个机会处选择“PHP APC”并启用以下两个部分:
数据库缓存
对象缓存
点击“保存所有设置”,然后点击“部署”
再次运行blitz.io测试,性能应该会提高很多
这种热潮在 1.0 分钟内产生了 2,902 次成功点击,我们将 27.59 MB 的数据传入和传出您的应用程序。平均 46 次/秒的命中率转换为大约 4,006,008 次/天。
如果我们将 blitz.io 从 100 个用户运行到 250 个用户,我们仍然需要解决一些问题:
这一热潮在 1.0 分钟内产生了 4,733 次成功点击,我们将 36.20 MB 的数据传入和传出您的应用程序。72 次/秒的平均命中率相当于每天 6,297,653 次点击。
但是你遇到了更大的问题:5.49% 的用户在这个高峰期间遇到了超时或错误!
您可以在此 PDF 中查看 Nginx 和 APC 配置的 Blitz 结果。
所以仍然不完美——是时候安装 varnish 3 了!
apt-get 安装清漆
编辑 /etc/varnish/default.vcl将内容替换为来自 github 的文件 default.vcl 文件。
编辑 /etc/default/varnish
更改部分
DAEMON_OPTS=”-a :6081 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m”
到
DAEMON_OPTS=”-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,64m”
接下来,我们需要编辑 nginx 配置以侦听端口 8080,而不是端口 80——Varnish 将在端口 80 上运行。
编辑 /etc/nginx/conf.d/default.conf 并替换
听 80;
和
听8080;
保存文件,然后运行
服务 nginx 重启
服务清漆重启
重新运行 100 个用户的 blitz.io 测试
几乎没有 CPU 使用率,应该会得到完美的结果
这种热潮在 1.0 分钟内产生了 2,959 次成功点击,我们将 28.36 MB 的数据传入和传出您的应用程序。平均 47 次/秒的命中率转换为大约 4,093,000 次/天。
重新运行 250 名用户的闪电战
这种热潮在 1.0 分钟内产生了 7,342 次成功点击,我们将 70.38 MB 的数据传入和传出您的应用程序。117 次/秒的平均命中率转换为大约 10,134,627 次/天。
您可以在此 PDF 中查看完整的最终运行闪电战性能详细信息。
就是这样,在一个每月花费不到 20 美元的盒子上使用 WordPress 每天有 1000 万次点击,这一切都归功于 varnish 和 nginx,很简单!