为wordpress增加手机主题

为了方便手机查阅博客的资料,今天为博客增加了手机浏览的支持。需要一个插件和一个手机主题即可完成。
插件:http://wordpress.org/extend/plugins/wpms-mobile-edition/
手机主题:http://wordpress.org/extend/themes/carrington-mobile
由于我的博客使用了varnish缓存,所以还需要在default.vcl配置文件的sub vcl_recv中增加对User-Agent的判断。

  1. if (req.http.User-Agent ~  "(2.0 MMP|240×320|400X240|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|Googlebot-Mobile|hiptop|IEMobile|KYOCERA/WX310K|LG/U990|MIDP-2.|MMEF20|MOT-V|NetFront|Newt|Nintendo Wii|Nitro|Nokia|Opera Mini|Palm|PlayStation Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|SHG-i900|Small|SonyEricsson|Symbian OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|webOS|Windows CE|WinWAP|YahooSeeker/M1A1-R2D2|iPhone|iPod|Android|BlackBerry9530|LG-TU915 Obigo|LGE VX|webOS|Nokia5800)") {
  2.            return (pass);
  3. }

eAccelerator 参数详解

eaccelerator.shm_size=”32″
eAccelerator 可以使用的共享内存的数量 (以兆为单位) . “0″ 是指操作系统的默认值. 默认值是 “0″.可根据服务器的实际情况来调整,16,32,64,128都是可以的。
eaccelerator.cache_dir=”/home/php/tmp”
这个目录是给磁盘缓存使用. eAccelerator 在这里储存预先编译好的代码, 进程数据, 内容以及用户的自定义内容. 同样的数据也能被储存在共享内存中 (这样可以提高访问速度). 默认的设置是 “/tmp/eaccelerator“.
eaccelerator.enable=”1″
开启或关闭 eAccelerator。”1″ 为开启,”0″ 为关闭。默认值为 “1″。
eaccelerator.optimizer=”1″
启或关闭内部优化器,可以提升代码执行速度。”1″ 为开启,”0″ 为关闭。默认值为 “1″。
eaccelerator.check_mtime=”1″
打开或者关闭 PHP 的文件修改检查. “1″ 是指打开, “0″ 是指关闭. 如果您在修改以后重新编译 PHP 的文件,那么您应当设置为 “1″. 默认值是 “1″.
eaccelerator.debug=”0″
开启或关闭调试日志记录。”1″ 为开启,”0″ 为关闭。默认值为 “0″。会将缓存命中得记录写入日志。
eaccelerator.filter=””
判断哪些 PHP 文件必须缓存。您可以指定缓存和不缓存的文件类型(如 “*.php *.phtml”等)
如果参数以 “!” 开头,则匹配这些参数的文件被忽略缓存。默认值为 “”,即,所有 PHP 文件
都将被缓存。
eaccelerator.shm_max=”0″
当使用 ” eaccelerator_put() ” 函数时禁止其向共享内存中存储过大的文件。该参数指定允许
存储的最大值,单位:字节 (10240, 10K, 1M)。”0″ 为不限制。默认值为 “0″。
eaccelerator.shm_ttl=”0″
当 eAccelerator 获取新脚本的共享内存大小失败时,它将从共享内存中删除所有在
最后 “shm_ttl” 秒内没有存取的脚本缓存。默认值为 “0″,即:不从共享内春中删除
任何缓存文件。
eaccelerator.shm_prune_period=”0″
当 eAccelerator 获取新脚本的共享内存大小失败时,他将试图从共享内存中删除早于
“shm_prune_period” 秒的缓存脚本。默认值为 “0″,即:不从共享内春中删除
任何缓存文件。
eaccelerator.shm_only=”0″
允许或禁止将已编译脚本缓存在磁盘上。该选项对 session 数据和内容缓存无效。默认
值为 “0″,即:使用磁盘和共享内存进行缓存。
eaccelerator.compress=”1″
允许或禁止压缩内容缓存。默认值为 “1″,即:允许压缩。
eaccelerator.compress_level=”9″
指定内容缓存的压缩等级。默认值为 “9″,为最高等级。

