存档

2008年8月 的存档

DNS漏洞(CERT VU#800113)

2008年8月7日 baalchina 没有评论

DNS漏洞解析
最近炒的比较火的一个漏洞是 DNS 协议本身发现的一个严重问题(CERT VU#800113)。国内媒体对此的报道多数都语焉不详,因此我想有必要说说这个漏洞到底是怎么回事。

首先我们要明确的第一个问题是,DNS查询是如何进行的?对于绝大多数桌面系统来说,DNS的查询并不是由自己的机器完成的,DNS查询会提交给另一台DNS服务器(这台服务器通常是由ISP或者公司提供),然后这台服务器再去进行真正的查询操作。这样做的好处是DNS的查询结果可以由这台机器给缓存下来,从而提高查询效率并降低由DNS带来的流量开销(当然,在今天这种开销已经是可以忽略不计的了)。

我们可以看到的一个情况是,一台缓存DNS服务器(与权威DNS相对,这类系统提供的)下面的桌面系统可能有几百、几千、几万甚至几十万台,从攻击的有效性而言,如果能够影响这台服务器的话,相比攻陷其下的桌面系统而言,成本便会降低很多,这种攻击我们通常称之为杠杆式攻击。

针对缓存DNS服务器的杠杆式攻击其实从很早就有研究,除了希望通过劫持网站流量来牟利的骇客之外,还有一些人使用这种方法达到一些其他的目的,例如屏蔽存在安全问题的网站,以及在一些国家存在的互联网内容净化处理等等。

本次VU# 800113是一个足以引起人们重视的问题,尽管它采用的仍然是"Cache 投毒"(cache poisoning)的方法,但这种方法采用了一些新的技巧来使其更加有效。具体来说,DNS的查询过程是由客户端(无论是桌面计算机,或是缓存DNS服务器发起的查询)发出一个到权威DNS服务器(可能是根DNS,也可能是具体域名的权威DNS)一个UDP请求,然后等待其回应。

UDP是一种无连接的协议,为了能够识别来自不同服务器的回应,DNS协议利用端口和一个称为TXID的识别符(类似TCP的序号)来区分它们。事实上,早期的DNS协议实现甚至会使用固定的端口来发起DNS请求,这样一来,TXID就成了识别回应的唯一标识。由于DNS协议是在上世纪70年代设计的,因此TXID序号只有16个bit宽,而另一方面,伪造UDP包的来源地址又很容易(因为UDP并没有提供类似TCP那样内建的防止此类攻击的机制),因此,攻击者只需设法让DNS缓存服务器相信自己伪造的来自权威DNS的回应是真实的,就可以达到目的了。

具体地说这种攻击包括两个部分,其一是设法让缓存DNS服务器发起新的DNS查询请求(有很多方法),其二则是发出大量的伪造包并期待其命中,也就是在真实的权威DNS回应之前,将伪造的,但端口和TXID均能匹配的UDP回应发到缓存DNS服务器。

对于一些以线性递增方式来产生TXID的DNS客户端而言,攻击者可以自行架设一台DNS服务器、诱使对方发出DNS请求,从而大大提高攻击的效率。对于采用固定端口的DNS客户端来说,攻击者可以通过类似的手段来获取他关心的信息。攻击者可以用各种方式来达到这种目的,包括钓鱼邮件,也包括直接发起查询等等。

本次VU #800113所描述的问题是,多数DNS缓存服务器实现都存在这两种弱点之一或全部。

说完攻击的原理,我想更多的人关心的问题会是:我们能够做点什么?

如果你是一名桌面用户,那么最好的办法是等待公司或ISP的工作人员修正问题,通过安装适当的补丁,能够消除以上两种弱点。对于 FreeBSD 用户,减轻这类问题影响的办法是在 /etc/rc.conf 中加入 named_enable="YES",执行 /etc/rc.d/named restart 并在 /etc/resolv.conf 中将 127.0.0.1 配置为域名服务器,这样一来攻击缓存服务器一点便变成了攻击所有的桌面系统,从而大大提高攻击的成本,但缺点是这样做意味着无法利用上游 DNS 的缓存。

如果你是缓存DNS服务器的管理员,那么除了需要打补丁之外(如果你的系统中存在这个漏洞),还需要考虑部署DNSsec。DNS协议的漏洞通过随机化查询端口和TXID只能部分缓解,而DNSsec才是解决问题的根本。

如果你是权威DNS服务器的管理员,那么事实上你做不了什么,因为缓存DNS服务器并不受你控制。唯一可以做的事情就只剩下为自己的权威域名配置DNSsec了。遗憾的是,目前并不是所有的顶级域名,以及域名注册服务提供商都支持DNSsec。

========

一些常见的误解。

误解A:靠,又是那个破烂BIND的漏洞,我不用BIND所以没事。
错。除了BIND之外,也有很多其他DNS服务器作为缓存DNS使用时会遇到同样的问题。

误解B:我的Ubuntu系统第一时间修补了这个问题,所以我不受影响。
错。除非你在本地运行DNS缓存服务,并只使用它作为DNS。

误解C:我是打酱油的,DNS被攻击跟我没关系,顶多给人家增加点流量而已,不碍事。
错。通过DNS Cache投毒攻击可以将你引导到一些伪造的钓鱼站点来骗取敏感数据。

误解D:我的权威DNS服务器配置了DNSsec,所以客户一定会访问到正确的网站。
错。事实是,许多早期的DNSsec实现都引入了其他安全漏洞;另一方面,多数缓存DNS服务器并不进行DNSsec校验,因此你仍然需要其他一些手段来减轻这个问题的影响。

全球DNS系统需要来一次DNSsec俯卧撑。

http://blog.delphij.net/archives/2008/07/dns-1.html
http://www.isc.org/index.pl?/sw/bind/index.php

分类: DNS 标签: , , ,

如何注册一个.edu域名

2008年8月7日 baalchina 没有评论

.edu domain name registration is limited to fully accredited postsecondary institutions of higher learning, such as four-year colleges. .edu domain registration is for the most part limited to schools located in the United States. .edu domain name registration is handled exclusively by EDUCAUSE, a nonprofit organization working to promote the intelligent use of information technology in education. Their FAQ provides complete eligibility information.

也就是说.edu域名只对美国的大学开放的。不过看到一个韩国的学校也在用.edu域名?奇怪...

分类: 未分类 标签: ,

Wordpress的Rewrite/永久链接(permalinks )设置

2008年8月7日 baalchina 没有评论

wp的rewrite机制和之前遇到的DZ等不同,稍费了点功夫。

  1. 首先Apache必须要支持Rewrite,加载好mod_rewrite。
  2. 其次,WP处理的规则是通过wp目录下的.htaccess文件,如果请求的不是文件或者目录,就交由index.php处理。而非通过Rewrite将连接进行静态化。所有需要将这个.htaccess设置为可写属性。
  3. Apache要使用这个.htaccess,需要在Directory目录添加“AllowOverride FileInfo, AllowOverride All”。同时还要“FollowSymLinks option”。

参考文章:

分析WordPress的Rewrite机制
http://www.black-xstar.com/blog/article.asp?id=546

WP官网文章
http://codex.wordpress.org/Using_Permalinks#Creating_and_editing_.28.htaccess.29

另外,Wordpress的.htaccsee内容如下:

1
2
3
4
5
6
7
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
分类: Apache, 未分类 标签: , ,

Nginx/Apache的SSL配置

2008年8月6日 baalchina 没有评论
  1. 首先需要升级OpenSSL和OpenSSH。后者顺带升级下,并非必须。注意顺序,先SSL再SSH。

1
2
3
4
5
6
7
8
9
#cd /usr/local/src
#wget http://www.openssl.org/source/openssl-0.9.8e.tar.gz
#wget ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-4.6p1.tar.gz
#tar xzvf openssl-0.9.8e.tar.gz
#cd openssl-0.9.8e
#./config --prefix=/usr/local/openssl
#make
#make test
#make install
1
2
3
4
5
6
#cd ..
#tar xzvf openssh-4.6p1.tar.gz
#cd openssh-4.6p1
#./configure --prefix=/usr --with-pam --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/openssl --with-md5-passwords --mandir=/usr/share/man
#make
#make install

#ssh –V

查看版本。

  1. 接下来生成对应服务器的key/crt文件

1
[root@bbs ~]#openssl genrsa -des3 -out server.key 1024

这里会提示你输入一个密码。

根据Key生成一个CSR

1
[root@bbs ~]#openssl req -new -key server.key -out server.csr

自己给自己颁发一个证书

1
[root@bbs ~]# openssl req -new -x509 -nodes -sha1 -days 365 -key server.key -out server.crt

ok,保存好.crt和.key文件。.csr文件不需要了。

Apache使用的是.crt+.key文件。而nginx使用的是.pem+.key文件。
.pem文件很简单,直接把.crt和.key复制出来,粘贴到新的.pem文件里就行了。

Apache的配置。虚拟主机部分增加:

1
2
3
4
5
6
7
8
9
10
11
12
<VirtualHost bbs.nau.edu.cn:443>
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /data/certfile/server.crt
SSLCertificateKeyFile /data/certfile/server.key
BrowserMatch ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
ServerAdmin baalchina@nau.edu.cn
DocumentRoot /data/web/bbs
ServerName bbs.nau.edu.cn:443
</VirtualHost>

如果是nginx,那么:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
   listen       443;
   server_name  bbs.nau.edu.cn;
 
   if ($uri !~* "/logging.php$") {
   rewrite ^/(.*)$ http://$host/$1 redirect;
   }
 
   ssl                  on;
   ssl_certificate      /data/certfile/server.pem;
   ssl_certificate_key  /data/certfile/server.key;
   ssl_session_timeout  5m;
   ssl_protocols  SSLv2 SSLv3 TLSv1;
   ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
   ssl_prefer_server_ciphers   on;
   }

其他部分和http server是一样的。

分类: Linux, Nginx 标签: , , ,

Windows Server修改远程桌面端口

2008年8月6日 baalchina 没有评论

废话少说,直接上文件。:lol

Windows Registry Editor Version 5.00
 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp]
