MyDDNS

准备做一个轻量级的 DDNS 系统,就叫 MyDDNS 吧,这个系统分为两个部分,DNS服务器和记录更新器。

DNS服务器器收到DNS请求报文后先查询本地的数据库,如果问题与记录匹配则生成响应报文并返回。数据库准备使用 SQLite。

记录更新器可以有多种实现,目前先使用PHP程序实现基于 Web 的更新器,这种方法比较通用。记录更新器在收到用户提交后直接更新数据库即可。

代码仓库

git clone http://git.heiher.info/myddns.git

Over!

使用 PAM Limits 模块限制资源

通过 PAM 的 Limits 模块可以限制指定用户或组的资源使用,如核心文件大小(core)、数据段(data)、文件长度(fsize)、锁定内存地址空间(memlock)、打开文件数量(nofile)、栈长度(stack)、CPU时间(cpu)、进程数量(nproc)、地址空间长度(as)、登录数(maxlogins)、系统登录数(maxsyslogins)、优先级(priority)、锁定文件数(locks)、等待信号数(sigpending)、消息队列长度(msqqueue)、Nice(nice)、实时优先级(rtprio),chroot(chroot)。

这些限制可以通过修改 /etc/security/limits.conf 文件来实现,也可以在 /etc/security/limits.d/ 目录中增加一个配置文件来实现,这里我推荐后者,这处可以把限制更好的分类,便于查看和调整。

以几个实例简单介绍一下 limits.conf 配置文件语法,详细可以看 man limits.conf。

*		soft	nofile	10	# 软限制所有用户最大打开文件数为 10
*		hard	stack	1024	# 硬限制所有用户最大栈空间为 1M
fwd		hard	nproc	20	# 硬限制 fwd 用户最大进程数为 20
@sftp		hard	as	20480	# 硬限制 sftp 组最大地址空间为 20M

Over!

Linux 查看视屏设备有没有在使用

今天突然想知道我的视屏设备有没有正在被使用,通过测试发现通过内核模块的引用计数可以反应出设备有没有被使用,不过不知是否一定准确,有知道的朋友告诉我一下哦,谢谢!

lsmod | grep uvcvideo
uvcvideo               56990  0    # 此处如果为0表示没有被使用,否则正在使用中
videodev               34361  1 uvcvideo
v4l1_compat            13251  2 uvcvideo,videodev

Over!

奇怪的问题原来是这样

部分浏览器始终下载虚拟主机默认站点的证书的奇怪问题原来是这么回事,不是我的错。今天才发现原来前人早有总结。这就是服务器名称标识(Server Name Indication),已经被写人 RFC3546 了。可虽然是这样,还是有部分浏览器或操作系统不支持!

详细情况见 Wikipedia
测试你的浏览环境是否支持 SNI

Over!

LNMP 虚拟主机方案增加CGI支持

Nginx 服务器默认并不支持 CGI,但是支持 FastCGI。这里有两种方法可以使 Nginx 支持 CGI。

1. 使用 Nginx 透明代理功能将所有的 cgi 请求全部代理到后台支持 CGI 的 Web Server 上。
2. 使用 CGI 的 FastCGI 封装器执行 CGI 程序。

先简单说一下第一种方法,在后台运行一个支持CGI的Web服务器,当时是越简单都好啦,使用反向代理把 /cgi-bin 的请求转发到后台的服务器上处理。这里我们使用第二种方法。

location /cgi-bin {
   include proxy.conf;
   proxy_pass 127.0.0.1:8000;
}

因为我们要用户权限分离,如果用第一种方法的话,需要为每个用户运行一个服务器或要求这个服务器可以用户分离。不如使用封装器,只要为每个用户运行一个封装器就可以,这里我们选择一个简单的封装器 FcgiWrap

1. 下载源代码 & 编译
下载地址:http://github.com/gnosek/fcgiwrap/tarball/master

sudo aptitude install libfcgi-dev  # 先安装 libfcgi 开发包
cd fcgiwrap
autoreconf
./configure
make

2. Nginx 虚拟主机配置,增加如下

location /cgi-bin {
		fastcgi_pass   unix:/var/web/username/run/fcgiwrap.socket;
		fastcgi_index  index.cgi;
		fastcgi_param  SCRIPT_FILENAME  /var/web/username/home/web/$fastcgi_script_name;
		include fastcgi_params;
	}

3. 运行 FcgiWrap

su username -c "/path/fcgiwrap -s unix:/var/web/username/run/fcgiwrap.socket"
chmod 666 /var/web/username/run/fcgiwrap.socket

Over!