多规则替换过滤nginx模块nginx_substitutions_filter

本文介绍一个nginx第三方模块nginx_substitutions_filter,此模块作用是替换过滤响应主体,nginx也有一个类似这样的原生模块,但有一个缺点,就是只能使用一条规则,而nginx_substitutions_filter则不限规则数量。

安装方法

  1. cd /tmp
  2. yum install subversion
  3. svn checkout http://substitutions4nginx.googlecode.com/svn/trunk/ substitutions4nginx-read-only

在编译nginx时加上:

  1. ./configure –add-module=/tmp/substitutions4nginx-read-only

使用方法

有两条指令:subs_filter_types,subs_filter
subs_filter_types
语法: subs_filter_types mime-type [mime-types]
默认:subs_filter_types text/html
适用区域:http, server, location
subs_filter_types是用来指令需要替换的文件类型,默认是text/html类型。此模块无法处理经过压缩的内容,虽然能与gzip filter模块兼容,但无法处理反向代理返回的内容。当需要处理反向代理的内容时,可以使用如下语句禁用压缩:

  1. proxy_set_header Accept-Encoding "";

subs_filter
语法;subs_filter 源字段串 目标字段串 [gior]
默认:无
适用区域:http, server, location
subs_filter指令允许在nginx响应输出内容时替换源字段串(正则或固定)为目标字符串。第三个标志含意如下:
g(默认): 替换所有匹配的字段串。
i: 执行区分大小写的匹配。
o: 仅替换首个匹配字符串。
r: 使用正则替换模式,默认是固定模式。
模块官网:http://code.google.com/p/substitutions4nginx/

设置nginx密码保护wordpress后台

今天早上起来打开QQ,收到一封密码重置的邮件,查看了一下日志,确实有人在捣乱,虽然似乎获取不到我的后台密码,除非连我的邮件也破解了。但这给了我一种不安全的感觉。好吧,既然你想通过后台破解我的密码,我就不让你进我的后台,nginx设置方法如下:
1、根据文http://devops.webres.wang/2011/12/nginx-http-auth-basic/后面的部分生成密码文件,放在/usr/local/nginx/conf。
2、在nginx.conf文件中加入:

  1. location ~ /wp-login.php  {
  2. location ~ .*.(php|php5)?$
  3.     {
  4.         fastcgi_pass unix:/tmp/php-cgi.sock;
  5.         fastcgi_index index.php;
  6.         include fcgi.conf;
  7.     }
  8.   auth_basic            "Restricted";
  9.   auth_basic_user_file  htpasswd;
  10. }

这里分为两部分,一部分是匹配wp-login.php,一部分用来解析php文件,否则会提示下载php文件的。

Nginx+tomcat整合安装配置

上次我们使用了apache来处理静态,tomcat来处理jsp程序,现在我们尝试使用处理静态更高效的nginx,通过nginx的代理模块,将jsp的处理传递给tomcat。

安装JRE

http://www.oracle.com下载JRE软件。

  1. wget http://download.oracle.com/otn-pub/java/jdk/7u2-b13/jre-7u2-linux-i586.tar.gz
  2. tar xzf jre-7u2-linux-i586.tar.gz
  3. mv jre1.7.0_02/ /usr/local/jre

tomcat安装

到http://tomcat.apache.org/下载tomcat

  1. wget http://labs.renren.com/apache-mirror/tomcat/tomcat-7/v7.0.23/bin/apache-tomcat-7.0.23.tar.gz
  2. tar xzf apache-tomcat-7.0.23.tar.gz
  3. mv apache-tomcat-7.0.23 /usr/local/tomcat

设置环境变量

  1. vi /etc/profile

在文件末尾增加:

  1. export JRE_HOME=/usr/local/jre

执行source命令使生效

  1. source /etc/profile

tomcat根目录设置

1.打开tomcat安装目录下面conf目录下的server.xml文件。
2.找到如下文字:

  1. <Host name="localhost" appBase="webapps"
  2.        unpackWARs="true" autoDeploy="true">

3.在上面找到的文字后面添加如下内容

  1. <Context path="" docBase="/usr/local/nginx/html" debug="0" reloadable="true" />

