利用rewrite在apache中实现子目录跳转成子域名

在网上搜了好多,都不管用,最后还是朋友发给我的

RewriteEngine on

Redirect 301 /bbs http://bbs.myhnet.cn
Redirect 301 /blog http://blog.myhnet.cn
Redirect 301 /spaces http://spaces.myhnet.cn

直接用redirect,比用rewriterule来的快多了

从pfx文件得到crt以及key文件

IIS一般使用pfx文件,而apache却使用的是crt+key文件,有时候客户只给pfx文件,这个时候,就要直接进行转换了

以下操作如pfx文件没有设置密码,请直接敲回画
从pfx文件得到key文件:

openssl pks12 -in site.pfx -nocerts -nodes -out site.key

从pfx文件得到crt文件

openssl pkcs12 -in site.pfx -clcerts -nokeys -out site.crt

利用apache的proxy来做负载均衡

虽然很早以前就知道得用apche的mod_proxy可以用来做负载均衡,可由于太懒,一直都没有去做。今天刚好工作上也要做这个,所以就实验了一把。

要使用apache的负载均衡功能,首得得开启下面这几个模块:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so

其中mod_proxy提供代理服务器功能,mod_proxy_balancer提供负载均衡功能, mod_proxy_http让代理服务器能支持HTTP协议。

然后,要在httpd.conf中加入这么一段配置:

ProxyRequests Off
<Proxy balancer://mycluster>
    BalancerMember http://192.168.0.1
    BalancerMember http://192.168.0.2
</Proxy>
ProxyPass /mycluster !
ProxyPass / balancer://mycluster
<Location /mycluster>
    SetHandler balancer-manager
    Order Deny,Allow
    Deny from all
    Allow from localhost
</Location>

从上面的 ProxyRequests Off 这条可以看出,实际上负载均衡器就是一个反向代理, 只不过它的代理转发地址不是某台具体的服务器,而是一个 balancer:// 协议:

ProxyPass / balancer://mycluster

下面那段是用来监视负载均衡的工作情况的,然后访问 http://localhost/mycluster/ 即可看到负载均衡的工作状况。你也可以利用这个工具将其中某一个终端要暂时从集群中移出,或者临时修改某个终端的参数(如factor等)。

这个地方要特别注意的是下面这行配置:

ProxyPass /mycluster !

如果没有这行配置,当你访问http://localhost/mycluster/也会被转发到终端上去。

改完之后重启服务器,访问你的Apache所在服务器的地址,即可看到负载均衡的效果了。 打开 mycluster的界面,可以看到请求是平均分配的。

当然,你也可以像我这个配置这样修改其中的某些参数,来获得最大的负载均衡的功效

ProxyRequests Off
ProxyPass /mycluster !
ProxyPass / balancer://mycluster/ stickysession=BALANCEID
ProxyPassReverse / http://192.168.0.1/
ProxyPassReverse / http://192.168.0.2/
<Proxy balancer://mycluster>
        BalancerMember http://192.168.0.1 route=http1 loadfactor=7
        BalancerMember http://192.168.0.2 route=http2 loadfactor=3
        ProxySet lbmethod=byrequests
</Proxy>
<Location /mycluster>
    SetHandler balancer-manager
    Order Deny,Allow
    Deny from all
    Allow from localhost
</Location>

其中,stickysession=BALANCEID设置根据下面的route=http1/2来进行session的绑定。因为很多网站的变量,如登陆信息等,可能是储存在服务器端的内存中的,如果不设置这个变量,用户来访问是还是不段的在不同的终端之间切换,用户就会不停的退出
loadfactor=7这个是设置不同的终端的负载均衡的权重,数值越来,转发的数量就越多。
而ProxySet lbmethod=byrequests是用来设置负载均衡的算法。通常有三种取值:byrequests(按照请求次数均衡,默认值),bytraffic(按照流量均衡),bybusyness(按照繁忙程度均衡)。

od_deflate has been requested but can not be built due to prerequisite failures

在编绎apache时开启了–enable-deflate这个选项,结果就报了这个错

od_deflate has been requested but can not be built due to prerequisite failures

还好比较容易解决,只需要安装一个zlib-devel包就可以了。

只是在Mandriva Linux下安装这个费了点劲,购买的服务过期了,urpmi不能直接安装了,还好找到了包名,在网上一搜就找到一个可以下载的,也没花多少时间

ssl_error_rx_record_too_long

今天早上换了服务器的ssl证书,却有人报告说在外网打不开网站。
我一测试,用IE还真的是打不开。换firefox,发现报了这个错误

SSL 接收到一个超出最大准许长度的记录。

(错误码: ssl_error_rx_record_too_long)

英文:

SSL received a record that exceeded the maximum permissible length.

在网上一搜,很快就在这里找到了答案。

<VirtualHost>

这个标签里面,我的同事也在里面写上了自己的域名,我把这个记录改成了

<VirtualHost *:443>

然后就可以了。

为Apache安装日志分析工具Awstats

由于apache日志太过于庞大,光借助中国站长网的免费统计工具来分析还是远远不够,所以想在本地安装一个Awstats来进行分析。

我们的安装环境是CentOS52:
Awstats下载地址:http://prdownloads.sourceforge.net/awstats/awstats-6.9.tar.gz
如果是其他系统,请到这里下载:http://awstats.sourceforge.net/#DOWNLOAD

安装Awstats
下载并解压:

# wget http://prdownloads.sourceforge.net/awstats/awstats-6.9.tar.gz
# tar -xvf awstats-6.9.tar.gz
# mv awstats-6.9 /usr/local/awstats

Read More »

使用mod_jk时apache响应超时

