wordpress启用memcached加速访问

Memcached 是什么?

Memcached 是一种高性能的分布式内存对象缓存系统。在动态应用,Memcached 既能提高访问的速度,同时还减低了数据库的负载。

Danga Interactive 为提升 LiveJournal.com 的速度研发了 Memcached。目前,LiveJournal.com 每天已经在向一百万用户提供多达两千万次的页面访问。而这些,是由一个由 Web 服务器和数据库服务器组成的集群完成的。Memcached 几乎完全放弃了任何数据都从数据库读取的方式,同时,它还缩短了用户查看页面的速度、更好的资源分配方式,以及 Memcache 失效时对数据库的访问速度。

WordPress 和 Memcached

由于 WordPress 默认支持 Object Cache,所以在 WordPress 实现 Memcached 就是使用 Memcached 把 WordPress 的 Object Cache 写到内存中去,下次直接从内存中读取。相比直接从数据库去读取数据,或者从 Object Cache 数据存到文件,然后从硬盘中读取,Memcached 有很大的速度优势。

WordPress 如何启用 Memcached 缓存

  1. 需要你的服务器支持,就是你的 PHP 需要安装上 Memcached 相关的扩展,注意 PHP 有两个扩展:PHP Memcache 扩展 和 PHP Memcached 扩展,两者仅仅相差一个字母 D,你可以通过 phpinfo() 这个 PHP 函数来检测,你安装的是哪个扩展。
  2. 下载object-cache.php ,点击这里下载
  3. 把下载的:object-cache.php 复制到 wordpress的wp-content目录,这里值得注意不是 wp-content/plugins/

WordPress 会自动检查在 wp-content 目录下是否有 object-cache.php 文件,如果有,直接调用它作为 WordPress 对象缓存机制。查询数据次数明显减少

开启了之前 0.201 秒内总共 30次查询

开启之后 0.205 秒内总共 9 次查询

Fail2ban防止WordPress受到xmlrpc.php CC攻击

WordPress本身是一个非常强大的CMS(内容管理系统),功能强大。但是也正是因为其强大的特性,使其很容易被利用,造成服务器的不稳定甚至崩溃。最容易遭受攻击的就是xmlrpc.php这个文件,攻击者只要每秒发送1个post请求到此文件,不出1分钟,一台512M内存Debian7系统的VPS就会崩溃,php进程和Mysql占用内存过高而导致无法访问。在尝试了网上流传的多个防攻击手段之后,fail2ban是效果最好的一个,下面就简单记录一下过程,供大家参考。

分析日志

在服务器出现异常的时候,首先去分析Nginx日志, /var/log/nginx/access.log ,从代码中可以发现如下可以IP不断发送Post请求到xmlrpc.php,每个IP的发送频率大概在2秒钟一次,严格来说频率并不高但足以让php和mysql进程崩溃。

185.188.204.16 - - [15/Jul/2017:23:51:07 -0400] "POST /xmlrpc.php HTTP/1.0" 502 574 "-" "*****"
185.188.204.6 - - [15/Jul/2017:23:51:08 -0400] "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "*****"
185.188.204.8 - - [15/Jul/2017:23:51:08 -0400] "POST /xmlrpc.php HTTP/1.0" 502 574 "-" "*****"
185.188.204.14 - - [15/Jul/2017:23:51:08 -0400] "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "*****"
185.188.204.16 - - [15/Jul/2017:23:51:08 -0400] "POST /xmlrpc.php HTTP/1.0" 502 574 "-" "*****"
185.188.204.7 - - [15/Jul/2017:23:51:08 -0400] "POST /xmlrpc.php HTTP/1.0" 502 574 "-" "*****"
185.188.204.12 - - [15/Jul/2017:23:51:09 -0400] "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "*****"
185.188.204.11 - - [15/Jul/2017:23:51:09 -0400] "POST /xmlrpc.php HTTP/1.0" 502 574 "-" "*****"
185.188.204.15 - - [15/Jul/2017:23:51:09 -0400] "POST /xmlrpc.php HTTP/1.0" 502 574 "-" "*****"
185.188.204.11 - - [15/Jul/2017:23:51:09 -0400] "POST /xmlrpc.php HTTP/1.0" 502 574 "-" "*****"

安装fail2ban和iptables

安装fail2ban和iptables,这样能使用ipotables对攻击进行防御,想对于其它js和php的防御方式自动化更高,更为高效。

apt-get install fail2ban iptables

设置fail2ban jail.local

使用jail.local设定

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
vi /etc/fail2ban/jail.local
[xmlrpc]
enabled = true
filter = xmlrpc
action = iptables[name=xmlrpc, port=http, protocol=tcp]
logpath = /var/log/nginx/access.log
bantime = 43600
maxretry = 2

设置fail2ban 自定义filter

vi /etc/fail2ban/filter.d/xmlrpc.conf
[Definition]
failregex = ^<HOST> .*POST .*xmlrpc.php.*
ignoreregex =

设置fail2ban jail.local

设置好之后重启fail2ban服务既可生效

service fail2ban restart

查看fail2ban日志查看防御情况