"PortNumber"=dword:000004d2
 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp]
"PortNumber"=dword:000004d2

保存为mstsc.reg,运行即可。

其中dword:000004d2代表1234端口。

另外需要重启计算机,或者将远程桌面关闭,再打开。因为服务没法重启。

分类: Windows 标签: , ,

Nginx下只针对logging.php进行https处理的重写规则

2008年8月6日 baalchina 没有评论

在https server下加入如下配置:

if ($uri !~* "/logging.php$")
{
rewrite ^/(.*)$ http://$host/$1 redirect;
}

在http server下加入如下配置:

if ($uri ~* "/logging.php$")
{
rewrite ^/(.*)$ https://$host/$1 redirect;
}

最后结果就是,用户会且只会在访问logging.php的情况下,才会通过https访问。有效地避免了arp欺骗、嗅探等方法盗取账号密码的行为。

感谢nginx作者的帮助。
http://marc.info/?l=nginx&m=121663148102512&w=2

分类: Linux, Web 标签: , , ,

CentOS下的软件包管理–yum篇

2008年8月6日 baalchina 没有评论

2008-07-15 09:03
CentOS下的软件包管理--yum篇

★YUM介绍
在CentOS和Fedora Core得发行版中,采用了一种叫做yum得软件包综合管理工具,它的全称是Yellowdog Updater,Modified,这个工具并不是CentOS开发的,而是由Yellow Dog Linux开发的软件包综合管理工具。作为软件包综合管理工具除了yum外,还有DebianGNU/Linux所采用的APT和Red Hat Enterprise Linux等所采用的up2date。
它们的共同特点都是:

* 通过网络安装和升级软件包
* 自动解决软件包间的依存关系
这里请注意,Yum的软件包升级的软件包并不是最新的软件包,而是CentOS确认的安全稳定,在CentOS下能够很好的系统结合的软件包,关于最新软件包的安装更新请参照CentOS下的软件包管理--rpm篇

★Yum利用准备
在使用yum之前,最基本的事情就是要先导入GPG公开key,更改还有就是软件包下载的网站(yum配置文件中定义的软件包下载地址)。

GPG公开key
RPM软件包都有电子签名,用这个电子签名来判断软件包有没有被篡改,数据有无破损是否完整,正因为这样才要导入开发组织配布的GPG公开key。那这个GPG公开key可以从软件包发布站和CD-ROM/DVD-ROM获得,在系统下被默认安装在/usr/share/doc/centos-release-4/RPM-GPG-KEY下,这里还有一个一模一样的文件/usr/share/doc/centos-release-4/RPM-GPG-KEY-centos4。倘若你只是利用centos.org的镜像站点的话,那么这个公开key是默认被导入了的,在我们的网站上面你可以看到,非官方库利用的时候,我们也导入了这个GPG公开key,参照http://www.centospub.com/make/newenv.html下的定义非官方库的操作。
★导入GPG的公开key的方法:
#rpm –import GPGkey的路径或网络文件