/usr/local/nginx/html即为根目录地址。

安装nginx

  1. yum install pcre-devel zlib-devel
  2. cd /tmp
  3. wget http://nginx.org/download/nginx-1.0.14.tar.gz
  4. tar xzf nginx-1.0.14.tar.gz
  5. cd nginx-1.0.14
  6. ./configure –prefix=/usr/local/nginx
  7. make && make install

在nginx.conf中的server区块中加入:

  1. location ~ .(jsp|jspx|do){
  2.             proxy_set_header Host $host;
  3.             proxy_set_header X-Forwarded-For $remote_addr;
  4.             proxy_pass http://127.0.0.1:8080;
  5.         }

程序启动

  1. /usr/local/nginx/sbin/nginx
  2. /usr/local/tomcat/bin/startup.sh

CentOS 6安装配置KVM

上一篇文章介绍过CentOS 6安装Xen,有点麻烦,因为自CentOS 6开始,虚拟化平台已经从xen转向KVM,所以在CentOS 6安装KVM还是非常的简单的。

1、安装KVM

  1. yum groupinstall Virtualization ‘Virtualization Client’

2、安装api支持

  1. yum install libvirt
  2. service libvirtd start

3、验证是否已经载入KVM模块

  1. $ lsmod | grep kvm
  2. kvm
  3. kvm_intel

4、使用virt-manager安装guest

virt-manager是一个api gui工具,可以很方便的管理虚拟机。下面简单介绍使用virt-manager安装虚拟机系统。
1)打开virt-manager,Add-connection,hypervisor选择QEMU/KVM,点击connect。
2)在连接localhost(QEMU)右键-NEW,输入guest名称,还有选择安装方式,我这里选择iso文件安装,点击forword。
3)选择iso文件路径,点击forword。
4)定义分配内存及cpu个数。
5)定义磁盘映像大小。
6)下一步就是常规的系统安装了。

5、使用virt-install安装guest

当你的CentOS没有桌面环境时,可以使用virt-install命令安装,如:
1、输入虚拟机名称
2、分配多少内存
3、定义虚拟机磁盘映像的位置
4、此步可以直接输入iso的位置或是url
5、进行系统常规安装

Windows XP下硬盘安装CentOS 6.2

我们现在要实现的是硬盘安装linux系统,这里以CentOS 6.2为例,简单介绍一下安装过程,不会很详细,只是给个思路。

必备工具

CentOS 6.2 ISO文件
下载地址:http://mirrors.163.com/centos/6.2/isos/
Paragon-Partition-Manager:用于在xp下ext2或ext3的分区
下载地址:http://115.com/file/e732imz8#Paragon-Partition-Manager-10.0-Server.7z
grub4dos:用于引导linux系统
下载地址:http://115.com/file/dpdswtcm#grub4dos-0.4.4-2009-01-11.zip
Ext2Fsd:用于windows下能读写ext2或ext3分区
下载地址:http://115.com/file/be6ajmwc#Ext2Fsd-0.51.7z

安装步骤

ext3分区

使用Paragon-Partition-Manager分出一个ext3的分区,这个分区是用来存在iso文件的,大小根据iso文件确定,分区之后,硬盘还必须有未分区的空间,因为需要给安装CentOS留下。分区的时候顺便分配盘符。

使用Ext2Fsd访问ext3分区

安装打开ext2fsd软件,在刚才分好的ext3分区上右键,选择“配置文件系统”,点击“启用”,之后“更改并退出”。这时后就可以打开我的电脑,并看见已经多了一个磁盘分区,比如F。接着把iso文件复制到F分区的根目录,

用grub4dos软件制作引导菜单

打开我的电脑C盘,工具–文件夹选项–查看,在“隐藏受保护的操作系统文件(推荐)”前面的勾去掉,并选中“显示所有文件和文件夹”,再把“隐藏已经文件类型的扩展名”前面的勾去掉,最后点击应用,确定。
右键单击C盘根目录下的boot.ini,选择“属性”,把“只读”前面的勾去掉。接着,用记事本打开boot.ini文件,在最后一行添加如下内容:
C:GRLDR=”Grub”
解压grub4dos-0.4.4,把文件夹里面的GRLDR复制到C盘根目录。然后在C盘根目录新建boot文件夹,在boot文件夹中再建grub文件夹,把grub4dos-0.4.4文件夹里面的menu.lst复制到C:\boot\grub下。