tail -f /var/log/fail2ban.log
2017-07-15 23:51:38,265 fail2ban.jail   : INFO   Creating new jail 'ssh'
2017-07-15 23:51:38,266 fail2ban.jail   : INFO   Jail 'ssh' uses Gamin
2017-07-15 23:51:38,287 fail2ban.filter : INFO   Set maxRetry = 6
2017-07-15 23:51:38,288 fail2ban.filter : INFO   Set findtime = 600
2017-07-15 23:51:38,288 fail2ban.actions: INFO   Set banTime = 600
2017-07-15 23:51:38,320 fail2ban.jail   : INFO   Creating new jail 'xmlrpc'
2017-07-15 23:51:38,320 fail2ban.jail   : INFO   Jail 'xmlrpc' uses Gamin
2017-07-15 23:51:38,321 fail2ban.filter : INFO   Added logfile = /var/log/nginx/access.log
2017-07-15 23:51:38,322 fail2ban.filter : INFO   Set maxRetry = 2
2017-07-15 23:51:38,323 fail2ban.filter : INFO   Set findtime = 600
2017-07-15 23:51:38,323 fail2ban.actions: INFO   Set banTime = 43600
2017-07-15 23:51:38,328 fail2ban.jail   : INFO   Jail 'ssh' started
2017-07-15 23:51:38,329 fail2ban.jail   : INFO   Jail 'xmlrpc' started
# 以上日志显示自定义的xmlrpc filter已经生效
2017-07-15 23:51:45,350 fail2ban.actions: WARNING [xmlrpc] Ban 185.188.204.8
2017-07-15 23:51:45,361 fail2ban.actions: WARNING [xmlrpc] Ban 185.188.204.9
2017-07-15 23:51:45,368 fail2ban.actions: WARNING [xmlrpc] Ban 185.188.204.6
2017-07-15 23:51:45,376 fail2ban.actions: WARNING [xmlrpc] Ban 185.188.204.7
2017-07-15 23:51:45,382 fail2ban.actions: WARNING [xmlrpc] Ban 185.188.204.16
2017-07-15 23:51:45,387 fail2ban.actions: WARNING [xmlrpc] Ban 185.188.204.14
2017-07-15 23:51:45,392 fail2ban.actions: WARNING [xmlrpc] Ban 185.188.204.15
2017-07-15 23:51:45,400 fail2ban.actions: WARNING [xmlrpc] Ban 185.188.204.12
2017-07-15 23:51:45,415 fail2ban.actions: WARNING [xmlrpc] Ban 185.188.204.10
2017-07-15 23:51:45,426 fail2ban.actions: WARNING [xmlrpc] Ban 185.188.204.11
# 以上日志则显示成功防御对xmlrpc进行攻击的IP等情况

参考链接:https://rbgeek.wordpress.com/2014/09/11/block-wordpress-xmlprc-php-ddos-attacks-using-fail2ban/

WordPress插件:https://wordpress.org/plugins/wp-fail2ban/

Related posts:

  1. WordPress 启用HTTPS设置
  2. Wp Super Cache + Nginx规则
  3. Akismet:强大的反垃圾评论插件
  4. 浅谈博客的友情链接与链接
  5. WordPress移除静态资源版本号

Virtualbox CentOS虚拟机系统网络配置

  • 记下虚拟网卡IP

虚拟化技术

  • 配置网卡1、网卡2

网卡1 —对应—eth0—-NAT(网络地址转换)用来与外网通信

网卡2 —对应—eth1—-Host-only用来与主机通信

虚拟化技术

虚拟化技术

  • 启动虚拟机

  • 配置eth0、eth1文件

cd /etc/sysconfig/network-scripts //进入配置目录

虚拟化技术

  • 配置eth0—对应—网卡1
vi ifcfg-eth0

虚拟化技术

  • 配置eth1—对应—网卡2
cp ifcfg-eth0 ifcfg-eth1        //如果ifcfg-eth1不存在,从ifcfg-eth0拷贝

vi ifcfg-eth1

虚拟化技术

  • 重启网络服务
servic network restart

虚拟化技术

  • 查看ip
ifconfig

虚拟化技术

  • 测试虚拟机网络
ping www.baidu.com

虚拟化技术

  • 测试主机–》虚拟机

虚拟化技术

VirtualBox安装CentOS虚拟机教程

使用的软件:

  • VirtualBox 4.1.2
  • CentOS 5.6 x86_64 刻录的光盘
  • VirtualBox是开源的虚拟机软件,免费而且占用资源小,功能强大。先将VirtualBox安装上,这个和平常安装软件一样,就不详述了。

第一部分:安装前的准备工作

步骤1:点击“新建”按钮,创建一个新虚拟机。

虚拟化技术

步骤2:给虚拟机命名,选择操作系统及版本。

虚拟化技术

步骤3:选择内存大小,我这里设置的是512M

虚拟化技术

步骤4:选择创建新虚拟机。

虚拟化技术

步骤5:选择虚拟硬盘的类型。

虚拟化技术

步骤6:选择动态分配磁盘容量。

虚拟化技术

步骤7:选择文件存储的位置及容量大小。

虚拟化技术

步骤8:点击create即可。

虚拟化技术

步骤9:选择安装系统文件的位置

虚拟化技术

步骤10:选择安装介质,可以选择从光盘启动,也可以使用iso文件作为安装文件。

虚拟化技术

步骤11:设置网络,默认是NAT的网络连接方式,修改成桥接(Bridged Adapter)方式。

虚拟化技术

第二部分:开始正式安装系统

步骤1:选择刚创建的虚拟机,然后点击“开始”按钮。

虚拟化技术

步骤2:启动机器安装系统

虚拟化技术

步骤3:跳过媒体检查

虚拟化技术

步骤4:引导安装,点击next

虚拟化技术

虚拟化技术

虚拟化技术

虚拟化技术

虚拟化技术

虚拟化技术

虚拟化技术

虚拟化技术

虚拟化技术

虚拟化技术

