Archive for category www
Unix的运行apache的内核微调
下面叙述的一些调整参数和句法在重新启动后将不会自动激活,所以如果你需要在每次启动的时候长期保持这些参数,你就需要增加这些实时命令到如下的启动文件中:
AIX – /etc/rc.net
Solaris – /etc/init.d/inetinit
Tru64 UNIX – 使用sysconfigdb 或者 dxkerneltuner 命令
HP-UX – /etc/rc.config.d/nddconf
Linux kernel 2.2 – /etc/sysctl.conf
FreeBSD – /etc/rc.conf
IRIX – 使用systune命令
=============================================================
以下是一些IP堆栈调整建议:
1,调节TCP发送和接受空间(TCP send and receive spaces)
TCP发送和接受的空间直接影响TCP 窗口大小参数(TCP window size parameter), 一定程度上的窗口大小增加有助于更有效的传输,尤其是一些需要大数量传输的服务如FTP和HTTP,默认的一些设置不是每个系统都是最优化的,一般我们需 要增加这个窗口大小为32768字节。除非你设置的时候很清楚的理解RFC1323(http://www.ietf.org/rfc/rfc1323.txt?number=1323)和RFC2018(http://www.ietf.org/rfc/rfc2018.txt?number=2018),否则你不要把这个值增加到高于64K字节。
A. AIX
/usr/sbin/no -o tcp_sendspace=32768
/usr/sbin/no -o tcp_recvspace=32768
B. Solaris
/usr/sbin/ndd -set /dev/tcp tcp_xmit_hiwat 32768
/usr/sbin/ndd -set /dev/tcp tcp_recv_hiwat 32768
C. Tru64 UNIX
没有推荐的调整.
D. HP-UX
默认情况下TCP发送和接受空间已经设置为32768.
E. Linux kernel 2.2
Linux自动分配TCP发送和接受空间并默认共同支持RFC1323 (large window support, net.ipv4.tcp_window_scaling) 和 RFC2018 (SACK support, net.ipv4.tcp_sack).
F. FreeBSD
sysctl -w net.inet.tcp.sendspace=32768
sysctl -w net.inet.tcp.recvspace=32768
G. IRIX
默认情况下TCP发送和接受空间设置为64K字节.
2,调整套接口序列防止SYN攻击
各种网络应用软件一般必须开放一个或者几个端口供外界使用,所以其必定可以会被恶意攻击者向这几个口发起拒绝服务攻击,其中一个很流行的攻击就是 SYNFLOOD,在攻击发生时,客户端的来源IP地址是经过伪造的(spoofed),现行的IP路由机制仅检查目的IP地址并进行转发,该IP包到达 目的主机后返回路径无法通过路由达到的,于是目的主机无法通过TCP三次握手建立连接。在此期间因为TCP套接口缓存队列被迅速填满,而拒绝新的连接请 求。为了防止这些攻击,部分UNIX变种采用分离入站的套接口连接请求队列,一队列针对半打开套接口(SYN 接收, SYN|ACK 发送), 另一队列针对全打开套借口等待一个accept()调用,增加这两队列可以很好的缓和这些SYN FLOOD攻击并使对服务器的影响减到最小程度:
A. AIX
/usr/sbin/no -o clean_partial_conns=1
这个设置会指示内核随机的从q0队列中去掉半打开套接口来为新的套接口增加所需空间。
B. Solaris
/usr/sbin/ndd -set /dev/tcp tcp_conn_req_max_q 1024
使q 队列拥有接口等待来自应用程序的accept()调用.
/usr/sbin/ndd -set /dev/tcp tcp_conn_req_max_q0 2048
使q0 队列能维护半打开套接口.
C. Tru64 UNIX
/sbin/sysconfig -r socket sominconn=65535
这个sominconn的值决定了系统能同时处理多少个相同的进入的SYN信息包.
/sbin/sysconfig -r socket somaxconn=65535
这个somaxconn值设置了系统能保留多少个待处理TCP连接.
D. HP-UX
/usr/sbin/ndd -set tcp_syn_rcvd_max 1024
/usr/sbin/ndd -set tcp_conn_request_max 200
E. Linux kernel 2.2
/sbin/sysctl -w net.ipv4.tcp_max_syn_backlog=1280
有效的增加q0的套接口队列大小.
/sbin/sysctl -w net.ipv4.tcp_syn_cookies=1
启用TCP SYN cookies支持,能有效的减轻SYN FLOOD的攻击,但是这个参数会对一些大的窗口引起一些性能问题(参看RFC1323 and RFC2018.
F. FreeBSD
sysctl -w kern.ipc.somaxconn=1024
G. IRIX
listen()队列被硬性设置为32.但是系统实际采用待处理连接数为((3 * backlog) / 2) + 1,其中的backlog数值最大值为49.
3,调整Redirects参数
恶意用户可以使用IP重定向来修改远程主机中的路由表,在设计良好的网络中,末端的重定向设置是不需要的,发送和接受重定向信息包都要关闭。
A. AIX
/usr/sbin/no -o ipignoreredirects=1
/usr/sbin/no -o ipsendredirects=0
B. Solaris
/usr/sbin/ndd -set /dev/ip ip_ignore_redirect 1
/usr/sbin/ndd -set /dev/ip ip_send_redirects 0
C. Tru64 UNIX
没有推荐的调整设置.
D. HP-UX
/usr/sbin/ndd -set /dev/ip ip_send_redirects 0
E. Linux kernel 2.2
/sbin/sysctl -w net.ipv4.conf.all.send_redirects=0
/sbin/sysctl -w net.ipv4.conf.all.accept_redirects=0
F. FreeBSD
sysctl -w net.inet.icmp.drop_redirect=1
sysctl -w net.inet.icmp.log_redirect=1
sysctl -w net.inet.ip.redirect=0
sysctl -w net.inet6.ip6.redirect=0
G. IRIX
/usr/sbin/systune icmp_dropredirects to 1
4,调整ARP清理设置
通过向IP路由缓冲填充伪造的ARP条目可以让恶意用户产生资源耗竭和性能减低攻击。在Solaris中,有2个参数可以管理间隔的清理IP路由缓冲,针 对未请求的ARP响应可以通过arp_cleanup_interval调整,AIX可以通过artp_killc来设置。
A. AIX
/usr/sbin/no -o arpt_killc=20
B. Solaris
/usr/sbin/ndd -set /dev/arp arp_cleanup_interval 60000
C. Tru64 UNIX
没有参考的调整设置.
D. HP-UX
默认设置为5分钟.
E. Linux kernel 2.2
没有参考的调整设置.
F. FreeBSD
sysctl -w net.link.ether.inet.max_age=1200
G. IRIX
没有参考的调整设置.
5,调整源路由的设置
通过源路由,攻击者可以尝试到达内部IP地址 –包括RFC1918中的地址,所以不接受源路由信息包可以防止你的内部网络被探测。
A. AIX
/usr/sbin/no -o ipsrcroutesend=0
关闭源路由信息包发送.
/usr/sbin/no -o ipsrcrouteforward=0
如果你这个系统要做路由工作如防火墙,这个参数就很重要,关闭这个特征就可以很好的防止转发源路由信息包.
B. Solaris
/usr/sbin/ndd -set /dev/ip ip_src_route_forward 0
如果你这个系统要做路由工作如防火墙,这个参数就很重要,关闭这个特征就可以很好的防止转发源路由信息包.
C. Tru64 UNIX
没有推荐的调整.
D. HP-UX
ndd -set /dev/ip ip_forward_src_routed 0
关闭这个特征就可以很好的防止转发源路由信息包.
E. Linux kernel 2.2
/sbin/sysctl -w net.ipv4.conf.all.accept_source_route=0
丢弃所有源地址信息包.
/sbin/sysctl -w net.ipv4.conf.all.forwarding=0
/sbin/sysctl -w net.ipv4.conf.all.mc_forwarding=0
不转发源路由帧.
F. FreeBSD
sysctl -w net.inet.ip.sourceroute=0
sysctl -w net.inet.ip.accept_sourceroute=0
G. IRIX
/usr/sbin/systune ipforward to 2
6. 调整TIME_WAIT setting 设置
在一些比较繁忙的WEB服务器上,许多套接口可能就处于TIME_WAIT状态,这是由于一些不正规编码的客户端应用程序没有很正确的处理套接口所引起的,这就可能引起如DDOS的攻击。
A. AIX
没有推荐设置.
B. Solaris
/usr/sbin/ndd -set /dev/tcp tcp_time_wait_interval 60000
这个参数影响了TCP套接口保持TIME_WAIT状态的时间数,默认情况下对于一个繁忙的WEB服务器太高了,所以需要设置到低于每60秒,这个参数名 字适用与Solaris7或者更高的版本,在Solaris 7之前的版本,其名字不正确的表识为tcp_close_wait_interval.
C. Tru64 UNIX
没有推荐的调整设置.
D. HP-UX
ndd -set /dev/tcp tcp_time_wait_interval 60000
套接口将保持TIME_WAIT状态不超过60秒.
E. Linux kernel 2.2
/sbin/sysctl -w net.ipv4.vs.timeout_timewait=60
套接口将保持TIME_WAIT状态不超过60秒.
F. FreeBSD
没有推荐的调整设置.
G. IRIX
/usr/sbin/systune tcp_2msl to 60
7,调整广播ECHO响应
Smurf攻击就是一个伪造的地址通过发送ICMP 8 0 (ECHO REQUEST) 信息到一个广播地址,一些IP堆栈默认情况下会响应这些信息,所以必须关闭这个特征。如果这个主机作为防火墙使用(router),关闭这个特征就不能处理处理广播。
A. AIX
/usr/sbin/no -o directed_broadcast=0
不响应直接广播.
B. Solaris
/usr/sbin/ndd -set /dev/ip ip_respond_to_echo_broadcast 0
不响应直接广播.
/usr/sbin/ndd -set /dev/ip ip_forward_directed_broadcasts 0
不转发直接广播.
C. Tru64 UNIX
没有推荐调整设置.
D. HP-UX
ndd -set /dev/ip ip_respond_to_echo_broadcast 0
不响应直接广播.
ndd -set /dev/ip ip_forward_directed_broadcasts 0
不转发直接广播.
E. Linux kernel 2.2
/sbin/sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1
不响应直接广播.
F. FreeBSD
sysctl -w net.inet.icmp.bmcastecho=0
G. IRIX
/usr/sbin/systune allow_brdaddr_srcaddr to 0
8,针对其他广播探测的调整
其他还有2个广播探测可以让恶意用户利用,一个就是地址掩码查询可以用来探测网络段大小和范围。时间戳广播可以映射和鉴定主机类型。
A. AIX
/usr/sbin/no -o icmpaddressmask=0
防止地址掩玛查询.
B. Solaris
/usr/sbin/ndd -set /dev/ip ip_respond_to_address_mask_broadcast 0
防止地址掩玛查询.
/usr/sbin/ndd -set /dev/ip ip_respond_to_timestamp_broadcast 0
关闭对时间戳广播询问的响应.
C. Tru64 UNIX
没有推荐的调整.
D. HP-UX
ndd -set /dev/ip ip_respond_to_address_mask_broadcast 0
防止泄露主机配置的网络掩码.
ndd -set /dev/ip ip_respond_to_timestamp_broadcast 0
关闭对时间戳广播询问的响应.
E. Linux kernel 2.2
没有推荐的调整.
F. FreeBSD
sysctl -w net.inet.icmp.maskrepl=0
G. IRIX
使用ipfilterd 来阻塞不需要的ICMP类型.
9,调整参数以支持RFC1948
下面几个调整会利用RFC1948(http://www.ietf.org/rfc/rfc1948.txt?number=1948)
TCP/IP序列号产生技术来保证给一个TCP 套接口的序列号码非常难猜测:
B. Solaris
Set TCP_STRONG_ISS=2 in /etc/default/inetinit.
这需要重新启动才能使能.
G. IRIX
/usr/sbin/systune tcpiss_md5 to 1
FreeBSD下整合Apache和Tomcat
首先,建议大家检查 /etc/rc.conf,看看有没有开启Linux二进制兼容模式!
| 代码: |
| linux_enable="YES" |
安装之前,需要你安装JDK – Java Develop Kit,对应的需求如下:
- Tomcat 4.x.x 以下版本 – JDK 1.3.X ~ JDK1.4.X
- Tomcat 5.0.x 版本 – JDK 1.4.X or upper
- Tomcat 5.5.x 版本 – JDK 5.0
自从发布了JDK的官方For FreeBSD版本后,安装JDK变得容易了许多。
下面开始进行….首先,请针对所需要安装的ports进行cvsup !
(1)安装Apache Web Server
| 代码: |
|
# cd /usr/ports/www/apache13/ # make # make install |
完成后,请在 /etc/rc.conf 加入如下内容:
| 代码: |
| apache_enable="YES" |
(2)安装Apache Tomcat
| 代码: |
|
# cd /usr/ports/www/jakarta-tomcat5/ # make # make install |
安装完成后,请确认是存在/usr/local/bin/tomcat50ctl!并确认server.xml是有开启AJP1.3的:
| 代码: |
| <Connector port="8009" protocol="AJP/1.3" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" redirectPort="8443"> |
(3)配置一些环境变量
图简单可以把它们放在/etc/rc.conf中!
| 代码: |
|
export JAVA_HOME=/usr/local/jdk1.5.0 export CATALINA_HOME=/usr/local/jakarta-tomcat5.0 export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar |
(4)阶段性测试
看看Tomcat是否正常:
| 代码: |
|
# cd /usr/local/jakarta-tomcat5.0/bin/ # ./startup.sh |
应该看到如下的内容,并请你用Web浏览器测试Tomcat!
| 代码: |
|
Using CATALINA_BASE: /usr/local/jakarta-tomcat5.0 Using CATALINA_HOME: /usr/local/jakarta-tomcat5.0 Using CATALINA_TMPDIR: /usr/local/jakarta-tomcat5.0/temp Using JAVA_HOME: /usr/local/jdk1.5.0 |
(5)开始进行整合Apache & Tomcat
首先安装mod_jk:
| 代码: |
|
# cd /usr/ports/www/mod_jk # make # make install |
完成后,请修改/usr/local/etc/apache/httpd.conf,找到下面2行,把行首的注释符号#去掉!
| 代码: |
|
LoadModule jk_module libexec/apache/mod_jk.so AddModule mod_jk.c |
新增下面的配置内容:
| 代码: |
| Include /usr/local/etc/apache/mod_jk.conf |
修改/usr/local/etc/apache/mod_jk.conf的内容:
| 代码: |
|
<IfModule mod_jk.c> JkWorkersFile /usr/local/etc/apache/workers.properties JkLogFile /var/log/mod_jk.log JkLogLevel warn JkMount /*.jsp default JkMount /servlet/* default JkMount /examples/* default </IfModule> |
接下来,需要修改/usr/local/etc/apache/workers.properties (注意2个文件中的default只是一个代号!):
| 代码: |
|
workers.tomcat_home=/usr/local/jakarta-tomcat5.0 workers.java_home=$JAVA_HOME ps=/ worker.list=default worker.default.port=8009 worker.default.host=localhost worker.default.type=ajp13 worker.default.lbfactor=1 |
好,到这里配置基本上完成了,接下来开始祈祷并运行吧!
| 代码: |
|
# touch /var/log/mod_jk.log # /usr/local/bin/tomcat50ctl start # /usr/local/sbin/apachectl start |
写一个测试的test.jsp放到/usr/local/jakarta-tomcat5.0/webapps/ROOT/,用 http://localhost/test.jsp 看看!
更多信息,请参考:ApacheTomcat.com FlashGuides
Nvu——开源的HTML编辑器
一直没有找到一个理想的开源HTML编辑器,苦于只能使用Openoffice这类的软件编制一些臃肿不堪的所谓“HTML”,郁闷。
经过ubuntu文档的指引,我找到了nvu这个开源软件(其实是遵从Mozilla Public License协议的),非常不错的,可以达到2002版本Frontpage的水平,而且很是友好。支持Normal tags source preview之间视图来回切换。
唯一的遗憾是没有简体中文版,我现在在逐步将其本地化。说实话,这个本地化真的不容易——该系统采用的界面文本类似于Firfox的形式,工作相当艰难……当然我也希望大家加入到这个项目中来。
下载地址:www.nvu.com
”httpready” Accept Filter
在FreeBSD下使用ports安装apache22会出现类似的warming:
No such file or directory: Failed to enable the ”httpready” Accept Filter
解决方法是:
#kldload accf_http
并将/boot/defaults/loader.conf中,以便下次启动自动装载模块
accf_data_load="YES"
accf_http_load="YES"
个人觉得这好像是一个apache22的bug,不能启动FreeBSD自带的一个基于http端口过滤的模块。这个模块的作用很不错——检查HTTP请求是否完整,符合规则accpt一个Http进程,否则就扔掉。
linux下也有一个类似的东西,工作在 accept 的 socket 上面。代码:
val = 5; setsockopt(srv_socket->fd, SOL_TCP, TCP_DEFER_ACCEPT, &val, sizeof(val)) ;
实现网页iframe透明的方法
IE5.5和NN6以上的浏览器支持Frame ,Iframe对象的allowTransparency 方法,如果某对象的背景颜色设置为Transparency的,它将继承包含它容器的特性。我们可以通过这个特性实现透明背景的开/关
代码如下:
a.html如下:
<HTML><HEAD><TITLE></TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
</HEAD>
<BODY style="BACKGROUND-COLOR: transparent">
<H1>透明文档</H1>
<P>此IFRAME无背景颜色</P>
<P>BODY:<br><BODY STYLE="background-color:transparent"></P></BODY></HTML>
b.html如下:
<HTML><HEAD><TITLE></TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
</HEAD>
<BODY style="BACKGROUND-COLOR: transparent">
<H1>透明文档</H1>
<P>此IFRAME 设为绿色。</P>
<P>BODY: <br><BODY STYLE="background-color:transparent"></P></BODY></HTML>
如果a.html透明的,它将继承IFRAME的背景颜色 如果容器IFRAME也是透明的,a.html将继承Iframe的父容器的颜色,如果一个对象不透明,它将覆盖其容器的颜色,默认是透明的。
Internet Explorer 5.5 以上版本允许你设置透明属性,通过设置是否可被透明,你可以改变背景的颜色。[在不设置透明属性的情况下,默认背景颜色为白色]
IFRAME定义如下:
<IFRAME ID="frame1" SRC="a.html" allowTransparency="true" HEIGHT=180 WIDTH=300> </IFRAME> <IFRAME ID="frame2" SRC="b.html" allowTransparency="true" STYLE="background-color:#459800" HEIGHT=180 WIDTH=300> </IFRAME>
按钮定义如下:
<INPUT TYPE="button" VALUE="不透明" onclick="turnTransparencyOff()"> <INPUT TYPE="button" VALUE="透明" onclick="turnTransparencyOn()">
<script>
//函数turnTransparencyOff():
function turnTransparencyOff()
{ document.all.frame1.allowTransparency = false; document.all.frame2.allowTransparency = false; }
//函数turnTransparencyOn():
function turnTransparencyOn()
{ document.all.frame1.allowTransparency = true; document.all.frame2.allowTransparency = true; }
</script>
403错误列表
错误代码:403.1
403.1错误是由于"执行"访问被禁止而造成的,若试图从目录中执行 CGI、ISAPI 或其他可执行程序,但该目录不允许执行程序时便会出现此种错误。
错误代码:403.2
403.2错误是由于"读取"访问被禁止而造成的。导致此错误是由于没有可用的默认网页并且没有对目录启用目录浏览,或者要显示的 HTML 网页所驻留的目录仅标记为"可执行"或"脚本"权限。
错误代码:403.3
403.3错误是由于"写入"访问被禁止而造成的,当试图将文件上载到目录或在目录中修改文件,但该目录不允许"写"访问时就会出现此种错误。
错误代码:403.4
403.4错误是由于要求SSL而造成的,您必须在要查看的网页的地址中使用"https"。
错误代码:403.5
403.5错误是由于要求使用 128 位加密算法的 Web 浏览器而造成的,如果您的浏览器不支持128位加密算法就会出现这个错误,您可以连接微软网站进行浏览器升级。
错误代码:403.6
403.6错误是由于IP 地址被拒绝而造成的。如果服务器中有不能访问该站点的 IP 地址列表,并且您使用的 IP 地址在该列表中时您就会返回这条错误信息。
错误代码:403.7
403.7错误是因为要求客户证书,当需要访问的资源要求浏览器拥有服务器能够识别的安全套接字层 (SSL) 客户证书时会返回此种错误。
错误代码:403.8
403.8错误是由于禁止站点访问而造成的,若服务器中有不能访问该站点的 DNS 名称列表,而您使用的 DNS 名称在列表中时就会返回此种信息。请注意区别403.6与403.8错误。
错误代码:403.9
403.9错误是由于连接的用户过多而造成的,由于Web 服务器很忙,因通讯量过多而无法处理请求时便会返回这条错误。
错误代码:403.10
403.10错误是由于无效配置而导致的错误,当您试图从目录中执行 CGI、ISAPI 或其他可执行程序,但该目录不允许执行程序时便会返回这条错误。
错误代码:403.11
403.11错误是由于密码更改而导致无权查看页面。
错误代码:403.12
403.12错误是由于映射器拒绝访问而造成的。若要查看的网页要求使用有效的客户证书,而您的客户证书映射没有权限访问该 Web 站点时就会返回映射器拒绝访问的错误。
错误代码:403.13
403.13错误是由于需要查看的网页要求使用有效的客户证书而使用的客户证书已经被吊销,或者无法确定证书是否已吊销造成的。
错误代码:403.15
403.15错误是由于客户访问许可过多而造成的,当服务器超出其客户访问许可限制时会返回此条错误。
错误代码:403.16
403.16错误是由于客户证书不可信或者无效而造成的。
错误代码:403.17
403.17错误是由于客户证书已经到期或者尚未生效而造成的
apache+mod ssl 如何申请正式SSL证书
第一步:生成CSR文件和密钥
CSR包含公司的信息,包括域名,公司名,联系方式等,还有密钥对中的公钥,私钥应该保存在本地,注意,必须保存好本地的私钥,如果遗失或者泄漏,这个证书就没有用了。
“OpenSSL”工具被用来生成CSR和密钥,它来自于OpenSSL包,一般被安装在/usr/local/ssl/bin目录下,如果您安装在其他目录下,请做相应调整:
1. 切换目录到SSL KEY,输入
2. 输入下列命令生成密钥对:
3. 切换目录到SSL Certificate:
4. 使用下列命令生成CSR文件:
第二步:提交CA,签名
一般有:
1.verisign 的 Secure Site,一年报价 RMB 6000 www.itrus.com.cn
2. thawte 的 SSL123,一年报价 129$ http://www.thawte.com
3. geotrust 的 RapidSSL,一年报价 RMB 488 www.myssl.cn
这里主要是对网站做认证,然后对CSR提交签名,(你可以在网站上,对CSR做检查,如果CSR有问题,不要急着付钱,有些地方先让你付钱,然后说你的CSR或者,提交的资料有问题,骗钱,这个大家当心)签名好以后,发把证书发回来,记得用文本方式保存下来。
第三步:装回证书
1.将证书内容存成一个文件
您会收到一封来自迅通诚信的邮件,证书内容附在服务器中。如果证书是以附件的形式(Cert.cer)夹带在邮件中,您就可以直接应用它。如果您的 证书中以文本的方式存在邮件中,您就需要将邮件中的证书部分的内容用Vi或Notepad存成一个纯文本文件。不要将其存成Microsoft Word 或其它字处理软件格式,并确定证书内容中不含有空行和空格。如下所示:
将证书文件存到某个目录下,比如: /etc/ssl/crt/。公钥文件和私钥文件都钥存到这个目录下。私钥可以标记成private.key,公钥标记成public.crt。
我们建议您将存私钥的目录改为只读属性。
2.下载中间级证书
如果您申请的是级联式服务器证书,您需要安装中间级证书,以构成一个证书链,使浏览器信任您的证书;否则无须安装,可直接进入下一步。 将中间级证书存成一个文本文件,命名为"intermediate.crt",将它存到第一步中的相同目录下:/etc/ssl/crt/ 。
配置httpd.conf文件
要将证书应用到您的服务器中,必须配置httpd.conf文件,您需要加入下列SSL 目录信息:
SSLCertificateKeyFile /etc/ssl/crt/private.key //私钥文件
SSLCertificateChainFile /etc/ssl/crt/intermediate.crt //中间级证书文件,应用于全球服务器证书
您需要根据具体情况修改SSL 目录信息
将httpd.conf文件存盘并重新启动Apache,您可以用以下命令启动Apache:
apachectl&nbs p;startssl
您现在已经将服务器证书应用到您的Apache服务器了。
基于虚拟主机的PHP配置
有个朋友想在我的主机上安置一个站点,PHP的。安置了以后才发现,他的系统默认是session.auto_start的。正好与我这个站点的设置有冲突,使用统一个PHP设置不太可能了。查看了官方的手册,找到了解决方案:
我用PHP5配置为:
打开服务器的AllowOverride 权限
AllowOverride All
<IfModule mod_php5.c> php_value include_path ".:/usr/local/lib/php" php_admin_flag safe_mode on</IfModule> PHP4的: <IfModule mod_php4.c> php_value include_path ".:/usr/local/lib/php" php_admin_flag safe_mode on</IfModule> 文物级的PHP3:<IfModule mod_php3.c> php3_include_path ".:/usr/local/lib/php" php3_safe_mode on</IfModule>
找到PHP.ini中的配置选项后替换掉上面例子中的配置就可以了。其中,php_admin_flag使用与“是非型”、“整数型”以及“浮点数型”的php配置;而php_value则对应了“字符型”。放置在<VirtualHost >之间就可以实现为每个虚拟主机设置不同的配置了。
最后还是提醒PHP的广大开发者:尽量使用PHP的默认配置作为基础环境,如果必须修改相关的设置参数,可以使用php的ini_set()函数来实现。
加固PHP环境
PHP作为Apache的模块运行时,Apache本身的安全起主导作用,因此如果配置正确的话,PHP应该是一个十分安全的环境,但是如果PHP是以CGI方式来运行的话,就没有这么安全了。
本文中提到的操作,对Unix和Windows都适用。
一、作为Apache模块来运行
因为一般说来,Apache会以“nobody”或者“www”来运行,所以,PHP作为模块是十分安全的。
如果PHP在虚拟主机环境下,可能会产生用户能浏览其他用户文件的危险。一个简单的脚本如下:
// 假定文档根位于 /usr/local/websites/mydomain
$location = ../; // 到上一级目录
$parent = dir( $location);
// 显示当前目录: /usr/local/websites
while( $entry = $parent->read()) {
echo $entry .
;
}
$parent->close();
?>
这样,只要修改 $location,用户就可以浏览虚拟主机上所有其他用户的文件了。为了减少这样的危险,我们需要看一下php.ini ,修改其中的safe_mode, doc_root和usr_dir 参数,把用户限制在他自己的虚拟主机环境下:
safe_mode = On
doc_root = /usr/local/apache/htdocs
user_dir = /home/albertxu/htdocs
二、作为CGI
把PHP以CGI方式运行需要十分小心,可能会泄露你不想让人知道的信息。
第一件事情要注意的就是一定要把执行文件放到文档根目录以外的地方。例如/usr/local/bin,因此所有的CGI文件开头必须带有:
#!/usr/local/bin/php
防止用户直接调用CGI的办法是在Apache中强迫CGI重定向:
Action php-script /cgi-bin/php.cgi
AddHandler php-script .php
这会把下面的URL
http://example.com/mywebdir/test.htm
转换为:
http://example.com/cgi-bin/php/mywebdir/test.htm
在以CGI方式编译PHP时,最好采用下面的选项:
–enable-force-cgi-redirect
设置Apache支持cache
默认情况下,apache安装完以后,是不允许被cache的。如果外接了cache或squid服务器要求进行web加速的话,就需要在htttpd.conf里进行设置,当然前提是在安装apache的时候要激活mod_cache的模块。
以下简单介绍一下安装与配置的步骤:
1. apache版本:httpd-2.0.49.tar.gz
2. 安装httpd-2.0.49.tar.gz:
# tar –zxvf httpd-2.0.49.tar.gz
# cd httpd-2.0.49
#./configure –enable-cache –enable-disk-cache –enable-mem-cache
#mke
#make install
3. 检验是否安装了cache模块
/usr/local/apache2/bin/apachectl –l
如果有mod_cache.c
mod_disk_cache.c
mod_mem_cache.c
这3个模块,说明该apache可以支持cache了
4.更改httpd.conf的设置
vi /usr/local/apache2/conf/httpd.conf
在末尾添加上:
<IfModule mod_cache.c>
CacheForceCompletion 100
CacheDefaultExpire 3600
CacheMaxExpire 86400
CacheLastModifiedFactor 0.1
</IfModule>
5.设置虚拟目录
然后保存退出。启动apache
6.参数的解释:
mod_cache:
CacheEnable: 启动 mod_cache,其后接两个参数。第一个参数指定快取的种类,应设为 mem (记忆体快取) 或 disk (磁碟快取) 之其一;第二个参数指定使用快取的 URI 路径,如果对整个网站 (或虚拟主机) 进行快取,简单指定为根目录(/) 即可。
CacheForceCompletion: 这个值指定当 HTTP request 被取消时,内容的产生动作要完成的百分比;预设是 60(%)。
CacheDefaultExpire: 指定快取的预设过期秒数;预设值是一小时 (3600)。
CacheMaxExpire: 指定快取最大的过期秒数;预设值是一天 (86400)。
CacheLastModifiedFactor: 用来从回应里 Last Modified 资讯算出 expire date。
计算方式是:
expire period (过期时距) = 最后更新后至今的时间间距 * CacheLastModifiedFactor
而
expire date = 目前时间 + expire period
不过无论如何,过期时间不能超过 CacheMaxExpire 的设定值。
现在。如果用squid对该服务器进行反向代理的话,就可以通过cache 实现web的加速了。



近期评论