然后解压挂载或解压iso文件,把里面的isolinux文件夹复制到F盘的根目录下面。

引导CentOS启动

重启电脑,进入引导界面,选择Grub,按下”C”键进入命令行模式。
输入“root (hd0,”(双引号不用输),这时按下”Tab”键,会在下面出现硬个硬盘的所有分区,假如我们看到 “5”对应之前的ext3分区,那就继续输入”5)”,完整的命令是:root (hd0,5)。
现在按下回车键,继续输入kernel /isolinux/vmlinuz,再按下回车,输入initd /isolinux/initrd.img,按下回车,继续输入boot,按下回车,这时grub已经能够引导centos进入安装界面。

CentOS系统安装

这里不多说,需要注意的有几点:
1、在要求选择CentOS image文件所在的分区时,一般选择最后一个分区。
2、这步一定要小心,不然会导致windows系统丢失。在提示“您要进行哪种类型的安装”时,选择“创建自定义布局”进行自定义分区,然后在未分区的空间上新建ext4分区,也可以使用LVM管理分区,不过boot必须是主物理分区。
3、其它的默认就好

CentOS 6安装配置Xen

centos 6安装xen并不像centos 5那样轻松,因为在centos 6中,官方源已经去除了xen的rpm包,只能使用第三方源或自行编译,这里推荐使用第三方源,编译安装要解决的问题比较多。还有一个包libvirt,这个是管理xen的api,官方的这个包已经不支持xen,并且是0.9版的需要更高版本的iptables支持,所以libvirt需要编译安装。

下面是在CentOS 6 64位系统进行安装配置Xen。

1、安装Xen及内核

  1. rpm -Uvh http://www.crc.id.au/repo/x86_64/kernel-xen-release-6-3.noarch.rpm //导入第三方源安装Xen
  2. yum install bridge-utils //安装网桥设置工具
  3. yum install kernel-xen xen //安装xen及内核

2、配置grub引导xen内核

xen内核安装后,会自动插入引导xen内核代码到/boot/grub/grub.conf文件,但还需要进行相应的修改。

修改后引导xen内核的代码如下:

  1. title CentOS (2.6.32.56-1.el6xen.x86_64)
  2. root (hd0,7)
  3. kernel /xen.gz dom0_mem=1024M loglvl=all guest_loglvl=all
  4. module /vmlinuz-2.6.32.56-1.el6xen.x86_64 ro root=/dev/mapper/VolGroup-LogVol00 rd_LVM_LV=VolGroup/LogVol00 nomodeset
  5. module /initramfs-2.6.32.56-1.el6xen.x86_64.img

这段代码仅够参考,不一定适用于你的配置。

3、关闭selinux

这是必须关闭的,要不会因为selinux的安全机制导致xen无法正常工作。

编辑selinux配置文件

  1. vi /etc/sysconfig/selinux

修改为如下:

  1. # This file controls the state of SELinux on the system.
  2. # SELINUX= can take one of these three values:
  3. # enforcing – SELinux security policy is enforced.
  4. # permissive – SELinux prints warnings instead of enforcing.
  5. # disabled – No SELinux policy is loaded.
  6. SELINUX=disabled
  7. # SELINUXTYPE= can take one of these two values:
  8. # targeted – Targeted processes are protected,
  9. # mls – Multi Level Security protection.
  10. SELINUXTYPE=targeted

还有一点配置也很重要,就是禁止netmanager接管网络,因为这个工具不支持网桥管理。
在/etc/sysconfig/network-script/ifcfg-eth0中加入:

  1. NM_CONTROLLED=no

4、重启引导进入xen内核