虚拟化技术

虚拟化技术

步骤5:重新引导系统

虚拟化技术

步骤6:引导重启系统完成,输入用户名密码进入linux系统

虚拟化技术

VirtualBox虚拟机CentOS安装增强功能Guest Additions

没有安装Virtual Box增强功能Guest Additions的虚拟机操作很不方便,比如:

  • 虚拟机的分辨率最大只有1024×768;

  • 鼠标被虚拟机捕获后要按右Ctrl键才能释放,否则只能再虚拟机里移动;

  • 剪贴板不能共享

安装Guest Additions可以解决上述所有问题。
以CentOS 7.3虚拟机为例,如果安装CentOS时没有选择Development Tools组,需要先安装kernel-devel和gcc

$ sudo yum install -y kernel-devel gcc

通过VirtualBox的 设备 | 安装增强功能… 菜单可以加载VBoxGuestAdditions.iso,可以直接点击Run安装或者执行

$ cd /run/media/centos/VBOXADDITIONS_5.1.22_115126
$ sudo sh ./VBoxLinuxAdditions.run

有时安装会出错

    Verifying archive integrity... All good.
    Uncompressing VirtualBox 5.1.22 Guest Additions for Linux...........
    VirtualBox Guest Additions installer
    Copying additional installer modules ...
    Installing additional modules ...
    vboxadd.sh: Starting the VirtualBox Guest Additions.
    Failed to set up service vboxadd, please check the log file
    /var/log/VBoxGuestAdditions.log for details.

查询log发现是找不到和Linux内核匹配的源文件

$ cat /var/log/VBoxGuestAdditions.log
    vboxadd.sh: failed: Look at /var/log/vboxadd-install.log to find out what went wrong.
    vboxadd.sh: failed: Look at /var/log/vboxadd-install.log to find out what went wrong.
    vboxadd.sh: failed: modprobe vboxguest failed.
$ cat /var/log/vboxadd-install.log
    /tmp/vbox.0/Makefile.include.header:112: * Error: unable to find the sources of your current Linux kernel. Specify KERN_DIR= and run Make again. Stop.
    Creating user for the Guest Additions.
    Creating udev rule for the Guest Additions kernel module.

查询kernel-devel版本是3.10.0-514.26.2.el7.x86_64,而Linux内核版本是3.10.0-514.el7.x86_64,确实不一致。如果安装CentOS时选择了Development Tools组,kernel-devel版本和Linux内核版本是匹配的,则不会出现这个问题。

$ rpm -qa | grep kernel-devel
    kernel-devel-3.10.0-514.26.2.el7.x86_64
$ uname -r
    3.10.0-514.el7.x86_64

可以使用下面两个命令中的一个安装和Linux内核版本匹配的kernel-devel

$ sudo yum install -y "kernel-devel-uname-r == $(uname -r)"
$ sudo yum install -y kernel-devel-3.10.0-514.el7

然后再次安装Guest Additions成功

$ cd /run/media/centos/VBOXADDITIONS_5.1.22_115126
$ sudo sh ./VBoxLinuxAdditions.run
    Verifying archive integrity... All good.
    Uncompressing VirtualBox 5.1.22 Guest Additions for Linux...........
    VirtualBox Guest Additions installer
    Removing installed version 5.1.22 of VirtualBox Guest Additions...
    Copying additional installer modules ...
    Installing additional modules ...
    vboxadd.sh: Starting the VirtualBox Guest Additions.

Ubuntu 16.04安装Magento 2 Varnish和Apache

Magento是一个免费的开源内容管理系统,内置PHP,Zend框架和MySQL数据库。 它是非常受欢迎的电子商务网络应用程序,运行在诸如Apache,MySQL等许多开源应用程序之上。 Magento配有大量内置模块,用于添加更多功能。

Varnish Cache是​​一个功能强大的开源Web应用程序加速器,也称为缓存HTTP反向代理。 它用于通过在用户第一次访问时缓存网页的副本来加快您的网站。 Magento和Varnish是一种已知的组合,可以显着提高现场性能。 默认情况下,Magento 2集成了Varnish。您只需要进行一些配置更改,使其正常工作。

在本教程中,我们将学习如何在Ubuntu 16.04服务器上将Magento 2与Varnish安装为全页缓存。

要求

  • 运行Ubuntu 16.04的服务器。
  • Apache,PHP和MariaDB。
  • 在您的服务器上设置sudo权限的非root用户。

1. 入门指南

在启动之前,建议使用最新的软件包通过运行以下命令来更新系统:

sudo apt-get update -y
sudo apt-get upgrade -y

一旦您的系统是最新的,请重新启动系统并使用sudo用户登录。

2. 安装LAMP服务器

Magento将无法安装LAMP(Apache,PHP,MariaDB)。 首先,通过运行以下命令安装Apache Web服务器和Varnish:

sudo apt-get install apache2 varnish -y

安装Apache后,启动Apache服务,并通过运行以下命令使其启动:

sudo systemctl start apache2
sudo systemctl enable apache2

Magento是用PHP语言编写的,所以您还需要将PHP与所有库一起安装到系统中。 您可以通过运行以下命令来安装它们:

sudo apt-get install php7.0 libapache2-mod-php7.0 php7.0-mbstring php7.0-mysql php7.0-mcrypt php7.0-xsl php-imagick php7.0-gd php7.0-cli php-pear php7.0-intl php7.0-curl php7.0-zip php7.0-gd php7.0-soap php7.0-xml -y

