tomcat 建立多个solr 备忘

1./Users/shensuoming1/tomcat7/conf/Catalina/localhost 从该目录复制 solr.xml 并创建 ixyzs_en.xml

cp solr.xml ixyzs_en.xml

2.修改如下属性并保存

path="/ixyzs_en"
docBase="/Users/shensuoming1/tomcat7/ixyzs_en/solr.war"
value="/Users/shensuoming1/solr_app_en"

3.复制solr主程序

cp -r /Users/shensuoming1/solr_app /Users/shensuoming1/solr_app_en

4.修改data-import数据源

cd /Users/shensuoming1/solr_app_en/app/conf
vim data-import.xml 

5.重启tomcat

cd /Users/shensuoming1/tomcat7/bin
./shutdown.sh
./startup.sh

6.重启后浏览器访问
http://localhost:8080/solr/
http://localhost:8080/ixyzs_en/ 访问另一个solr

git-svn 如何更换了URL

随着Project的开发,可能SVN URL改变了(很多原因,比如域名改变,比如版本升级,再比如一不小心使用了http,想换到https等),那么如果使用SVN,很简单,直接relocate就可以了,但是以前同步使用的Git Project如何跟着变化了,上网查了一下,发现比较有效的来自下面。

https://git.wiki.kernel.org/articles/g/i/t/GitSvnSwitch_8828.html

【引用开始】

General Case

What immediately sprang to mind, and what was suggested e.g. on the mailing list, was to simply edit your .git/config, and change the url= in the section [svn-remote “svn”]. That doesn’t work, however. Instead, I found several suggestions to use variations of this theme:

l  Edit the svn-remote url URL in .git/config to point to the new domain name

l  Run git svn fetch – This needs to fetch at least one new revision from svn!

l  Change svn-remote url back to the original url

l  Run git svn rebase -l to do a local rebase (with the changes that came in with the last fetch operation)

l  Change svn-remote url back to the new url

l  Run git svn rebase should now work again!

This will only work, if the git svn fetch step actually fetches anything! (Took me a while to discover that… I had to put in a dummy revision to our svn repository to make it happen!)

【引用结束】

注:红色部分请注意下。

本人已经验证这个方法是可以成功切换SVN URL的。

apache 禁止上传目录解析php文件

禁止网站某个目录的php解析是出于安全因素考虑,像一些上传图片的目录,通常这会被细心的人利用上,他上传一个php文件到图片目录下,如果我们不限制该目录下的php解析,那么他就会利用这个漏洞上传web shell从而获得服务器的权限。所以我们需要把这些可写目录限制php的解析,然而我们还忽略了另一个问题,有些目录虽然限制了php解析,但是用户访问这些php文件的时候会把php的源文件下载下来,从而看到了这些文件的源代码,如果是用户自己写的恶意php代码,那当然没有任何问题,但是,如果他们下载到了我们自己的网址上的源代码,那就不好了。所以,除了要禁止php的解析外,还需要限制一下该目录下的php文件不让下载。配置如下:

<Directory "/home/www/data/">
        php_flag engine off
        <Files ~ ".php">
        Order allow,deny
        Deny from all
        </Files>
</Directory>

其实,我们不加禁止解析的那一行“php_flag engine off” 也是没有问题的。
转自:http://www.aminglinux.com/bbs/thread-6493-1-1.html

配置tomcat+solr搜索平台

关于什么是 tomcat 和 solr
请看维基百科
http://zh.wikipedia.org/wiki/Solr
http://zh.wikipedia.org/wiki/Apache_Tomcat

安装和配置
需要JDK我这边是1.8.0的
下载tomcatsolr
tomcat下载Core下的tar.gz这个压缩包

将apache-tomcat-7.0.57.tar.gz解压放置到你想要的目录下,然后重命名为tomcat7(没原因,只是方便而已)
将solr-4.10.3同样解压到同级目录下,得到文件夹solr-4.10.3
目录结构如下

/Users/shensuoming1/tomcat7
/Users/shensuoming1/solr-4.10.3

这个时候可以到tomcat7/bin/下面启动和关闭tomcat服务器

cd /Users/shensuoming1/tomcat7/bin/
./startup.sh #启动
./shutdown.sh #关闭