★更新软件包下载镜像地址的设定
Cent0S的镜像下在网站分布在世界的很多地方,默认的设定是centos.org,中国镜像分布在中国的上海,香港还有福建。修改软件包下载镜像站点是为了提高软件包下载速度。
Yum的设定文件是/etc/yum.repos.d/CentOS-Base.repo。关于站点更改的内容请参照本站问题解答版主Chao的“CentOS终于有了中国镜像!”的文章。
在这里提醒更改文件设置的用户,一定要将原文件作备份后再修改,或者将原来的文件内容注释掉,而不是删除或覆盖原设置,并在文件中加以注释,比如什么时间更改的,由谁更改的,更改的内容等信息,这对系统的管理维护有好处。

★使用yum更新系统及软件
在本站的配置祥解中,大家多次看到我们采用了yum安装软件的内容。
关于使用yum的详细信息,大家可以参照fedore.clinux.org的使用yum管理软件的文档。

★常用的yum参数选项
使用方法
例:
#yum check-update
#yum remove 软件包名
#yum install 软件包名
#yum update 软件包名

选项

说明
check-update 显示可升级的软件包
clean 删除下载后的旧的header。和clean all相同
clean oldheaders 删除旧的headers
clean packages 删除下载后的软件包
info 显示可用软件包信息
info 软件包名 显示指定软件包信息
install 软件包名 安装指定软件包
list 显示可用软件包
list installed 显示安装了的软件包
list updates 显示可升级的软件包
provides 软件包名 显示软件包所包含的文件
remove 软件包名 删除制定的软件包,确认判定指定软件包的依存关系。
search 关键字 利用关键字搜索软件包。搜索对象是,RPM文件名,Packager(包),Dummary,Description的各型
update 升级所有的可升级的软件包
update 软件包名 升级指定的软件包

选项

说明
groupinstall 安装指定的组
groupupdate 安装了的组成员软件包更新
grouplist 安装了的组和可以安装的组一览显示
groupremove 删除指定的组
groupinfo 指定组所包含的软件包显示

http://www.21andy.com/blog/20071116/661.html

分类: Linux, 系统管理 标签: ,

Ubuntu的一些设置和安装

2008年8月6日 baalchina 没有评论

[Ubuntu]装了个,很好玩...2008-04-29 15:221、远程桌面,控制Windows用的
命令行里面输入

#sudo teclient

2、快速设置指南
http://wiki.ubuntu.org.cn/%E5%BF%AB%E9%80%9F%E8%AE%BE%E7%BD%AE%E6%8C%87%E5%8D%97

3、关于上网(针对Ubuntu 8.04,默认设置好IP还是无法上网)
静态IP配置,需要编辑

#vi /etc/network/interface

如下设置

iface eth0 inet static
address 172.16.31.11
netmask 255.255.255.0
gateway 172.16.31.253
auto eth0

注意最后的auto eth0如果不加好像无法起效。

另外重新启动网络

sudo /etc/init.d/networking restart

4、显卡驱动
很麻烦!真的很麻烦!折腾了很久。
首先是去nvidia官方网站下载驱动。是一个shell文件。
然后需要运行,但是会提示你xserver正在运行中。解决办法是进入任意console

sudo /etc/init.d/gdm stop

,就把xwindows杀掉了。

下面需要安装libc,否则会提示出错。

#sudo apt-get install libc6-dev

注意这里如果源不是最新的华,可能会遇到无法安装的问题。参见5。

然后

#sudo sh /home/xxx.run

基本一路next就可以了。

XWindow的配置文件

sudo gedit /etc/X11/xorg.conf

这时候在Xwindow下,运行

#gksudo nvidia-settings

就可以进入Nvidia的图形配置了。