安装PHP以及所有必需的库后,您将需要更改几个默认的PHP设置。 您可以通过编辑php.ini文件来执行此操作:

sudo nano /etc/php/7.0/cli/php.ini

更改以下行:

memory_limit = 512
upload_max_filesize = 128M
zlib.output_compression = on
max_execution_time = 15000

完成后保存并关闭文件。

3. 安装并配置MariaDB

Magento使用MariaDB作为数据库。 所以你需要将它安装到你的服务器上。 您可以通过运行以下命令来安装它:

sudo apt-get install mariadb-server -y

安装MariaDB后,启动MariaDB服务,并通过运行以下命令使其在启动时启动:

sudo systemctl start mysql
sudo systemctl enable mysql

默认情况下,MariaDB不受保护,因此您需要确保它。 您可以通过运行以下命令来保护它:

sudo mysql_secure_installation

回答以下所有问题:

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] n

 ... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

接下来,使用以下命令登录到MariaDB shell:

mysql -u root -p

在提示时输入root密码,然后使用以下命令为Magento创建一个数据库:

MariaDB [(none)]>CREATE DATABASE magento_db;

为Magento创建数据库后,使用以下命令创建用户名和密码:

MariaDB [(none)]>CREATE USER ‘magento’@’localhost’ IDENTIFIED BY ‘password’;

接下来,使用以下命令将权限授予Magento数据库:

MariaDB [(none)]>GRANT ALL PRIVILEGES ON magento_db.* TO ‘magento’@’localhost’;

接下来,运行FLUSH PRIVILEGES命令,以退出特权:

MariaDB [(none)]>FLUSH PRIVILEGES;

最后,使用以下命令退出MariaDB控制台:

MariaDB [(none)]>q

4. 下载Magento

首先,您需要从官方网站下载最新版本的Magento。

下载Magento后,使用以下命令将下载的zip文件解压缩到apache web根目录:

sudo mkdir /var/www/html/magento/
sudo unzip magento2-develop.zip -d /var/www/html/magento

接下来,更改magento目录的所有权,并给予适当的许可:

sudo chown -R www-data:www-data /var/www/html/magento
sudo chmod -R 777 /var/www/html/magento

接下来,您需要将Composer安装到系统中。 Composer是一个依赖管理器,用于安装所有必需的PHP依赖关系。 您可以使用以下命令下载并安装Composer二进制文件:

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/bin/composer

接下来,运行composer命令来安装Magento所需的所有依赖项:

cd /var/www/html/magento
sudo composer install

一旦安装了所有依赖项,您可以继续为Magento配置Apache。

5. 为Magento配置Apache

接下来,您需要为Magento创建Apache虚拟主机文件。 使用以下命令创建一个名为magento.conf的新Apache配置文件:

sudo nano /etc/apache2/sites-available/magento.conf

添加以下行:

<VirtualHost *:8080>
ServerAdmin [email protected]
DocumentRoot /var/www/html/magento
ServerName 192.168.15.189
ServerAlias www.example.com
<<Directory "/var/www/html/magento/">
Options FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/magento-error_log
CustomLog /var/log/apache2/magento-access_log common
</VirtualHost>

保存文件,然后使用Apache重写模块启用虚拟主机以下命令:

sudo a2ensite magento
sudo a2enmod rewrite

接下来,您还需要将Apache监听端口从80更改为8080.因为我们将为Varnish预留端口80。 要这样做,打开ports.conf文件:

sudo nano /etc/apache2/ports.conf

更改文件如下所示:

Listen 8080

最后,重新启动Apache服务以使用以下命令应用此更改:

sudo systemctl restart apache2

6. 访问Magento Web安装向导

Magento现已安装,现在是通过网络浏览器安装Magento的时候了。

要这样做,打开你的网页浏览器并输入URL http://192.168.15.189:8080 ,你应该看到以下页面:

Apache

现在,同意条款和条件,然后点击“同意和设置Magento”按钮,您应该看到以下页面:

Apache

检查所有准备状态,然后单击“下一步”按钮,您应该看到以下页面:

Apache

提供您的数据库详细信息,如数据库名称,数据库用户名和密码,然后单击“下一步”按钮,您应该看到以下页面:

Apache

提供您的网站详细信息,并点击“下一步”按钮,您应该看到以下页面:

Apache

根据您的需要定制Magento,然后点击“下一步”按钮,您将看到以下页面:

Apache

提供您的管理员用户详细信息,然后单击“下一步”按钮,您应该看到以下页面:

Apache

现在,点击“立即安装”按钮开始安装Magento。 安装完成后,您将看到以下页面:

Apache

注意:记住您的Magento管理员URL: http : //192.168.15.189/admin_wczta4 。 这将用于访问Magento管理员。

现在,点击“启动Magento管理”按钮,你应该看到Magento登录页面如下:

Apache

提供您的Magento管理员凭据并点击“登录”按钮,您应该看到Magent-o仪表板如下所示:

Apache

从您的Magento管理仪表板单击STORES按钮(左侧)>配置> ADVANCED>系统>全页缓存 ,然后取消选择使用系统值,并从缓存应用程序列表中选择Varnish缓存,保存配置,单击Varnish配置链接和单击导出VCL for Varnish 4按钮(这将导出var / www / html / magento / var directoy中的varnish.vcl文件),如下所示:

Apache

最后,使用以下命令刷新Magento缓存:

cd /var/www/html/magento
sudo php bin/magento cache:flush

一旦你完成,你可以继续配置Varnish。

7. 配置Varnish

Magento现已安装并配置。 现在是配置Varnish的时候了。