启动后访问http://localhost:8080/就可以看到默认的首页,tomcat默认访问的入口是 tomcat7/webapps/ROOT/
注意:如果打不开请检查8080端口是否被占用,如果没被占用,查看错误日志
/Users/shensuoming1/tomcat7/logs/catalina.out
解决问题后继续

现在我们要让tomcat执行solr,配置相关文件
首先创建一个solr.xml文件

cd /Users/shensuoming1/tomcat7/conf/Catalina/localhost/
vim solr.xml

solr.xml 文件内容如下:

<?xml version='1.0' encoding='utf-8'?>
<Context  path="/solr" docBase="/Users/shensuoming1/tomcat7/webapps/solr.war" reloadable="true" debug="0">
    <Environment name="solr/home" type="java.lang.String" value="/Users/shensuoming1/solr_app" override="true" />
</Context>

然后将复制solr.war文件到tomcat

cp /Users/shensuoming1/solr-4.10.3/example/webapps/solr.war /Users/shensuoming1/tomcat7/webapps/solr.war

创建文件夹在tomcat7同级目录下solr_app文件夹,并复制solr-4.10.3里的example

cd /Users/shensuoming1/
mkdir solr_app
cp -r /Users/shensuoming1/solr-4.10.3/example/solr/collection1 /Users/shensuoming1/solr_app/
cp /Users/shensuoming1/solr-4.10.3/example/solr/solr.xml /Users/shensuoming1/solr_app/

随后重启tomcat后访问http://localhost:8080/solr/

Redis 常用命令集合

Redis提供了丰富的命令(command)对数据库和各种数据类型进行操作,这些command可以在Linux终端使用。在编程时,比如使用Redis 的Java语言包,这些命令都有对应的方法,比如上面例子中使用的sadd方法,就是对集合操作中的SADD命令。下面将Redis提供的命令做一总结。

连接操作相关的命令

Ÿ   quit:关闭连接(connection)

Ÿ   auth:简单密码认证

对value操作的命令

Ÿ   exists(key):确认一个key是否存在

Ÿ   del(key):删除一个key

Ÿ   type(key):返回值的类型

Ÿ   keys(pattern):返回满足给定pattern的所有key

Ÿ   randomkey:随机返回key空间的一个key

Ÿ   rename(oldnamenewname):将key由oldname重命名为newname,若newname存在则删除newname表示的key

Ÿ   dbsize:返回当前数据库中key的数目

Ÿ   expire:设定一个key的活动时间(s)

Ÿ   ttl:获得一个key的活动时间

Ÿ   select(index):按索引查询

Ÿ   move(keydbindex):将当前数据库中的key转移到有dbindex索引的数据库

Ÿ   flushdb:删除当前选择数据库中的所有key

Ÿ   flushall:删除所有数据库中的所有key

对String操作的命令

Ÿ   set(key, value):给数据库中名称为key的string赋予值value

Ÿ   get(key):返回数据库中名称为key的string的value

Ÿ   getset(key, value):给名称为key的string赋予上一次的value

Ÿ   mget(key1, key2,…, key N):返回库中多个string(它们的名称为key1,key2…)的value

Ÿ   setnx(key, value):如果不存在名称为key的string,则向库中添加string,名称为key,值为value

Ÿ   setex(keytimevalue):向库中添加string(名称为key,值为value)同时,设定过期时间time

Ÿ   mset(key1, value1, key2, value2,…key N, value N):同时给多个string赋值,名称为key i的string赋值value i

Ÿ   msetnx(key1, value1, key2, value2,…key N, value N):如果所有名称为key i的string都不存在,则向库中添加string,名称key i赋值为value i

Ÿ   incr(key):名称为key的string增1操作

Ÿ   incrby(key, integer):名称为key的string增加integer

Ÿ   decr(key):名称为key的string减1操作

Ÿ   decrby(key, integer):名称为key的string减少integer

Ÿ   append(key, value):名称为key的string的值附加value

Ÿ   substr(key, start, end):返回名称为key的string的value的子串

对List操作的命令

Ÿ   rpush(key, value):在名称为key的list尾添加一个值为value的元素

Ÿ   lpush(key, value):在名称为key的list头添加一个值为value的 元素