还有个问题,就是设置了效果之后,Ubuntu标题栏神秘消失。
添加 Option "AddARGBGLXVisuals" "True",如下:

Section "Screen"
    Identifier     "Default Screen"
    Device         "Configured Video Device"
    Monitor        "Configured Monitor"
    DefaultDepth    24
    Option "AddARGBGLXVisuals" "True"
    SubSection     "Display"
        Virtual     1280 1024
        Depth       24
        Modes      "1280x1280@60"
    EndSubSection
EndSection

注意最后的1280x1280,如果设置成1280x1024,你就会惊喜的发现登录界面上的输入用户明密码部分超出显示器范围了...

参见:
http://www.linuxidc.com/Linux/2008-03/11710p2.htm

http://hi.baidu.com/csx163/blog/item/b57960d05f21268ba0ec9ce2.html

5、更新源。国外的源比较慢,但是国内的某些源不是最新的,更新软件可能会遇到问题。我用的中科大的,没问题。
http://wiki.ubuntu.org.cn/index.php?title=%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E6%88%91%E4%BB%AC%E6%8E%A8%E8%8D%90%E7%9A%84%E6%BA%90&variant=zh-cn

基本上,还是很麻烦,即使是大家认为比较轻松的Ubuntu。幸亏有网络,有google,有国内源,不然不知道配置到什么时候呢...再考虑到软件兼容性,毕竟Linux擅长的不是桌面系统阿。

6、关于root

Ubuntu默认无root,sudo su就到root了,用sudo passwd root来设置

PS,善用Google!

CentOS下的PHP安全

2008年8月6日 baalchina 没有评论

打造安全的CENTOS服务器---php安全
2008-08-05 22:11:13 来源:中国站长站 作者:编辑整理 【大 中 小】 评论:0 条
http://www.chinaz.com/Server/Safe/0P534HR008.html

软件配置:

httpd-2.0.52-28.ent.centos4

php-4.3.9-3.15

1、开启安全模式(做为商业应用的服务器不建议开启)

复制内容到剪贴板

代码:

#vi /usr/local/Zend/etc/php.ini            (没装ZO时php.ini文件位置为:/etc/php.ini)
 
safe_mode = On

2、锁定PHP程序应用目录

复制内容到剪贴板

代码:

#vi /etc tpd/conf.d irtualhost.conf

加入