引导后执行xm info测试:

  1. [root@localhost ~]# xm info
  2. host                   : localhost.localdomain
  3. release                : 2.6.32.56-1.el6xen.x86_64
  4. version                : #1 SMP Mon Feb 20 13:03:03 EST 2012
  5. machine                : x86_64
  6. nr_cpus                : 4
  7. nr_nodes               : 1
  8. cores_per_socket       : 2
  9. threads_per_core       : 2
  10. cpu_mhz                : 2394
  11. hw_caps                : bfebfbff:28100800:00000000:00003f40:009ae3bd:00000000:00000001:00000000
  12. virt_caps              : hvm
  13. total_memory           : 1972
  14. free_memory            : 412
  15. free_cpus              : 0
  16. xen_major              : 4
  17. xen_minor              : 1
  18. xen_extra              : .2
  19. xen_caps               : xen-3.0-x86_64 xen-3.0-x86_32p hvm-3.0-x86_32 hvm-3.0-x86_32p hvm-3.0-x86_64
  20. xen_scheduler          : credit
  21. xen_pagesize           : 4096
  22. platform_params        : virt_start=0xffff800000000000
  23. xen_changeset          : unavailable
  24. xen_commandline        : dom0_mem=1024M loglvl=all guest_loglvl=all
  25. cc_compiler            : gcc version 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC)
  26. cc_compile_by          : mockbuild
  27. cc_compile_domain      : crc.id.au
  28. cc_compile_date        : Mon Feb 20 12:52:37 EST 2012
  29. xend_config_format     : 4

5、安装api管理工具

  1. yum install virt-install virt-viewer

6、编译安装libvirt

因为rpm安装的libvirt不支持xen连接,所以我们使用编译安装。还有版本也不能选择高的,不然可能会因为iptables的版本低而不能使用libvirt。

  1. yum install gcc xen-devel libxml2-devel gnutls-devel device-mapper-devel libnl-devel make
  2. cd /tmp
  3. wget http://libvirt.org/sources/libvirt-0.8.1.tar.gz
  4. tar xzf libvirt-0.8.1.tar.gz
  5. cd libvirt-0.8.1
  6. ./configure –with-xen –with-xen-inotify –with-libvirtd
  7. make && make install

然后打开/usr/local/etc/libvirt/libvirtd.conf文件,删除unix_sock_dir = “/var/run/libvirt”前面的注释,并创建/var/run/libvirt目录。
之后启动libvirtd,并设置开机启动

  1. libvirtd -d
  2. echo "/usr/local/sbin/libvirtd -d" >>/etc/rc.d/rc.local

7、安装xen guest

我们这里使用virt-install工具进行guest的安装,当然你也可以使用xm命令安装,不过相对麻烦点。

可以执行virt-install –help学习这工具的使用方法。
下面是安装guest的示例

  1. virt-install -n CentOSVM1 -r 512 -f /xen/CentOSVM1.img  -l http://www/  –network=network:default -s 10 –nographics –vcpus=2

或者使用交互式安装

  1. virt-install –prompt

-n CentOSVM1 设置虚拟服务器名称
-r 512 设置内存大小
-f /xen/CentOSVM1.img  虚拟磁盘文件的保存路径,如果有重名可以使用–force参数强制重建。
-l http://www/ 安装文件的访问方式,支持nfs http ftp smb等多种方式。如果你对你的带宽比较自信,可以使用http://mirrors.163.com/centos/5.5/os/i386/网易的镜像站
–network=network:default 网络连接方式,我选择的是route中的default
-s 10磁盘文件的大小,单位是G
 –nographics 不使用图形界面,可以不加此参数,然后加–vnc看看图形效果
 –vcpus=2 虚拟CPU的个数
 在执行virt-install命令安装系统之前,先确定你的安装源,支持nfs http ftp smb等多种方式,宽带大的话,可以使用http直接连接远程安装源,比如mirror.163.com。
 我这里adsl上网的,本地已经下载有iso文件了,所以在本地架设个http服务器进行安装。
1、挂载iso文件到/iso目录,这个目录必须存在。

  1. mount -o loop CentOS-6.2-x86_64-minimal.iso /iso

2、安装httpd服务器,我这里安装apache

  1. yum install httpd
  2. service httpd start