首先,删除/etc/varnish/default.vcl文件并从导出的Varnish配置创建一个符号链接:

sudo rm -rf /etc/varnish/default.vcl
sudo ln -s /var/www/html/magento/var/varnish.vcl /etc/varnish/default.vcl

接下来,您将需要为Varnish创建一个systemd服务文件。 您可以将varnish.service从/ lib / systemd / system /复制到/ etc / systemd / system /目录中:

sudo cp /lib/systemd/system/varnish.service /etc/systemd/system/

复制该文件后,您将需要对varnish.service文件进行一些更改:

sudo nano /etc/systemd/system/varnish.service

进行以下更改:

[Unit]
Description=Varnish HTTP accelerator
Documentation=https://www.varnish-cache.org/docs/4.1/ man:varnishd

[Service]
Type=simple
LimitNOFILE=131072
LimitMEMLOCK=82000
ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
ExecReload=/usr/share/varnish/reload-vcl
ProtectSystem=full
ProtectHome=true
PrivateTmp=true
PrivateDevices=true

[Install]
WantedBy=multi-user.target

完成后保存文件,然后使用以下命令重新启动Varnish服务:

sudo systemctl daemon-reload
sudo systemctl reload varnish.service

如果一切正常,那么您应该能够通过在Web浏览器上输入以下URL来登录到Magento后端:

http://192.168.15.189/admin_wczta4

您还可以通过运行以下命令来检查是否启用了Varnish:

curl -I http://192.168.15.189/admin_wczta4

您应该看到Varnish已启用:

Date: Fri, 07 Jul 2017 17:10:01 GMT
Server: Apache/2.4.18 (Ubuntu)
Set-Cookie: store=default; expires=Sat, 07-Jul-2018 17:10:03 GMT; Max-Age=31536000; path=/; HttpOnly
Set-Cookie: PHPSESSID=irp2k8cmrhct0dfh18qk7ap0i4; expires=Fri, 07-Jul-2017 18:10:04 GMT; Max-Age=3600; path=/; domain=192.168.15.189; HttpOnly
Expires: Thu, 07 Jul 2016 17:10:04 GMT
Cache-Control: max-age=0, must-revalidate, no-cache, no-store
Pragma: no-cache
Location: http://192.168.15.189/admin_wczta4/?SID=irp2k8cmrhct0dfh18qk7ap0i4
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Content-Length: 0
Content-Type: text/html; charset=UTF-8
X-Varnish: 2
Age: 0
Via: 1.1 varnish-v4
Connection: keep-alive

恭喜! 您已经在Ubuntu 16.04服务器上成功配置了Magento与Varnish。

varnishstat – 查看varnish统计信息命令

varnishstat是一个查看当前varnish实例的实时运行状态信息。命令以及参数如下:

varnishstat [-1] [-f <glob>] [-h] [-j] [-l] [-n <dir>] [-N <filename>] [-t <seconds | off>] [-V ] [-X]

以下选项可用:

  • -1 不再显示不断更新的显示,而是将统计信息打印到stdout。
  • -f Field inclusion glob. Use backslash to escape characters. If the argument starts with ‘^’ it is used as an exclusion glob. Multiple -f arguments may be given, and they will be applied in order.
  • -h 显示帮助信息
  • -j 统计信息为JSON格式输出到stdout。
  • -l 列出与-f选项一起使用的可用字段。
  • -n 指定varnishd工作目录(也称为实例名称)以获取日志。如果未指定-n,则使用主机名。
  • -N 指定一个陈旧的VSM实例的文件名。使用此选项时,放弃检查被禁用。
  • -t
    在初始VSM连接返回错误之前超时。如果设置VSM连接在0.5秒钟内重试这段时间。如果为零,则仅尝试连接一次,如果不成功,将立即失败。如果设置为“关闭”,连接将不会失败,允许该实用程序启动并等待不明确地显示该Varnish实例。默认为5秒。
  • -V 打印版本信息
  • -x 输出xml格式到stdout

在服务端使用varnishstat命令之后,会出现如下输出,并且每秒刷新一次。

21+20:34:26
Hitrate ratio:        9        9        9
Hitrate avg:     0.6641   0.6641   0.6641

   636637687       499.06   337.12 client_conn - Client connections accepted
   637516286       511.04   337.58 client_req - Client requests received
   384410700       345.35   203.56 cache_hit - Cache hits
      397324         1.00         0.21 cache_hitpass - Cache hits for pass
   239345712       158.70   126.74 cache_miss - Cache misses
     4835741         0.00         2.56 backend_conn - Backend conn. success
   248259966       154.71   131.46 backend_reuse - Backend conn. reuses
      242608         0.00         0.13 backend_toolate - Backend conn. was closed
   248512413       160.70   131.59 backend_recycle - Backend conn. recycles
        1530         0.00         0.00 backend_retry - Backend conn. retry
       23931         0.00         0.01 fetch_length - Fetch with Length
   249781348       162.69   132.27 fetch_chunked - Fetch chunked
       15614         0.00         0.01 fetch_close - Fetch wanted close
         589          .            .   n_sess_mem - N struct sess_mem
          39          .            .   n_sess - N struct sess
       34325          .            .   n_object - N struct object
       34492          .            .   n_objectcore - N struct objectcore
       84074          .            .   n_objecthead - N struct objecthead
         216          .            .   n_waitinglist - N struct waitinglist
          77          .            .   n_vbc - N struct vbc
         219          .            .   n_wrk - N worker threads
      120362         0.00         0.06 n_wrk_create - N worker threads created
      576844         0.00         0.31 n_wrk_queued - N queued work requests
           1          .            .   n_backend - N backends
   239311376          .            .   n_expired - N expired objects
   213406425          .            .   n_lru_moved - N LRU moved objects
         194         0.00         0.00 losthdr - HTTP header overflows
   632853774       503.05   335.12 n_objwrite - Objects sent with write
   636660065       512.04   337.13 s_sess - Total Sessions
   637516287       511.04   337.58 s_req - Total Requests
     3283172         2.99         1.74 s_pipe - Total pipe
    10476261         3.99         5.55 s_pass - Total pass
   249820893       162.69   132.29 s_fetch - Total fetch
