2010年5月

Apache2配置反向代理ProxyPass时设置header

如果不需要设置附加的header,通常:



折叠复制代码




  1. ProxyPass /static/js http://127.0.0.1/




如果在反向代理时,需要设置附加的header,则可放在一个location中



折叠复制代码




  1. <Location/static/js/>

  2.     RequestHeader set Host 'js.sohu.com'

  3.     ProxyPass http://127.0.0.1/

  4. </Location>




注意:此时的PrxoyPass不能有2个参数,就只需要一个反向代理后的url参数


其实,和Nginx的就很类似了,以下为Nginx的配置



折叠复制代码




  1. location ^~ /static/js/

  2. {

  3.     proxy_set_header Host js.sohu.com;

  4.     proxy_pass http://127.0.0.1/;

  5. }



Google Earth测量上班距离

用Google Earth大概画了2条上班路线,并分别测量了2条路线的距离


一条是骑自行车沿林萃路,耗时45分钟,测量距离大概11.25km


一条是坐355走八达岭高速,耗时1小时左右,测量距离大概12.5km


看来,沿林萃路走,还是能近不少的~


 

昕昕今日语录

今天早上,把我送到楼梯口后


是这么说的:


爸爸,遇到堵车就别走,遇到绿灯就行,红灯就停...

Mysql数据库平滑更新迁移总结

最近,我们对免费和vip邮箱的地址簿进行了升级

 

实际上,主要是升级Mysql数据库

 

对一些表进行了分表(一个大表user_addr按userid进行hash分成若干个小表user_addr_x),分区(按照对应的进行range分区)处理

 

并把一部分数据(主要是最近联系人、临时联系人等信息)转移到Mongodb中存储

 

为了在升级期间,尽可能不影响用户的使用,在和DBA讨论后,使用了如下策略,基本上做到了无缝迁移:

 

  1. 新Mysql服务器Mysql2上启动一个实例,建立相关的表结构,并进行相应的分表和分区。
  2. 在Mysql2上新建一个触发器(根据user_addr表中插入的uid进行hash,确定小表的名字user_addr_x),把主表的数据同步到小表中。

  3. 从Mysql1上dump一份数据,通过一个小程序,将数据分别插入到Mysql2上对应的小表(user_addr_x)中。
  4. 把Mysql2作为Mysql1的一个Slave启动(经DBA测试,Master上普通表可以正常同步到Slave上对应的分区表),这样,用户修改的数据能即时同步到Mysql2对应的小表中。
  5. 准备新的应用程序,实现一个mysql的proxy层,根据uid来获取小表的表明,进而再执行其它的SQL语句。
  6. 新应用程序上线后,自动会往Mysql2中写入,此时断掉Mysql2和Mysql1的同步关系,把Mysql2作为主Master启动。

 

在迁移过程中,DBA还使用了Mysql的BlackHole存储引擎,主要因为Mysql1上还有其它的DB,而我们只需要同步地址簿的DB

 

于是,DBA将其它库表的引擎都设置成了BlackHole,这样,虽然会执行二进制log的sql,但实际上并不会把数据写入真正的DB

 

另外,分表之后,对于之前我们使用的自增字段,我们使用了Mysql的消息队列插件Q4M,从消息队列中获取一个id,然后作为主键插入到小表中

 

经过一段时间的使用,发现它还是比较稳定的,Q4M的使用参见我之前的文章“Mysql的消息队列插件Q4M

 

平滑升级Nginx服务器

一般,我们升级nginx的版本时


首先会杀掉旧的nginx进程,然后替换二进制nginx文件,最后再启动nginx


但如果某些重要的服务器,在升级nginx过程中,不能停止服务时


就可以使用nginx来平滑升级,使服务不间断,过程很简单:



折叠复制代码




  1. #备份旧的nginx  

  2. mv /root/nginx/sbin/nginx /root/nginx/sbin/nginx.$cdate  

  3. #拷贝新的nginx  

  4. cp nginx /root/nginx/sbin/nginx  

  5. #验证conf文件的正确性  

  6. /root/nginx/sbin/nginx -t -c /opt/conf/nginx.conf  

  7. #发送USR2信号  

  8. kill -USR2 `cat /opt/log/nginx.pid`  

  9. #平滑关闭老的nginx进程  

  10. kill -QUIT `cat /opt/log/nginx.pid.oldbin`  






在发送USR2信号后,旧的nginx进程的pid文件被mv成nginx.pid.oldbin


新起的nginx进程的pid文件为nginx.pid


当旧nginx进程的所有连接都已经断掉后,则旧的nginx进程会全部退出

昕昕早上送爸爸上班

最近几天骑车上班


昕昕都会送我到楼梯口(这可没人教他,都是他自己的想法~)


从我开始搬自行车开始


他就一个手扶着车的后边


边走边说:我来帮忙(估计这话是从巧虎里面学来的~)


然后,他一直跟着我走到楼梯口


接着,他松了手,还要像模像样的交代我几句活


今天早上,他这么说的:


爸爸,不要踩到水坑了,遇到红灯就停,遇到绿灯就走~


昨天早上,他送我出门说的是:


爸爸,晚上早点回来~


别看他人小,还挺有思想的,呵呵



Nginx+FastCGI+PHP

以前,一般都是在Apache上跑Php,配置:



折叠复制代码




  1. LoadModule php5_module  modules/libphp5.so  

  2. AddType application/x-httpd-php .php  






我们现在的webserver基本都转向Nginx了,可以通过Fastcgi来跑php脚本


编译php如下:



折叠复制代码




  1. #编译php,注意需要--enable-fastcgi  

  2. ./configure --prefix=/usr/local/php --enable-sockets --with-config-file-scan-dir=/opt/work/conf/ --with-config-file-path=/opt/work/conf/php.ini --with-mysql=/usr/local/mysql --with-gd=/usr/local/php/gd --with-freetype-dir=/usr/local/php/freetype --with-jpeg-dir=/usr/local/php/jpeg --enable-gd-native-ttf --enable-mbstring --with-png-dir=/usr/local/php/libpng --enable-safe-mode --enable-fastcgi  






下载一个spawn-fcgi,使用它来管理php的fastcgi进程


启动脚本:



折叠复制代码




  1. pgrep -f php-cgi | xargs kill -9  

  2. sleep 2  

  3. /opt/work/sbin/spawn-fcgi -a 127.0.0.1 -p 9000 -u nobody -f /usr/local/php/bin/php-cgi   

  4. ps -ef | grep php-cgi  






配置Nginx:



折叠复制代码




  1. # 配置Nginx    

  2.  location ~ .*.(php|php5)?$     

  3.  {    

  4.      root  /opt/work/html;    

  5.      fastcgi_pass   127.0.0.1:9000;    

  6.      fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;    

  7.      fastcgi_index  index.php;    

  8.      include        /opt/work/conf/fastcgi_params;    

  9.  }    






注意:需要有fastcgi_param  SCRIPT_FILENAME这个配置,php的fastcgi使用它来确定脚本的路径,否则访问nginx会报:


No input file specified
<
/span>

最新文章

最近回复

  • feifei435:这两个URI实际是不一样的
  • zsy: git push origin 分支 -f 给力!
  • 冼敏兵:简单易懂,good fit
  • Jack:无需改配置文件,看着累! # gluster volume se...
  • Mr.j:按照你的方法凑效了,折腾死了。。。。
  • zheyemaster:补充一句:我的网站路径:D:\wamp\www ~~菜鸟站长, ...
  • zheyemaster:wamp2.5(apache2.4.9)下局域网访问403错误的...
  • Git中pull对比fetch和merge | 炼似春秋:[…] 首先,我搜索了git pull和git fe...
  • higkoo:总结一下吧, 性能调优示例: gluster volume s...
  • knowaeap:请问一下博主,你维护的openyoudao支持opensuse吗

分类

归档

其它