共 21篇 前 3 页:    每页10篇 下一页  

逆水行舟

公司几周前买了台服务器,用来当作开发服务器的。一直没好好利用,如今打算利用一下了,用它来做DNS服务器。

这台linux debian服务器配置好了能做以下几件事情:

  1. 真实的开发和测试环境,可以实现测试服务器上每一个项目都有独立的环境,而不是像以前的加“/projectname”这种不好看的路径了。而且这种路径在处理一些涉及到某个域名下cookie的问题时没法测试。
  2. 可以限制员工那些网站是能上的,那些是不允许的,例如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可以找到相关的安装包。

二、服务器的安装与配置

#rpm -ivh bind*.rpm
#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 等领域。还有重要的安全防范领域!还我们继续努力学习啊!:)

meiking   2008-08-22 19:36:34 阅读:34  评论:0  引用:0

还是上次那个网站,访问量到一定数量后访问就出奇的慢,问题依旧,很奇怪上次明显有效果了,但是问题却依然存在。上次的问题: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文件中做如下设置来打开它:

# 首先需要加载mod_status模块
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系统下是一样的,大家可以加以参考。下面针对上述两个参数给出一个建议的设置:

ThreadsPerChild 250
MaxRequestsPerChild 5000
meiking   2008-08-20 11:53:11 阅读:29  评论:0  引用:0
基本功能是鼠标悬于小图片上的时候,右边能把鼠标位置的图象放大,一般应用于像册是比较酷的功能,当然不仅仅如此,商业中也有很多用到这功能的。一开始我以为能在网上找个现成的,结果花了几小时没有结果,决定自己搞定,然后是花了两天时间研究并二次开发出来的作品,已经算作是接口化了,不过没有去用户体验这块的细节。
上图,大致了解下是什么功能。

在二次开发过程中接触了javascript的Jquery插件,之前一直感觉js框架很不现实,其实是自己没有去接触,接触后还是有不少收获的。这是封建思想在做怪。

代码从这里下载 http://www.zhuoda.org/upload/xiezhi//magnifier-beta2.rar
实现功能的代码:jquery.jqzoom.js
用到的插件: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/
meiking   2008-05-04 12:59:18 阅读:287  评论:2  引用:0
只是简单的封装了三个方法,实际操作中要考虑的东西比这要多点,不过下面的方法已经满足使用了。
<script type="text/javascript" language="javascript">
/**
 * @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>
meiking   2008-05-27 12:44:08 阅读:50  评论:0  引用:0
最近公司的事情忙的喘不过气来,晚上抽点时间温习下没搞定的Spring,结果还是一样。上回Tomcat报错失败问题因为应该是布署的原因,细节也还没弄清楚。换JBoss后发现启动的太慢,而且太陌生。Jboss启动的时间是Tomcat的60倍。。。一个是两秒钟,一个是两分钟,所以决定还是把Tomcat用熟再说。

现在的处境比较好的就是打工的公司突然成为自己的的公司了,很多时候可以自由的支配时间,自己的一些设计和想法开始可以利用一些其它人力资源来实现了,当然学习和娱乐的时间也少了。不过越来越感觉PHP做项目利润空间会比较少,竟争力也大,那么最终的风险也大了,很想拿Java做来开发这个新项目,但心有余力不足,简单的spring开发框架居然弄了三个星期了。Java web project现在如果框架搭配好了,利用集成的开发工具,其开发效率其实已经超过PHP了,PHP的优势渐渐仅剩下一个易于上手了。然而PHP所面临的问题却一直得不到解决,烦锁的事务、尴尬的缓存、无能为力的异常处理。而JAVA这块如果有一个比较好的技术主管理负责项目的环境搭配与布署工作,再找几个廉价的jsp coder那么其各方面的效率甚至是开节约发成本已经全面超越了PHP了。

唉。。。 这就是PHPer的处境~  做程序员一定要跟上潮流学好JAVA或.net,再花些时间学学数据结构和算法。

宿舍的家伙晚上睡觉睡的晚,在看电视,睡不着想点就写点。

突然想起以前自己做的一个抽奖系统用到的算法。例如想得到一个 33% 和 2% 的概率,现在想不起来当时用的什么方法了,反正感觉比下面的方法要好。
function doSomethingWithPercent($percent) {
    $num = rand(1, 100);
    if($num >= 1 && $num <= $percent) return true;
    return false;
}

if(doSomethingWithPercent(33)) do33Percent();
if(doSomethingWithPercent(2)) do2Percent();
meiking   2008-05-27 00:58:15 阅读:17  评论:0  引用:0
var name = "中文";
if(name.match(/[^\u4e00-\u9fa5]/g)) alert(name+" is not chinease");
else alert(name+" is chinease");

name = "english";
if(name.match(/[^\u4e00-\u9fa5]/g)) alert(name+" is not chinease");
else alert(name+" is chinease");
meiking   2008-05-08 11:28:10 阅读:211  评论:0  引用:0


在IE下offset对象是对当前元素到上一级元素的距离,这算是IE很差劲的一个地方,为了这个浪费了不少时间,firefox下则是标准的。为了使两个浏览器兼容,需要做一些处理,下面这个方法是我从网上找的,不记得在哪找得了,比较好用。
var w3c=(document.getElementById)? true:false;
var agt=navigator.userAgent.toLowerCase();
var ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1) && (agt.indexOf("omniweb") == -1));
var ie5=(w3c && ie)? true : false;
var ns6=(w3c && (navigator.appName=="Netscape"))? true: false;
var op8=(navigator.userAgent.toLowerCase().indexOf("opera")==-1)? false:true;

function GetXYWH(o){
    var nLt=0;
    var nTp=0;
    var offsetParent = o;
    while (offsetParent!=null && offsetParent!=document.body) {
        nLt+=offsetParent.offsetLeft;
        nTp+=offsetParent.offsetTop;
        if(!ns6){
            parseInt(offsetParent.currentStyle.borderLeftWidth)>0?nLt+=parseInt(offsetParent.currentStyle.borderLeftWidth):"";
            parseInt(offsetParent.currentStyle.borderTopWidth)>0?nTp+=parseInt(offsetParent.currentStyle.borderTopWidth):"";
        }
        offsetParent=offsetParent.offsetParent;
        //alert(offsetParent.tagName);
    }
    this.left = nLt;
    this.top = nTp;
    this.width = o.offsetWidth;
    this.height = o.offsetHeight;
}

/* 调用方法 */
var element_obj = new GetXYWH(document.getElementById("right"));  //ID为 right的元素
alert("上边距:" + element_obj.top + " 左边距:" + element_obj.left);
meiking   2008-04-24 14:47:25 阅读:30  评论:0  引用:0
        在做鼠标移动至一个某些按钮或文字上便在当前位置显示图片的功能时需要用鼠标的坐标来定位,方法比较简单,但面在Firefox的广告做的这么火,甚至用流氓方法,所以需要注意Mozilla或Firefox和IE的兼容.