210331163670    169330.83    111376.73 s_hdrbytes - Total header bytes
1121952708903    992663.81    594107.97 s_bodybytes - Total body bytes
   636390701       511.04   336.99 sess_closed - Session Closed
     1746856         0.00         0.93 sess_linger - Session Linger
     5168683         2.00         2.74 sess_herd - Session herd
 38768640297     30143.36     20529.17 shm_records - SHM records
  3367627420      2570.17      1783.26 shm_writes - SHM writes
      487720         4.99         0.26 shm_flushes - SHM flushes due to overflow
    10953952        30.94         5.80 shm_cont - SHM MTX contention

第一行表示的是varnish的运行时常,上面显示是21天。

  • Hitrate ratio和Hitrate avg表示的则是在多少秒内的命中率。有几个比较重要的统计数据

  • cache-hit:缓存命中次数

  • miss-hit:未命中次数

  • worker threads:当前工作线程的数量

  • expired objects:代表过期对象的个数

  • LRU nuked objects:代表缓存可使用的内存以达上线而不得不移除的对象个数

  • LRU moved objects:代表LRU策略被移动的对象个数

  • Total header bytes:代表缓存的请求头对象的大小

  • Total body bytes:代表缓存的请求体对象大小

Ubuntu安装配置Tomcat服务器

本来以为安装了apache之后就可以万事大吉了,没想到在用java的时候发现apache并不能执行servlet服务,也不能解析jsp。想实现这些功能就得安装Apache的一个拓展服务器--Tomcat。

与apache的差别

这个Tomcat其实可以看成是apache的一个拓展,他能实现上述apache服务器实现不了的东西。但是他也有不足,那就是他不能解析php,而且据说解析网页的速度也没有apache快,也没有apache稳定。所以说他并不能代替apache,apache也不能代替他。事实上他和apache虽说是两个服务器,但却是能很好的兼容的,因为apache的默认端口是80,而Tomcat的默认端口是8080(当然这是可以修改的),所以并不冲突。

下载安装

首先从 apache的Tomcat官网 上找到需要下载的源码。这里注意搭配环境,8.0的版本是要支持JDK1.7的,而9.0的版本是要支持JDK1.8的。这里我是JDK1.7所以只能用8.0的。

(这里需要注意一下,我们最好下Core版本,而不要下src源码版本。因为src版本里面缺少一些必要的jar包,在启动服务的时候会报错,还得回官网来下载/bint/extra里面的包。。。)

下载下来后按理说应该找README文件,但是这里没有。最后浏览了下找到了RUNNING.txt文件,打开一看,大概就是我需要的安装向导了。

根据安装向导做出了以下配置:

1、设置CATALINA_HOME环境变量:

这个变量是给系统寻找tomcat文件目录用的,会在他的脚本里面调用,所以有必要设置成环境变量,在/etc/envirenment里面根据格式加上他的文件地址就可以了。这里还有一个CATALINA_BASE变量可以写,不过既然默认是和CATALINA_HOME一样,那就暂且忽略他吧。

2、设置配置文件:

根据提示找到了 $CATALINA_HOME/bin/catalina.sh 文件,里面讲了一大堆可以设置的变量,但是必选的只有两个,一个是上面提到的,另一个就是 $JAVA_HOME 变量了。不过他建议我们把这些用户写的变量统一写到setenv.sh下面便于管理,那我们就照做吧。在同文件下新建setenv.sh文件并写入 $JAVA_HOME 变量的地址( /usr/lib/jvm/java-7-openjdk-amd64/ )。

设置之后记得 source /etc/envirenment 执行一下文件。

3、执行安装文件:

找到start.sh,给予执行权限然后执行。我这里报了一个错,说找不到logs文件夹。。。。不晓得那个启动脚本怎么都没考虑到这一点。。找不到新建一个不就好了么。。。

执行成功后他显示了 Tomcat started. 。

4、启动脚本:

事实上tomcat的启动脚本是catalina.sh,所以我们可以通过./catalina.sh start 和 ./catalina.sh stop 来启动和关闭服务。既然如此,那么我们何不把他移到/etc/init.d里面去用service命令来操作呢?用一个软链接加进去就好了 sudo ln -s /usr/local/tomcat/ibn/catalina.sh tomcat 。

这样就可以方便的进行管理了。

测试

打开浏览器访问 localhost:8080 即可看到测试页面了。

tcpdump命令的使用与示例

网络数据采集分析工具TcpDump的简介

  顾名思义,TcpDump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。tcpdump就是一种免费的网络分析工具,尤其其提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的FreeBSD系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。

  我们用尽量简单的话来定义tcpdump,就是:dump the traffice on a network.,根据使用者的定义对网络上的数据包进行截获的包分析工具。作为互联网上经典的的系统管理员必备工具,tcpdump以其强大的功能,灵活的截取策略,成为每个高级的系统管理员分析网络,排查问题等所必备的东西之一。tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的FreeBSD系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。

  网络数据采集分析工具TcpDump的使用

