2009年3月

Nginx负载均衡

Nginx可以支持多种类型的反向代理,我们常用的大概就2种:

1.普通的Http代理:
  注意:在upstream中不要使用http://backend1.example.com,而在proxy_pass中则要加上http://backend
  upstream backend  {
    server backend1.example.com weight=5;
    server backend2.example.com:8080;
    server unix:/tmp/backend3;
   }

   server {
       location / {
             proxy_pass  http://backend;
       }
   }

2.FastCGI代理:
  注意:由于fastcgi_pass不是普通的http代理,所以在fastcgi_pass中直接对应upstream的name即可      
   upstream webpys {
        server  unix:/opt/test/log/webpy.6001.sock;
        server  unix:/opt/test/log/webpy.6002.sock;
    }
    server {
       location / {
             fastcgi_pass    webpys;      
       }
   }

Apache2配置多个监听端口

1.在httpd.conf中加上:
  Listen 80
   Listen 8008


2.在extra/httpd-vhosts.conf上:
  NameVirtualHost *:8008
  


      ServerAdmin webmaster@dummy-host2.example.com
      DocumentRoot "/usr/local/resin/doc/"
      ServerName test.ysz.com
      ErrorLog "logs/test-error_log"
      CustomLog "logs/test-access_log " common
  

python中导入子目录中的py

当我们开发的项目比较大时,源文件也许是按照目录结构来存放的
这样,就类似于java的package
如果我们需要下级目录的py文件,可以有以下方法:
1.sys.path.append('folder')
   然后直接import folder.test
2.在下级目录folder下放一个__init__.py文件,表明把目录作为一个module来对待
  然后直接import folder.test


如果需要导入上层目录的py文件,则:
sys.path.append("..")
然后再import test

pop3协议的简单使用

远程的telnet到pop3服务器上,发送简单的命令:

telnet 192.168.0.1 110
    +OK smtp.sohu.com POP3 Server Ready
user username
     +OK Password required for "username@sohu.com"
pass password
     +OK Authentication succeeded
stat
     +OK 113 4835773(收件箱中有113封邮件,总大小为46KB)
list
     +OK 113(列出所有的邮件编号和对应的大小)
     1 518233
     2 589027
     3 5568
list 1
     +OK 1 518233
top 1 0
     +OK Top of message follows(列出第1封邮件的信头和前0行的内容)
retr 3
     +OK 5568(取回第3封邮件)
uidl
     +OK(取得信件对应的唯一标示符)
dele 1
     +OK(标记第1封信件为删除信件,只有在quit后才会真正的删除)
rset
     +OK(复位会话,之前标记为删除的信件将取消标记)
noop
     +OK NOOP: successed.(空命令)
quit
     +OK smtp.sohu.com POP3 Server signed off.

python的yield

yield语句是从Python2.2开始引入的
它只能用在一个generator(生成器)中,作为一个语句来执行并返回结果
当调用改generator的next方法时,会从上次的yield语句开始继续执行....

在python2.5中对yield进行了增强:
1.yield不再是一个语句,而是一个expression(表达式)了,这样我们就可以这样来使用了:  
  y = yield 6
2.增加了一个send(msg)函数:
  当执行send(msg)函数后,msg参数将会替代整个yield x表达式的值
  而next方法则相当于是执行了send(None)函数
  send和next函数其实都是有返回值的,是下个yield的参数值(注意:不是整个yield表达式的值)。
3.增加了throw GeneratorExit方法,可以用来中断该generator方法
4.增加了close()方法,其实和throw的作用差不多。


通过下面这个列子,大概能明白yield的用法了:
# -*- coding: cp936 -*-

def gen():
    for i in xrange(5):
        print 'i: %d' % i
        m = yield i
        print 'm: ', m

g = gen()
n = g.next()
print 'g: %d' % n
n = g.next()
print 'g: %d' % n
n = g.send(6)
print 'g: %d' % n
n = g.send(None)
print 'g: %d' % n
g.throw(GeneratorExit)
n = g.next()



Windows共享问题

一、无法找到共享内容


当我们在“运行”中输入“共享计算机名(IP地址)”时,却弹出找不到的提示,这种情况下多是因为启用了默认的Windows防火墙。对此,我们只需要右击“网上邻居”图标,打开属性窗口,然后再打开“本地连接”的属性窗口,切换到“高级”标签,单击 “Windows防火墙”处的“设置”按钮,然后在“例外”标签中选中“文件和打印机共享”选项即可。