php_admin_value open_basedir /home/*** (***为站点目录)

3、千万不要给不必要的目录给写权限,也就是777权限,根目录保持为711权限,如果不能运行PHP请改为755

4、屏蔽PHP不安全的参数(webshell)

复制内容到剪贴板

代码:

 
#vi /usr/local/Zend/etc/php.ini           (没装ZO时php.ini文件位置为:/etc/php.ini)
 
disable_functions = system,exec,shell_exec,passthru,popen

以下为我的服务器屏蔽参数:

分类: Apache, PHP 标签: , , ,

Nginx+Apache2+SSL的Web服务器配置

2008年8月6日 baalchina 没有评论

最近一直困扰于Apache2负载过高的问题。CPU始终在70%以上,晚上的高峰直接是页面打开很慢很慢,又到了当初Apache2 MPM模块没有配置好时候的情况了...不过那个时候的CPU不高,还有发挥余地,现在就有点头疼了。

学校是不大可能给你升级服务器的了,于是下决心把Apache2换成了Nginx。

Nginx的介绍不说了,google上很多。就是一个俄罗斯的,大家都认为很牛X的Web Server。比较头疼的就是他的中文文档少之又少。

参照了Discuz!商业区的文章,利用Nginx,将PHP请求转发给Apache2,由后者负责处理。并未采用网上介绍的比较多的FastCGI模式。

1、首先是安装Nginx。我的配置模式如下:

#./configure \
"--with-http_stub_status_module" \
"--with-http_addition_module" \ 
"--with-http_realip_module " \
"--with-pcre=/usr/src/pcre-7.7/" \
"--with-http_ssl_module" \ 
"--with-openssl=/data/soft/openssl-0.9.8e/" \ 
#make
#make install

需要注意的是那个pcre7.7,Perl Compatible Regular Expressions,在使用Discuz!以及其他程序的Rewrite的时候会用到。
OpenSSL是用于HTTPS的,如果不需要可以不编译。
Pcre以及OpenSSL的目录都是它源代码的目录,而不是它的安装目录。
Stub-status是一个状况模块,可以查看Nginx当前的运行状态,类似于Apache2的ServerStatus。

2、然后是重新编辑Apache2,大部分模块都不需要了,可以在config里面去掉。

#./configure \
"--prefix=/usr/local/apache2" \ 
"--with-apr=/usr/local/apr" \
"--with-apr-util=/usr/local/apr-util/bin" \

重新编译的话会遇到APR的问题。错误如下:

configure: error: Cannot use an external APR with the bundled APR-utilq,

这个以前遇到过。解决方法如下:

安装apr以及apr-util。

#cd /usr/local/httpd-2-2-4/srclib/apr 
#./configure --prefix=/usr/local/apr 
#make
#make install

安装APR-util

#cd srclib/apr-util 
#./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr 
#make
#make install

这些文件在Apache2的源码包里面有。

3、然后是PHP+eAcelerator。

投了个懒,直接把原来Apache下的PHP配置加进来了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#./configure \
"--prefix=/usr/local/php" \ 
"--with-apxs2=/usr/local/apache2/bin/apxs" \ 
"--with-config-file-path=/etc " \ 
"--with-mysql=/usr/local/mysql " \ 
"--with-libxml-dir=/usr/local/libxml2 " \ 
"--with-gd=/usr/local/gd2 " \ 
"--enable-gd-native-ttf " \ 
"--with-jpeg-dir " \ 
"--with-png-dir " \ 
"--with-bz2 " \ 
"--with-freetype-dir " \ 
"--with-iconv-dir " \ 
"--with-zlib-dir " \ 
"--enable-mbstring " \ 
"--disable-ipv6 " \ 
"--disable-cgi " \ 
"--disable-cli " \ 
"--enable-ftp " \ 
"--enable-magic-quotes " \ 
"--with-pear " \ 
"--enable-sockets " \ 
"--with-ttf " \ 
"--enable-gd-native-ttf " \ 
"--enable-sysvsem " \ 
"--enable-sysvshm " \ 
"--with-pcre-regex " \ 
"--enable-xml" \

另外根据DZ系统的情况添加了一些乱七八糟的东东。比如什么ftp啥的。

1
#cp php-dist.ini /etc/php.ini

接下来安装eAcelerator.

1
2
[root@bbs eaccelerator-0.9.5.3]# make install
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/

注意系统提示。将下面这段修改之后加入到/etc/php.ini的末尾

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
extension_dir="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
extension="eaccelerator.so"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.shm_size="64"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="60"
eaccelerator.shm_prune_period="60"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
eaccelerator.keys="shm_and_disk"
eaccelerator.sessions="shm_and_disk"
eaccelerator.content="shm_and_disk"

下面是Zend,虽然DZ不再加密了,不过有了总比没有好。很简单,不再多说。

1
#./install.sh

查看php.ini,是否已加载。

4、其他的诸如GD等不再赘述了,很简单。不过要记得在最开始安装。

5、进入Nginx的配置阶段。

Nginx的一些Tips:

1
#/usr/local/nginx/sbin/nginx -t

测试Config文件是否正常。如果不正常会提示你在哪一行出错。

1
#/usr/local/nginx/sbin/nginx

启动Nginx进程。和Apache2不同的是,他没有restart/start/stop这样的脚本。

相对应的,重新启动Nginx则是
首先

1
#ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}'

显示出来的就是Nginx的主进程的ID号。然后

1
#kill -HUP xxxx

即可

下面是Nginx的Config文件配置部分。他的配置文件只有一个,就是/usr/local/nginx/conf/nginx.conf

Nginx的配置文档有点类似于C语言的{}形式。比如一个典型的虚拟主机配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
server
 {
   listen       80;
   server_name zone.nau.edu.cn;
   index index.html index.htm index.php;
   root /data/web/nauzone;
 
   #Upload Size
   client_max_body_size 6M
 
     location / 
    {
       valid_referers   none  blocked  bbs.nau.edu.cn  *.nau.edu.cn;
       if ($invalid_referer)
       {
            return   403;
       }
        root   /data/web/nauzone;
        index index.php index.html index.htm;
 
      #UCHome Rewrite Rule
        rewrite ^/(space|network)\-(.+)\.html$ /$1.php?rewrite=$2 last;
        rewrite ^/(space|network)\.html$ /$1.php last;
        rewrite ^/([0-9]+)$ /space.php?uid=$1 last;
        break;
     }
 
   #Forward PHP Request TO Apache Server
      location ~ \.php$ 
     {
       proxy_pass   http://127.0.0.1:81;
       proxy_redirect          off;
       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      #proxy_hide_header Content-Type;
      }
 }

这一段配置是放在http部分的。很简单,也很容易理解。

需要注意的是这部分

1
2
3
4
5
6
7
8
9
10
  #Forward PHP Request TO Apache Server
    location ~ \.php$ 
   {
     proxy_pass   http://127.0.0.1:81;
     proxy_redirect          off;
     proxy_set_header Host $host;
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     #proxy_hide_header Content-Type;
   }

作用是将PHP的请求转发给Apache2处理。和DZ商业区的那篇文章区别在于,我将最后一行注释掉了。这一个问题困扰了我一天多。

如果不注释掉的话,结果就是会将Content-type传递给Apache2。

而Discuz!的Ajax功能,用到了/templates/default/header_ajax.htm这个文件,这个文件很奇怪,虽然是.htm,但是在内容里却包含了

1
{eval @header("Content-type: application/xml; charset=$charset");}

具体的用意不知道,但是肯定是和这个Content-Type有关的。结果就是传递出错,造成Discuz!所有使用到AJAX的功能均不正常,包括表情、投票贴内容、评分等等。

注释掉这一段即OK。也就是Nginx不会将Content-Type传递给Apache2。

=======================================================================
20080523添加,防盗链配置

在location部分添加以下内容。

1
2
3
4
5
valid_referers   none  blocked  bbs.nau.edu.cn  *.nau.edu.cn;
  if ($invalid_referer) 
   {
    return   403;
   }

其中,valid_referers可选参数包括none,blocked,以及server_names。

None就是没有,简单的说就是直接通过下载软件下载文件,没有提供referers.
Blocked就是“一块”主机头,比如我前面的配置,可以通过*来通配符。注意不是“阻塞”的意思哦。
server_names就是简单的一个主机了。

我上面的结果就是(可以通过Bitcomet测试),如果不输入主机头、或者指定Referer,下载均可成功。而如果是错误的主机头,就会报403错误。

另外location可以只针对特定文件,比如图片。

参考文章:
官方Wiki:
http://wiki.codemongers.com/NginxHttpRefererModule?highlight=%28blocked%29%7C%28server_names%29

=======================================================================
20080526添加日志部分

现在需要做的就是把它和Awstats结合起来。

首先配置日志。官方文档提到一个log_format格式,如下:

log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
但是实际上我把它添加到http{}部分的时候不停地报错。
2008/05/26 18:45:16 [emerg] 19875#0: "log_format" directive duplicate "log_format" name in /usr/local/nginx/conf/nginx.conf:26

实际上原因就是因为,“The "combined" log_format is predefined in sources, you do not need to define it.”作者回答我的...汗。

http://wiki.codemongers.com/NginxHttpLogModule

接下来设定每个虚拟主机的配置。

access_log /data/logs/nginx/bbs.access.log;

注意由于nginx不支持管道,所以无法使用cronolog轮询了。也好,避免2g死机问题。我们会使用脚本来实现这个功能。

=======================================================================

20080619添加日志部分

编辑nginx配置文件的时候,可以使用UltraEDIT,然后高亮,选择php,效果会好很多。

=======================================================================

其他功能不多说了,具体可以参照nginx的文档。

参考网站:

1、Nginx官方网站Wiki
http://wiki.codemongers.com/Main

2、bskzq,关于大型论坛系统环境搭建的讨论--理想论坛的终极解决方案
http://www.discuz.net/viewthread.php?tid=882980&highlight=

3、netseek,利用Nginx替代apache实现高性能的Web环境
http://www.discuz.net/viewthread.php?tid=803925&highlight=nginx

4、张宴,Nginx 0.5.33 + PHP 5.2.5(FastCGI)搭建胜过Apache 10倍的Web服务器(第2版)
http://blog.s135.com/read.php/314.htm

分类: Linux, 服务器管理 标签: , , ,