event.clientX 为鼠标距浏览左面边缘的距离, event.clientY 为 鼠村距网页上方边缘的距离,但定位不光这样就行了,需要考虑到当前网页坐标并不是鼠标的位置(例如把网页滚动条拖到最右下方),所以我们需要加上下面的内容:
var x = event.clientX + document.body.scrollLeft;
var y = event.clientY + document.body.scrollTop;
        如果网页遵循了w3c标准的话需要把 document.body 换成 document.documentElement ,否则 scroll 所取出来的值一律为0.

        如果大家使用上面的代码并且是在firefox下调试的,是不是已经发现了 "event has not defined",当然我也碰到这问题了:
JS: function test_event() {
       var x = event.clientX + document.body.scrollLeft;
       var y = event.clientY + document.body.scrollTop;
       alert("左边:"+x+ ", 右边:"+y);
}
HTML: <span onclick="test_event();">click me</span>
        需要把event对象传进去,按如下方法修改后便能正常运行,只知道IE和Firefox有些dom不一样,但这种方法就有点搞不懂是什么意思:
JS: function test_event(event) {
       var x = event.clientX + document.body.scrollLeft;
       var y = event.clientY + document.body.scrollTop;
       alert("左边:"+x+ ", 右边:"+y);
}
HTML: <span onclick="test_event(event);">click me</span>
meiking   2008-04-11 18:00:50 阅读:401  评论:1  引用:0
是CHM格式的,和css2.0.chm是同一个作者,特点就是比较好用,有示例,比较干净整洁。
文档对象模型中文手册.rar
meiking   2008-04-10 01:59:16 阅读:459  评论:0  引用:0
Ajax 由 HTML、JavaScript、DHTML 和 DOM 组成,这一杰出的方法可以将笨拙的 Web 界面转化成交互性的 Ajax 应用程序。本文的作者是一位 Ajax 专家,他演示了这些技术如何协同工作 -- 从总体概述到细节的讨论 -- 使高效的 Web 开发成为现实。他还揭开了 Ajax 核心概念的神秘面纱,包括 XMLHttpRequest 对象。

  进一步学习请参考:

meiking   2008-04-10 01:58:53 阅读:29  评论:0  引用:0
Copyright@2008 powered by YuLog