逆水行舟
公司几周前买了台服务器,用来当作开发服务器的。一直没好好利用,如今打算利用一下了,用它来做DNS服务器。
这台linux debian服务器配置好了能做以下几件事情:
- 真实的开发和测试环境,可以实现测试服务器上每一个项目都有独立的环境,而不是像以前的加“/projectname”这种不好看的路径了。而且这种路径在处理一些涉及到某个域名下cookie的问题时没法测试。
- 可以限制员工那些网站是能上的,那些是不允许的,例如QQ空间什么的……。
现在还是入门,没想到其它什么用途。
参考了一下这篇文章配置的,好像也不是原创,我就稍稍排一下版吧,这篇文章只能提供一些参数的名字解释作用,很奇怪官方的文档里居然没有写清楚。
-----------------------------------------------------------
Linux下DNS服务器安装配置方法
【简 介】域名服务器(Domain Name Server)。在Internet上域名与IP地址之间是一一对应的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。
本文以Red Hat Enterprise Linux AS v4为平台
一、资料参考与准备:
DNS 是指:域名服务器(Domain Name Server)。在Internet上域名与IP地址之间是一一对应的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。
一些标记解释:
@ ----这个符号意味着SOA与域是一样的
IN -----IN是提供IP地址的域名类当,与A,PTR或CNAME记录一起使用时可将域名映射为IP地址,反之一样 NS -----域名服务器指定的区域DNS服务器的域名或IP地址
MX ----MX记录定义何种机器来为域或单个主机传送电子邮件,为域定义就是告诉每个人将邮件发送给该域中要与之通信的人或机器
SOA-----Start Of Authority 指明其后的域名定义了主域名服务器及该域的联系点的电子邮件地址。
PTR---将IP地址映射为主机名,PTR记录执行与A及记录相反的过程
A----将主机名映射为其IP地址
先从 http://www.isc.org/products/BIND/ 下载bind安装包或者光盘中/cdrom/RedHat/RPMS可以找到相关的安装包。
二、服务器的安装与配置
#vi /etc/name.conf
directory "/var/named";
};
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
zone "." IN {
file "named.ca";
};
zone "localhost" IN {
type master;
file "localhost.zone" ;
allow-update { none; };
};
zone "xuanfei.net" IN {
type master;
file "test.net”
allow-update { none;};
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};
zone "63.45.10.in-addr.arpa" IN {
type master;
file "10.45.63";
#vi test.zone
$ttl 1D
@ IN SOA linux.xuanfei.net. root.xuanfei.net. (
1053891162
3H
15M
1W
1D )
IN NS xuanfei.net.
IN MX 5 mail.xuanfei.net.
www IN A 10.45.63.185
it IN A 10.45.63.188
#vi /var/named/10.45.63
@ IN SOA linux.xuanfei.net. root.xuanfei.net. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS linux.xuanfei.net.
--------------------------------------------------------------------------------
主要配置文件解释:
#rpm -ql bind|More
列出该软件包的所有文件和位置。
配置文件一般在/etc/named.conf
数据库文件一般在/var/named下
以下是这次配置DNS服务器的几个配置文件:
/etc/named.conf
/在NAMED.CONF配置文件中使用//和/* */来进行注释,
ptions { /*OPTIONS选项用来定义一些影响整个DNS服务器的环境,如这里的DI RECTORY用来指定在本文件指定的文件的路径,如这里的是将其指定到 /var/named 下,在这里你还可以指定端口等等。不指定则端口是53
*/
directory "/var/named";
}; //
//
// a caching only nameserver config
//
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
zone "." IN { //在这个文件中是用zone关键字来定义域区的,一个zone关键字定义一个域区
type hint;
/*在这里type类型有三种,它们分别是master,slave和hint它们的含义分别是:
master:表示定义的是主域名服务器
slave :表示定义的是辅助域名服务器
hint:表示是互联网中根域名服务器
*/
file "named.ca"; //用来指定具体存放DNS记录的文件
};
zone "localhost" IN { //定义一具域名为localhost的正向区域
type master;
file "localhost.zone" ;
allow-update { none; };
};
zone "xuanfei.net" IN { //指定一个域名为test.net的正向区域
type master;
file "test.net”
allow-update { none;};
};
zone "0.0.127.in-addr.arpa" IN { //定义一个IP为127.0.0.*的反向域区
type master;
file "named.local";
allow-update { none; };
};
zone "63.45.10.in-addr.arpa" IN { //定义一个IP为10.45.63.*反向域区
type master;
file "10.45.63";
/var/named/test.net文件
@ IN SOA linux.test.net. root.test.net. ( SOA表示授权开始
/* 上面的IN表示后面的数据使用的是INTERNET标准。而@则代表相应的域名,如在这里代表test.net,即表示一个域名记录定义的开始。而 linux.test.net则是这个域的主域名服务器,而webmaster.test.net则是管理员的邮件地址。注意这是邮件地址中用.来代替常见的邮件地址中的@.而SOA表示授权的开始
*/
2003012101 ; serial (d. adams) /*本行前面的数字表示配置文件的修改版本,格式是年月日当日修改的修改的次数,每次修改这个配置文件时都应该修改这个数字,要不然你所作的修改不会更新到网上的其它DNS服务器的数据库上,即你所做的更新很可能对于不以你的所配置的DNS服务器为DNS服务器的客户端来说就不会反映出你的更新,也就对他们来说你更新是没有意义的。
*/
28800 ; refresh
/*定义的是以为单位的刷新频率 即规定从域名服务器多长时间查询一个主服务器,以保证从服务器的数据是最新的
*/
7200 ;retry
/*上面的这个值是规定了以秒为单位的重试的时间间隔,即当从服务试图在主服务器上查询更时,而连接失败了,则这个值规定了从服务多长时间后再试
*/
3600000 ; expiry
/*上面这个用来规定从服务器在向主服务更新失败后多长时间后清除对应的记录,上述的数值是以分钟为单位的
*/
8400 )
/*上面这个数据用来规定缓冲服务器不能与主服务联系上后多长时间清除相应的记
录
*/
IN NS linux
IN MX 10 linux
linux IN A 10.45.63.185
it IN A 10.45.63.188
www IN CNAME linux
/*上面的第一列表示是主机的名字,省去了后面的域。
NS:表示是这个主机是一个域名服务器,
A:定义了一条A记录,即主机名到IP地址的对应记录
MX 定义了一邮件记录
CNAME:定义了对应主机的一个别名
/var/named/10.45.63
@ IN SOA linux.xuanfei.net. root.xuanfei.net. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS linux.xuanfei.net.
/*以上的各关键字的含义跟xuanfei.net是相同的
185 IN PTR linux.xuanfei.net.
188 IN PTR it.xuanfei.net.
/*
上面的第一列表示的是主机的IP地址。省略了网络地址部分。如185完整应该是:
10.45.63.185
PTR:表示反向记录
最后一列表示的是主机的域名。
三、启用与测试
启动服务:
#/etc/init.d/named startd
测试工具:
linux:host dig ping
win:ping nslookup
客服端配置:
linux:修改/etc/resolv.conf
win:双击本地连接==》打开TCP/IP属性==》选中自定义DNS服务器地址
四、小结
DNS 服务看上去简单,但其实里边是一大学问,想要搞清楚里边的细节,还得花很大的功夫!其应用也非常广可用在电信的的交换技术上、也可应用在IPv6 的 Anycasting 上 、 Net to Net 的 VPN 等领域。还有重要的安全防范领域!还我们继续努力学习啊!:)
还是上次那个网站,访问量到一定数量后访问就出奇的慢,问题依旧,很奇怪上次明显有效果了,但是问题却依然存在。上次的问题:apache 设置问题。
于是还是把问题锁定在了apache上面。在网上找到了下面这篇文章,有明显的效果。
Windows 2000/2003/2008 等NT系统下的Apache性能优化
2008-06-10 16:49
一般来说,WinNT系统下使用IIS,而Apache在Linux下应用的比较多,但是依然有很多人在WinNT系统下使用Apache而非IIS,可能是基于对Windows系统的熟悉吧。今天就来说一下在Windows系统下如果优化Apache的性能。
mpm_winnt.c 是专门针对Windows NT优化的MPM(多路处理模块),它使用一个单独的父进程产生一个单独的子进程,在这个子进程中轮流产生多个线程来处理请求。也就是说 mpm_winnt只能启动父子两个进程, 不能像Linux下那样同时启动多个进程。
mpm_winnt主要通过ThreadsPerChild和MaxRequestsPerChild两个参数来优化Apache,下面详细来说明一下。
ThreadsPerChild
这个参数用于设置每个进程的线程数, 子进程在启动时建立这些线程后就不再建立新的线程了. 一方面因为mpm_winnt不能启动多个进程, 所以这个数值要足够大,以便可以处理可能的请求高峰; 另一方面该参数以服务器的响应速度为准的, 数目太大的反而会变慢。因此需要综合均衡一个合理的数值。
mpm_winnt上的默认值是64, 最大值是1920. 这里建议设置为100-500之间,服务器性能高的话值大一些,反之值小一些。
MaxRequestsPerChild
该参数表示每个子进程能够处理的最大请求数, 即同时间内子进程数目.设置为零表示不限制, mpm_winnt上的默认值就是0.
官方参考手册中不建议设置为0, 主要基于两点考虑: (1) 可以防止(偶然的)内存泄漏无限进行,从而耗尽内存; (2) 给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
因此这个参数的值更大程度上取决于服务器的内存,如果内存比较大的话可以设置为0或很大的数字,否则设置一个小的数值。需要说明的是,如果这个值设置的太小的话会造成Apache频繁重启,在日志文件中会看到如下的文字:
Process exiting because it reached MaxRequestsPerChild. Signaling the parent
这样一来降低了Apache的总体性能。
另外,可以通过查看Apache提供的server-status(状态报告)来验证当前所设置数值是否合理,在httpd.conf文件中做如下设置来打开它:
LoadModule status_module modules/mod_status.so
# 然后设置访问的地址
SetHandler server-status
Order deny,allow
Deny from all
# 如果限制某个IP访问则设置为 Allow from 192.168.1.1
Allow from all
综合来说,因为Windows NT下Apache只能启动父子两个进程,因此只能通过增大单个进程的线程数以及单个进程能够处理的最大请求数来进行优化。其他优化的参数同Linux系统下是一样的,大家可以加以参考。下面针对上述两个参数给出一个建议的设置:
MaxRequestsPerChild 5000
上图,大致了解下是什么功能。
.jpg)
在二次开发过程中接触了javascript的Jquery插件,之前一直感觉js框架很不现实,其实是自己没有去接触,接触后还是有不少收获的。这是封建思想在做怪。
代码从这里下载 http://www.zhuoda.org/upload/xiezhi//magnifier-beta2.rar
用到的插件:jquery.js
调用方法:index.html
edited on 2008-08-19
今天收到一封邮件,比较意外有人在使用我的程序并且发现了些问题,于是乎决定找些时间好好完善封装一下了。
Mr.孙,你好:
现在关于位置只支持“left"和"right”,不过如果需要使其位置处于下方也很容易。
修改 jquery.jqzoom.js 里面的内容,如下:
-------------------------- step 1 --------------------------------------------------------
查找:
if(settings.position == "right"){
leftpos = imageLeft + imageWidth + settings.offset;
}else{
leftpos = imageLeft - settings.xzoom - settings.offset;
}
修改为:
if (settings.position == "right"){
leftpos = imageLeft + imageWidth + settings.offset;
toppos = imageTop;
} else if (settings.position == "bottom")
leftpos = imageLeft;
toppos = imageTop + settings.offset + imageHeight;
} else {
leftpos = imageLeft - settings.xzoom - settings.offset;
toppos = imageTop;
}
-------------------------- step 2 --------------------------------------------------------
查找:
$("div.zoomdiv").css({"top": imageTop,"left": leftpos ,"width": settings.xzoom,"height": settings.yzoom});
修改为:
$("div.zoomdiv").css({"top": toppos,"left": leftpos ,"width": settings.xzoom,"height": settings.yzoom});
以上步骤我没有严格测试过,不过思路肯定是对的。
谢谢你的使用。程序很简单,花一些时间去学习一下jquery框架就能轻松读懂程序了。
meiking,你好!有一个问题想请教你,关于调用参数,修改调用时的参数,如下:
jQuery("#zoom_div").jqueryzoom(
{
xzoom: 250, //宽度
yzoom: 250, //高度
offset: 10, //距离实图的距离
position: "right" //位置
}
);position: "right" 是相对原图的位置,可是我设置position: "bottom"后不对,放大的图并没有移到图下面,请问这个bug现在有没有修改好?
--
姓名: 谢智 住址: 朝阳.北京
Blog: http://www.zhuoda.org/xiezhi/
/**
* @param name cookie key
* @param value key value
* @param days 保存天数
*/
function setCookie(name, value, days) {
var exp = new Date(); //new Date("December 31, 9998");
exp.setTime(exp.getTime() + days*24*60*60*1000);
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}
/**
* 取cookies函数
*/
function getCookie(name) {
var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
if(arr != null) return unescape(arr[2]); return null;
}
/**
* 删除cookies
*/
function delCookie(name) {
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval=getCookie(name);
if(cval!=null) document.cookie= name + "="+cval+";expires="+exp.toGMTString();
}
</script>
<!-- 测试程序 -->
<!-- 鼠标离开输入框则自动赋值并刷新页面。 -->
<p><input type="text" name="c" value="" id="c"
onblur="setCookie('name', this.value); alert('cookie[name]: ' + getCookie('name')); window.location.href = window.location.href;" />
</p>
<p><input type="button" value="del cookie[name]"
onclick="delCookie('name'); alert('cookie[name]: ' + getCookie('name')); window.location.href = window.location.href;" />
</p>
<p><pre>
<?PHP print_r($_COOKIE); ?>
</pre></p>
现在的处境比较好的就是打工的公司突然成为自己的的公司了,很多时候可以自由的支配时间,自己的一些设计和想法开始可以利用一些其它人力资源来实现了,当然学习和娱乐的时间也少了。不过越来越感觉PHP做项目利润空间会比较少,竟争力也大,那么最终的风险也大了,很想拿Java做来开发这个新项目,但心有余力不足,简单的spring开发框架居然弄了三个星期了。Java web project现在如果框架搭配好了,利用集成的开发工具,其开发效率其实已经超过PHP了,PHP的优势渐渐仅剩下一个易于上手了。然而PHP所面临的问题却一直得不到解决,烦锁的事务、尴尬的缓存、无能为力的异常处理。而JAVA这块如果有一个比较好的技术主管理负责项目的环境搭配与布署工作,再找几个廉价的jsp coder那么其各方面的效率甚至是开节约发成本已经全面超越了PHP了。
唉。。。 这就是PHPer的处境~ 做程序员一定要跟上潮流学好JAVA或.net,再花些时间学学数据结构和算法。
宿舍的家伙晚上睡觉睡的晚,在看电视,睡不着想点就写点。
突然想起以前自己做的一个抽奖系统用到的算法。例如想得到一个 33% 和 2% 的概率,现在想不起来当时用的什么方法了,反正感觉比下面的方法要好。
$num = rand(1, 100);
if($num >= 1 && $num <= $percent) return true;
return false;
}
if(doSomethingWithPercent(33)) do33Percent();
if(doSomethingWithPercent(2)) do2Percent();

.jpg)