3、创建软链接或直接复制文件到apache根目录/var/www/html,如果你的centos 6.2是完整版,只需要做个软链接,如果下载的是精简版,也就是minimal,需要复制全部文件到根目录,因为.treeinfo这个文件需要相应的修改。

centos 6.2完整版:

  1. ln -s /iso /var/www/html

centos 6.2精简版:

  1. cp -R /iso  /var/www/html

修改.treeinfo文件,如:

  1. [general]
  2. family = CentOS
  3. timestamp = 1323560005.81
  4. variant =
  5. totaldiscs = 1
  6. version = 6.2
  7. discnum = 1
  8. packagedir =
  9. arch = x86_64
  10.  
  11. [images-x86_64]
  12. kernel = isolinux/vmlinuz
  13. initrd = isolinux/initrd.img
  14.  
  15. [images-xen]
  16. kernel = isolinux/vmlinuz
  17. initrd = isolinux/initrd.img
  18.  
  19. [stage2]
  20. mainimage = images/install.img

4、在安装之前,需要暂时关闭iptables,否则安装过程中会无法取得相应文件。

  1. service iptables stop

5、开始使用virt-install安装

  1. virt-install -n centos6 -r 512 -f /xen/CentOSVM1.img -l http://192.168.1.100/iso –network=network:default -s 4 –vcpus=2

之后会自动调用virt-viewer工具显示安装界面。
6、启动guest centos6
安装完成后会要求重启,这时guest关闭之后不会自动启动,需要使用xm start命令启动:

  1. xm start centos6

7、开启iptables

之前为了连接安装源,暂时关闭了iptables,现在需要启动iptables,否则guest无法连接外网。

  1. service iptables start

8、使用virt-viewer管理guest

  1. virt-viewer centos6

执行这条命令即可连接虚拟机centos6进行管理了,当然也可以直接使用ssh连接更简单。

另外,我安装过virt-manager来安装guest,但到创建域时就出现KeyError错误,不知道如何解决,有懂的告诉一声。

nginx配置反向代理

nginx配置反向代理很简单,只需要在nginx.conf配置文件加入server区块。

  1. server {
  2.         listen       80;
  3.         server_name  devops.webres.wang;
  4.  
  5. location / {
  6.                 proxy_pass              http://1.2.3.4; //后端ip地址
  7.                 proxy_redirect          off;  //关闭后端返回的header修改
  8.                  proxy_set_header       Host            $host;  //修改发送到后端的header的host
  9.                 proxy_set_header        X-Real-IP       $remote_addr; //设置真实ip
  10.                 proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
  11.                 }
  12.         }

 

varnish下使用acl限制ip地址访问

第1步:定义ACL,我们使用一个外部文件存储IP地址

  1. acl forbidden {
  2. include "/etc/varnish/chinaip.dat";
  3. }
  4. ############chinaip.data#########
  5.  
  6. "192.168.1.0"/24;
  7. "10.0.0.0"/24;

 

第2步:在vcl_recv中定义策略,放到最前面。

  1. if (client.ip ~ forbidden) {
  2. error 505 "Forbidden";
  3. }

 

第3步(可选):自定义错误页面
#根据不同的错误代码,执行不同的操作
#将错误代码为750的,重定向google,将错误代码为505的,直接返回错误代码。

  1. sub vcl_error {
  2. set obj.http.Content-Type = "text/html; charset=utf-8";
  3. if (obj.status == 750) {
  4. set obj.http.Location = "http://www.google.com/";
  5. set obj.status = 302;
  6. deliver;
  7. }
  8. else {
  9. synthetic {"
  10. <!–?xml version="1.0" encoding="utf-8"?–>
  11.  
  12.  
  13.  
  14. "} obj.status " " obj.response {"
  15. <h1>Error "} obj.status " " obj.response {"</h1>
  16. "} obj.response {"
  17.  
  18. "};
  19. }
  20.  
  21. return (deliver);
  22. }

 

第4步:验证配置是否正确

  1. varnishd -d -f /etc/varnish/my.vcl

 

第5步:重启varnish

  1. service varnish restart

 

第6步:测试

忘记说第0步了,就是先备份你的配置文件,很重要。
转自:http://blog.poesylife.com/