今天碰到一个问题,apache只要一使用mod_jk,响应就会超时,但是只要把mod_jk的部分去掉,倒一切正常。
开始怀疑是tomcat的问题,重启了好几次tomcat,最后连机器都重启了,还是没有解决问题。
到最后,经高人指点,才知道是mod_jk的日志文件已经超过了2G,apache不支持大文件才会出这个问题。
想想原来的squid也是这样子,看样子,以后还是要注意一下,是不是有文件超过2GB。

如何为自己的网站生成SSL证书

1. 首先保证安装了Openssl,并且能够在在终端执行它。
2. 为你的Apache(三倍-DES加密,PEM格式) 创建一个RSA私钥。

$   openssl   genrsa   -des3   -out   server.key   1024

请将你的server.key文件备份,并且记住你输入得进入密码。能够通过以下的命令察看该文件:

$   openssl   rsa   -noout   -text   -in   server.key

你也可以通过以下的命令创建一个没有加密的版本(不建议):

$   openssl   rsa   -in   server.key   -out   server.key.unsecure

3. 通过RSA私钥文件来创建一个证书请求文件(PEM格式,CSR)

$   openssl   req   -new   -key   server.key   -out   server.csr

同样,你需要做一个备份,同时,在Openssl命令行提示输入CommonName的过程中,你必须输入一个FQDN(一个完全的有资格的域名),一个站点生成了一个CSR请求文件。可以通过以下的命令来查看CSR的详细内容:

$   openssl   req   -noout   -text   -in   server.csr

4. 现在,你已经有了一个证书请求文件(CSR)了,你可以将此文件发送给一个认证机构来进行认证,当然会等一段时间并且花上一些钱。或者通过自己的CA认证机构来进行认证。
§ Verisign
http://digitalid.verisign.com/server/apacheNotice.htm
§ Thawte Consulting
http://www.thawte.com/certs/server/request.html
§ CertiSign Certificadora Digital Ltda.
http://www.certisign.com.br
§ IKS GmbH
http://www.iks-jena.de/produkte/ca/
§ Uptime Commerce Ltd.
http://www.uptimecommerce.com
§ BelSign NV/SA
http://www.belsign.be
通过以下的命令来察看经过认证的证书信息。

$   openssl   x509   -noout   -text   -in   server.crt

5. 现在,我们有了两个文件,server.key和server.crt ,下面就是在Apache中的httpd.conf文件配置:

SSLCertificateFile         /path/to/this/server.crt 
  SSLCertificateKeyFile   /path/to/this/server.key

请求文件不再需要了。
· 使用自认证机构:
最简单的就是通过CA.pl或者是通过CA.sh来对请求文件签名。
1. 为你的CA创建一个RSA私钥(三DES加密并且是PEM格式):

$   openssl   genrsa   -des3   -out   ca.key   1024

备份并且记住你输入的访问密码。通过以下的命令可以查看私钥的详细信息:

$   openssl   rsa   -noout   -text   -in   ca.key

你也可以创建一个非加密的PEM格式的私钥:

$   openssl   rsa   -in   ca.key   -out   ca.key.unsecure

2. 创建一个自签名的证书文件(X.509 结构,输出为PEM格式):

$   openssl   req   -new   -x509   -days   365   -key   ca.key   -out   ca.crt

通过以下的命令查询:

$   openssl   x509   -noout   -text   -in   ca.crt

3. 准备一个脚本文件来对请求文件签名,Openssl不允许简单的通过openssl ca来对请求文件签名。所以一个名为sign.sh的脚本文件(mod_ssl的子目录pkg.contrib下),是用这个来进行签名,不过还是建议使用下面的方法进行签名。

4. 现在可以用这个脚本来进行签名了(刚才生成的CA的私钥和证书必须在这个脚本的目录下):

$   ./sign.sh   server.csr

得到一个证书文件—〉server.crt.
· 怎样更改我的私钥的 pass-phrase 密码?
只需要简单的读取它并重新写入,同时指定它的pass-phrase ,通过以下的命令完成:

$   openssl   rsa   -des3   -in   server.key   -out   server.key.new 
  $   mv   server.key.new   server.key

这时,你被要求两次来输入一个PEM 的pass-phrase,第一次要求输入旧密码,第二次要求输入新密码。
· 怎样可以消除Apache启动的时候的密码(pass-phrase)提示对话框:
原因是保存在你的私钥文件中的RSA私钥是一个一加密格式保存的。密码是保证能够读取这个密钥文件,如果保证你的服务器足够的安全的话,可以通过以下的命令消除:
1. 从RSA私钥中移除密码(同时保留源文件):

$   cp   server.key   server.key.org 
  $   openssl   rsa   -in   server.key.org   -out   server.key

2. 保证私钥只能被root用户读取:

$   chmod   400   server.key

现在这是一个没有没有加密的密钥拷贝。在使用这个密钥文件的时候,将不会再提示你输入密码,然而,如果其他任何人的到这个私钥文件,他都可以在网络上模仿你。所以一定要保证这个密钥文件只能被root用户读取。
· 怎么验证私钥文件和我的证书文件是匹配的?
私钥文件包括一系列的数字。这些数字中的两个是“来自“公钥文件的,其他的是私钥的一部分。公钥的一些bit值被嵌入到你的证书中(我们可以从证书CSR中得到),通过以下的命令来查看输出的数字,同时比较这些数字:

$   openssl   x509   -noout   -text   -in   server.crt 
  $   openssl   rsa   -noout   -text   -in   server.key

他们必须一致,因为它们都是很长的串,所以可以通过下面的方法来查看:

$   openssl   x509   -noout   -modulus   -in   server.crt   |   openssl   md5 
  $   openssl   rsa   -noout   -modulus   -in   server.key   |   openssl   md5

这时比较两个短的数字串

$   openssl   req   -noout   -modulus   -in   server.csr   |   openssl   md5