普通情况下,直接启动tcpdump将监视第一个网络界面上所有流过的数据包。

# tcpdump 
tcpdump: listening on fxp0
11:58:47.873028 202.102.245.40.netbios-ns > 202.102.245.127.netbios-ns: udp 50
11:58:47.974331 0:10:7b:8:3a:56 > 1:80:c2:0:0:0 802.1d ui/C len=43
                         0000 0000 0080 0000 1007 cf08 0900 0000
                         0e80 0000 902b 4695 0980 8701 0014 0002
                         000f 0000 902b 4695 0008 00
11:58:48.373134 0:0:e8:5b:6d:85 > Broadcast sap e0 ui/C len=97
                         ffff 0060 0004 ffff ffff ffff ffff ffff
                         0452 ffff ffff 0000 e85b 6d85 4008 0002
                         0640 4d41 5354 4552 5f57 4542 0000 0000
                         0000 00
^C

  tcpdump支持相当多的不同参数,如使用-i参数指定tcpdump监听的网络界面,这在计算机具有多个网络界面时非常有用,使用-c参数指定要监听的数据包数量,使用-w参数指定将监听到的数据包写入文件中保存,等等。

  然而更复杂的tcpdump参数是用于过滤目的,这是因为网络中流量很大,如果不加分辨将所有的数据包都截留下来,数据量太大,反而不容易发现需要的数据包。使用这些参数定义的过滤规则可以截留特定的数据包,以缩小目标,才能更好的分析网络中存在的问题。tcpdump使用参数指定要监视数据包的类型、地址、端口等,根据具体的网络问题,充分利用这些过滤规则就能达到迅速定位故障的目的。请使用man tcpdump查看这些过滤规则的具体用法。

  显然为了安全起见,不用作网络管理用途的计算机上不应该运行这一类的网络分析软件,为了屏蔽它们,可以屏蔽内核中的bpfilter伪设备。一般情况下网络硬件和TCP/IP堆栈不支持接收或发送与本计算机无关的数据包,为了接收这些数据包,就必须使用网卡的混杂模式,并绕过标准的TCP/IP堆栈才行。在FreeBSD下,这就需要内核支持伪设备bpfilter。因此,在内核中取消bpfilter支持,就能屏蔽tcpdump之类的网络分析工具。

  并且当网卡被设置为混杂模式时,系统会在控制台和日志文件中留下记录,提醒管理员留意这台系统是否被用作攻击同网络的其他计算机的跳板。

May 15 16:27:20 host1 /kernel: fxp0: promiscuous mode enabled

  虽然网络分析工具能将网络中传送的数据记录下来,但是网络中的数据流量相当大,如何对这些数据进行分析、分类统计、发现并报告错误却是更关键的问题。网络中的数据包属于不同的协议,而不同协议数据包的格式也不同。因此对捕获的数据进行解码,将包中的信息尽可能的展示出来,对于协议分析工具来讲更为重要。昂贵的商业分析工具的优势就在于它们能支持很多种类的应用层协议,而不仅仅只支持tcp、udp等低层协议。

  从上面tcpdump的输出可以看出,tcpdump对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直接打印输出的。显然这不利于分析网络故障,通常的解决办法是先使用带-w参数的tcpdump 截获数据并保存到文件中,然后再使用其他程序进行解码分析。当然也应该定义过滤规则,以避免捕获的数据包填满整个硬盘。FreeBSD提供的一个有效的解码程序为tcpshow,它可以通过Packages Collection来安装。

# pkg_add /cdrom/packages/security/tcpshow*
# tcpdump -c 3 -w tcpdump.out
tcpdump: listening on fxp0
# tcpshow < tcpdump.out
---------------------------------------------------------------------------
Packet 1
TIME:12:00:59.984829
LINK:00:10:7B:08:3A:56 -> 01:80:C2:00:00:00 type=0026
<*** No decode support for encapsulated protocol ***>
---------------------------------------------------------------------------
Packet 2
TIME:12:01:01.074513 (1.089684)
LINK:00:A0:C9:AB:3C:DF -> FF:FF:FF:FF:FF:FF type=ARP
ARP:htype=Ethernet ptype=IP hlen=6 plen=4 op=request
sender-MAC-addr=00:A0:C9:AB:3C:DF sender-IP-address=202.102.245.3
target-MAC-addr=00:00:00:00:00:00 target-IP-address=202.102.245.3
---------------------------------------------------------------------------
Packet 3
TIME:12:01:01.985023 (0.910510)
LINK:00:10:7B:08:3A:56 -> 01:80:C2:00:00:00 type=0026
<*** No decode support for encapsulated protocol ***>

  tcpshow能以不同方式对数据包进行解码,并以不同的方式显示解码数据,使用者可以根据其手册来选择最合适的参数对截获的数据包进行分析。从上面的例子中可以看出,tcpshow支持的协议也并不丰富,对于它不支持的协议就无法进行解码。

  除了tcpdump之外,FreeBSD的Packages Collecion中还提供了Ethereal和Sniffit两个网络分析工具,以及其他一些基于网络分析方式的安全工具。其中Ethereal运行在X Window 下,具有不错的图形界面,Sniffit使用字符窗口形式,同样也易于操作。然而由于tcpdump对过滤规则的支持能力更强大,因此系统管理员仍然更喜欢使用它。对于有经验的网络管理员,使用这些网络分析工具不但能用来了解网络到底是如何运行的,故障出现在何处,还能进行有效的统计工作,如那种协议产生的通信量占主要地位,那个主机最繁忙,网络瓶颈位于何处等等问题。因此网络分析工具是用于网络管理的宝贵系统工具。为了防止数据被滥用的网络分析工具截获,关键还是要在网络的物理结构上解决。常用的方法是使用交换机或网桥将信任网络和不信任网络分隔开,可以防止外部网段窃听内部数据传输,但仍然不能解决内部网络与外部网络相互通信时的数据安全问题。如果没有足够的经费将网络上的共享集线器升级为以太网交换机,可以使用FreeBSD系统执行网桥任务。这需要使用option BRIDGE编译选项重新定制内核,此后使用bridge命令启动网桥功能。

  tcpdump采用命令行方式,它的命令格式为:

tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]
    [ -i 网络接口 ] [ -r 文件名] [ -s snaplen ]
    [ -T 类型 ] [ -w 文件名 ] [表达式 ]

  (1). tcpdump的选项介绍

  • -a    将网络地址和广播地址转变成名字;
  • -d    将匹配信息包的代码以人们能够理解的汇编格式给出;
  • -dd    将匹配信息包的代码以c语言程序段的格式给出;
  • -ddd   将匹配信息包的代码以十进制的形式给出;
  • -e    在输出行打印出数据链路层的头部信息;
  • -f    将外部的Internet地址以数字的形式打印出来;
  • -l    使标准输出变为缓冲行形式;
  • -n    不把网络地址转换成名字;
  • -t    在输出的每一行不打印时间戳;
  • -v    输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
  • -vv    输出详细的报文信息;
  • -c    在收到指定的包的数目后,tcpdump就会停止;
  • -F    从指定的文件中读取表达式,忽略其它的表达式;
  • -i    指定监听的网络接口;
  • -r    从指定的文件中读取包(这些包一般通过-w选项产生);
  • -w    直接将包写入文件中,并不分析和打印出来;
  • -T    将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议;)

  (2). tcpdump的表达式介绍

  表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会被截获。在表达式中一般如下几种类型的关键字。

  第一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host.

  第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则缺省是src or dst关键字。

  第三种是协议的关键字,主要包括fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是”ether”的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。
  除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,greater,还有三种逻辑运算,取非运算是 ‘not ‘ ‘! ‘, 与运算是’and’,’&&’;或运算 是’or’ ,’││’;这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来说明。

  A、想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:

#tcpdump host 210.27.48.1

  B、想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令:(在命令行中适用   括号时,一定要

#tcpdump host 210.27.48.1 and  (210.27.48.2 or 210.27.48.3 )

  C、如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:

#tcpdump ip host 210.27.48.1 and ! 210.27.48.2

  D、如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:

#tcpdump tcp port 23 host 210.27.48.1

  (3). tcpdump的输出结果介绍

  下面我们介绍几种典型的tcpdump命令的输出信息

  A、数据链路层头信息
使用命令

#tcpdump --e host ice

ice 是一台装有linux的主机,她的MAC地址是0:90:27:58:AF:1A
H219是一台装有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5B:46;上一条命令的输出结果如下所示:

21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ice.telne
t 0:0(0) ack 22535 win 8760 (DF)

  分析:21:50:12是显示的时间, 847509是ID号,eth0 表示从网络接口设备发送数据包, 8:0:20:79:5b:46是主机H219的MAC地址,它表明是从源地址H219发来的数据包. 0:90:27:58:af:1a是主机ICE的MAC地址,表示该数据包的目的地址是ICE . ip 是表明该数据包是IP数据包,60 是数据包的长度, h219.33357 > ice.telnet 表明该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口. ack 22535 表明对序列号是222535的包进行响应. win 8760表明发送窗口的大小是8760.

  B、ARP包的TCPDUMP输出信息
  使用命令

#tcpdump arp

得到的输出结果是:

22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a)
22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a) 分析: 22:32:42是时间戳, 802509是ID号, eth0 >表明从主机发出该数据包, arp表明是ARP请求包, who-has route tell ice表明是主机ICE请求主机ROUTE的MAC地址。 0:90:27:58:af:1a是主机ICE的MAC地址。

  C、TCP包的输出信息

  用TCPDUMP捕获的TCP包的一般输出信息是:

src > dst: flags data-seqno ack window urgent options
src > dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (FIN), P (PUSH) , R (RST) "." (没有标记); data-seqno是数据包中的数据的顺序号, ack是下次期望的顺序号, window是接收缓存的窗口大小, urgent表明数据包中是否有紧急指针. Options是选项.

  D、UDP包的输出信息

  用TCPDUMP捕获的UDP包的一般输出信息是:

route.port1 > ice.port2: udp lenth

  UDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机ICE的port2端口,类型是UDP, 包的长度是lenth

centos7安装配置squid正向代理

安装

yum install squid -y

配置

配置文件 /etc/squid/squid.conf

1. 无认证配置

cache_mem 64 MB                                                       缓存和日志设置
maximum_object_size 4 MB
cache_dir ufs /var/spool/squid 100 16 256
access_log /var/log/squid/access.log

2. 带用户认证的配置

  • 初始化

squid -z 进行初始化

系统管理

  • 启动squid
systemctl start squid.service
  • 开放防火墙端口

默认端口为3218

iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 3218 -j ACCEPT

默认只允许私有地址去使用,最有还有个拒绝所有,如下图所示:

系统管理

系统管理

可以添加所有地址:

acl localnet src 0.0.0.0/0.0.0.0

最后一句是拒绝其他不匹配的地址。