Ÿ   llen(key):返回名称为key的list的长度

Ÿ   lrange(key, start, end):返回名称为key的list中start至end之间的元素(下标从0开始,下同)

Ÿ   ltrim(key, start, end):截取名称为key的list,保留start至end之间的元素

Ÿ   lindex(key, index):返回名称为key的list中index位置的元素

Ÿ   lset(key, index, value):给名称为key的list中index位置的元素赋值为value

Ÿ   lrem(key, count, value):删除count个名称为key的list中值为value的元素。count为0,删除所有值为value的元素,count>0从头至尾删除count个值为value的元素,count<0从尾到头删除|count|个值为value的元素。

Ÿ   lpop(key):返回并删除名称为key的list中的首元素

Ÿ   rpop(key):返回并删除名称为key的list中的尾元素

Ÿ   blpop(key1, key2,… key N, timeout):lpop命令的block版本。即当timeout为0时,若遇到名称为key i的list不存在或该list为空,则命令结束。如果timeout>0,则遇到上述情况时,等待timeout秒,如果问题没有解决,则对key i+1开始的list执行pop操作。

Ÿ   brpop(key1, key2,… key N, timeout):rpop的block版本。参考上一命令。

Ÿ   rpoplpush(srckey, dstkey):返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部

对Set操作的命令

Ÿ   sadd(key, member):向名称为key的set中添加元素member