二、无法选择账户


继续上一步的问题,在访问指定的共享文件夹时,弹出登录窗口,但是在该窗口中用户名处却只有 Guest,并且呈灰色状态不可修改其它用户。这是XP的验证方式不正确所导致的。对此,我们只需要进入控制面板,在“管理工具”中打开“本地安全策略”,然后在左侧选择“本地策略—安全选项”,双击右侧的“网络访问:本地账户的共享和安全模式”,在打开的窗口中将其设为“经典—本地用户以自己的身份验证”即可。


三、默认来宾无法访问


用户已经启用Guset了,但是却仍然无法访问共享内容。这时你可以继续打开本地安全策略,然后在左侧选择“本地策略”下的“用户权利指派”,双击右侧的“拒绝从网络访问这台计算机”,然后将其中的Guest账户删除即可。


四、授权用户也不行


在访问共享内容时,需要用户输入用户名和密码,但是用户输入已经授权的账号,但是却仍然登录失败。这时不防看看你的登录账户是否为空密码,如果是空密码,那么则可以本地安全策略中,依次选择“本地策略—安全选项”,然后双击“账户:使用空白密码的本地账号只允许进行控制台登录”,将其禁用即可。


这只是在XP下共享应用中出现比较多的一些错误,其实导致这些错误的大多是因为设置上不合理所造成的,只要找到源头自然可以轻松解决。

Eclipse和Resin的结合

使用Myclipse好久了,习惯了里面集成的各种插件了
尤其是Resin的plugin,可以直接在MyEclipe里面配置部署
它会自动的编译和拷贝你的文件到Resin的Webapps下面

最近换用了Eclipse For JEE后,发现它的Server里面不支持Resin
也是,就上网找Resin For Eclipse的插件,发现了一个:

在线安装后,试用了一下,发现并不怎么理想
http://www.improve-technologies.com/alpha/updates/site.xml

后来,静下来仔细想想,真是犯晕了
其实根本就用不着那些所谓的插件
只需要在resin.conf中把虚拟目录的路径指到你的project下的web目录即可
如:

这样,在Eclipse中修改文件后,完全也不用重启resin即可马上生效
当然,前提是已Debug的模式启动Resin,加上-Xdebug,默认这个是打开的
为什么非要把project给弄到Resin的Webapps下呢

其实,上面的那个方法在很早之前就在用了
不过,自从用了MyEclipse后就把它给抛弃了
结果,脱离MyEclipse后就不知道该怎么办了
看来,过分依赖IDE确实不是一件什么好事......

Java中获取文件路径的分隔符

如果一个应用既要运行在Windows系统上
又可能会运行在Linux系统上
那么如何定义一个通用的文件路径分隔符呢
可以通过下面方法来获取
System.getProperty("file.file.separator")

其实,Java的System类提供了很多的系统属性
如:操作系统名字,版本,虚拟机的名字.....
可以通过
System.getProperties().keySet()
来取得系统所有的属性列表



Nginx的Rewrite指令

Rewrite指令

rewrite regex replacement flag

后面的flag可以是:

last - completes processing of rewrite directives, after which searches for corresponding URI and location

break - completes processing of rewrite directives

redirect - returns temporary redirect with code 302; it is used if the substituting line begins with http://

permanent - returns permanent redirect with code 301


需要注意的是,如果rewrite后,不要它再去匹配其它的location,则需要加上break,如:



折叠复制代码




  1. location ^~ /html/l/

  2. {

  3. root /opt/docparser;

  4. rewrite "^/html/l/(.*)$" /$1;

  5. #注意,需要有break,否则rewrite后还会继续匹配下面的location

  6. break;

  7. }

  8. location ~ /(.*)$ {

  9. proxy_pass http://127.0.0.1:8080;

  10. }




rewrite可以和proxy_pass配合使用:



折叠复制代码




  1. location ^~ /address/

  2. {

  3. rewrite /address/(.+)$ /$1 break;

  4. proxy_pass http://mail_addr;

  5. }




注意,rewrite后的url是包含后面的get参数的,不需要手工加上?$args的


另外,rewrite后,再转发时,使用proxy_pass指令时,里面似乎不能带参数

最新文章

最近回复

  • 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吗

分类

归档

其它