Ÿ   srem(key, member:删除名称为key的set中的元素member

Ÿ   spop(key:随机返回并删除名称为key的set中一个元素

Ÿ   smove(srckey, dstkey, member) :将member元素从名称为srckey的集合移到名称为dstkey的集合

Ÿ   scard(key:返回名称为key的set的基数

Ÿ   sismember(key, member) :测试member是否是名称为key的set的元素

Ÿ   sinter(key1, key2,…key N:求交集

Ÿ   sinterstore(dstkey, key1, key2,…key N:求交集并将交集保存到dstkey的集合

Ÿ   sunion(key1, key2,…key N:求并集

Ÿ   sunionstore(dstkey, key1, key2,…key N) :求并集并将并集保存到dstkey的集合

Ÿ   sdiff(key1, key2,…key N:求差集

Ÿ   sdiffstore(dstkey, key1, key2,…key N) :求差集并将差集保存到dstkey的集合

Ÿ   smembers(key) :返回名称为key的set的所有元素

Ÿ   srandmember(key) :随机返回名称为key的set的一个元素

对zset(sorted set)操作的命令

Ÿ   zadd(key, score, member):向名称为key的zset中添加元素member,score用于排序。如果该元素已经存在,则根据score更新该元素的顺序。

Ÿ   zrem(key, member) :删除名称为key的zset中的元素member

Ÿ   zincrby(key, increment, member:如果在名称为key的zset中已经存在元素member,则该元素的score增加increment;否则向集合中添加该元素,其score的值为increment

Ÿ   zrank(key, member:返回名称为key的zset(元素已按score从小到大排序)中member元素的rank(即index,从0开始),若没有member元素,返回“nil”

Ÿ   zrevrank(key, member:返回名称为key的zset(元素已按score从大到小排序)中member元素的rank(即index,从0开始),若没有member元素,返回“nil”

Ÿ   zrange(key, start, end):返回名称为key的zset(元素已按score从小到大排序)中的index从start到end的所有元素

Ÿ   zrevrange(key, start, end):返回名称为key的zset(元素已按score从大到小排序)中的index从start到end的所有元素

Ÿ   zrangebyscore(key, min, max):返回名称为key的zset中score >= min且score <= max的所有元素

Ÿ   zcard(key):返回名称为key的zset的基数

Ÿ   zscore(key, element):返回名称为key的zset中元素element的score

Ÿ   zremrangebyrank(key, min, max):删除名称为key的zset中rank >= min且rank <= max的所有元素

Ÿ   zremrangebyscore(key, min, max) :删除名称为key的zset中score >= min且score <= max的所有元素

Ÿ   zunionstore / zinterstore(dstkeyNkey1,…,keyN, WEIGHTS w1,…wN, AGGREGATE SUM|MIN|MAX):对N个zset求并集和交集,并将最后的集合保存在dstkeyN中。对于集合中每一个元素的score,在进行AGGREGATE运算前,都要乘以对于的WEIGHT参数。如果没有提供WEIGHT,默认为1。默认的AGGREGATE是SUM,即结果集合中元素的score是所有集合对应元素进行SUM运算的值,而MIN和MAX是指,结果集合中元素的score是所有集合对应元素中最小值和最大值。

对Hash操作的命令

Ÿ   hset(key, field, value):向名称为key的hash中添加元素field<—>value

Ÿ   hget(key, field):返回名称为key的hash中field对应的value

Ÿ   hmget(key, field1, …,field N):返回名称为key的hash中field i对应的value

Ÿ   hmset(key, field1, value1,…,field N, value N):向名称为key的hash中添加元素field i<—>value i

Ÿ   hincrby(key, field, integer):将名称为key的hash中field的value增加integer

Ÿ   hexists(key, field):名称为key的hash中是否存在键为field的域

Ÿ   hdel(key, field):删除名称为key的hash中键为field的域

Ÿ   hlen(key):返回名称为key的hash中元素个数

Ÿ   hkeys(key):返回名称为key的hash中所有键

Ÿ   hvals(key):返回名称为key的hash中所有键对应的value

Ÿ   hgetall(key):返回名称为key的hash中所有的键(field)及其对应的value

持久化

Ÿ   save:将数据同步保存到磁盘

Ÿ   bgsave:将数据异步保存到磁盘

Ÿ   lastsave:返回上次成功将数据保存到磁盘的Unix时戳

Ÿ   shundown:将数据同步保存到磁盘,然后关闭服务

远程服务控制

Ÿ   info:提供服务器的信息和统计

Ÿ   monitor:实时转储收到的请求

Ÿ   slaveof:改变复制策略设置

Ÿ   config:在运行时配置Redis服务器

 

 

获取Redis所有Key / 删除指定前缀的Key

获取Redis所有Key的方法:

1. 终端

获取所有Key命令:redis-cli keys ‘*’  ;

获取指定前缀的key:redis-cli KEYS “edu:*”

如果需要导出,可以redis-cli keys ‘*’ > /data/redis_key.txt

删除指定前缀的Key    redis-cli KEYS “edu:*” | xargs redis-cli DEL

 

2. PHP获取Redis所有Key

获取Redis所有Key:$keys = $redis->keys(‘*’);

获取指定前缀的Key:$keys = $redis->keys(‘edu*’);

删除指定前缀的Key :$redis->delete($redis->keys(‘image*’));

转自http://blog.lunastudio.cn/?p=153

wordpress Gravatar 都被墙了修复

编辑当前主题的functions.php文件,在底部加入

//头像使用duoshuo缓存
function get_avatar_deadwood( $avatar ) {
  $avatar = preg_replace( "/http:\/\/(www|\d).gravatar.com/","http://gravatar.duoshuo.com",$avatar );
  return $avatar;
}
add_filter( 'get_avatar', 'get_avatar_deadwood' );

打开wp-includes/pluggable.php文件,你可以找到这样一段代码

if ( 'mystery' == $default )

删除这个if判断,或者使他判断条件失效

if ( 'mystery' == '2B' )

搞定

查看Apache log,进行log排序

最近网站老是被刷,以前没对log进行分析和排序过。今天正在学习,总结总结:
日志第一个字段就是ip地址,字段之间分隔符是空格:
1. 使用awk:(awk默认分割符就是空格,所以-F选项可以不要)
awk -F ' ' '{print $1}' /var/www/html/apache-tomcat-7.0.27/logs/localhost_access_log.2012-12-27.txt | sort | uniq -c | sort -u
使用awk命令输出每行的第一列 ,-F ‘ ’表示每一行上字符串之间间隔符号是空格,完了用sort排序,接着用uniq -c累计,然后再次用sort  -u对累计结果排序。
2.使用cut:(需要注意的是,cut默认的分隔符是<tab>,所以-d选项是必须要的)
cut -d ' ' -f1 /var/www/html/apache-tomcat-7.0.27/logs/localhost_access_log.2012-12-27.txt | sort | uniq -c | sort -u
原理同上了。
通过ip数量的统计,将攻击IP添加到iptables