nginx使用三方模块方法

nginx文件非常小但是性能非常的高效,这方面完胜apache,nginx文件小的一个原因之一是nginx自带的功能相对较少,好在nginx允许第三方模块,第三方模块使得nginx越发的强大. 在安装模块方面,nginx显得没有apache安装模块方便,当然也没有php安装扩展方便.在原生的nginx,他不可以动态加载模块,所以当你安装第三方模块的时候需要覆盖nginx文件.接下来看看如何安装nginx第三模块吧.

nginx第三方模块安装方法:
[codesyntax lang=”text”]

./configure --prefix=/你的安装目录  --add-module=/第三方模块目录

[/codesyntax]
以安装pagespeed模块实例

在未安装nginx的情况下安装nginx第三方模块
[codesyntax lang=”text”]

# ./configure --prefix=/usr/local/nginx-1.4.1 \
--with-http_stub_status_module \
--with-http_ssl_module --with-http_realip_module \
--with-http_image_filter_module \
--add-module=../ngx_pagespeed-master --add-module=/第三方模块目录
# make
# make isntall
# /usr/local/nginx-1.4.1/sbin/nginx

[/codesyntax]

在已安装nginx情况下安装nginx模块
[codesyntax lang=”text”]

# ./configure --prefix=/usr/local/nginx-1.4.1 \
 --with-http_stub_status_module \
 --with-http_ssl_module --with-http_realip_module \
 --with-http_image_filter_module \
 --add-module=../ngx_pagespeed-master
# make
# /usr/local/nginx-1.4.1/sbin/nginx -s stop
# cp objs/nginx /usr/local/nginx/sbin/nginx
# /usr/local/nginx-1.4.1/sbin/nginx

[/codesyntax]

相比之下仅仅多了一步覆盖nginx文件.

总结,安装nginx安装第三方模块实际上是使用–add-module重新安装一次nginx,不要make install而是直接把编译目录下objs/nginx文件直接覆盖老的nginx文件.如果你需要安装多个nginx第三方模块,你只需要多指定几个相应的–add-module即可.

备注:
重新编译的时候,记得一定要把以前编译过的模块一同加到configure参数里面.

nginx提供了非常多的nginx第三方模块提供安装,地址http://wiki.nginx.org/3rdPartyModules

常用Eclipse配置

eclipse的使用,在其help文件中都有详细的介绍如何使用的,一般可以去那边找。
代码折叠设置

快捷键设置

编译器错误、警告设置

本地历史设置

代码格式化设置

库设置

文本编辑器设置

让eclipse能启动多个实例

工作空间设置

xml编辑器设置

外观设置

代码格式化风格设置

鼠标over代码等时的提示设置

创建新文件时生成文件的模版设置

junit launcher设置。在开发android时,如果用eclipse内置的launcher是不行的,必须用android提供的。

eclipse调优

一般在不对eclipse进行相关设置的时候,使用eclipse总是会觉得启动好慢,用起来好卡,其实只要对eclipse的相关参数进行一些配置,就会有很大的改善。
加快启动速度
1.在eclipse启动的时候,它总是会搜索让其运行的jre,往往就是这个搜索过程让eclipse启动变慢了。(没设置时,等2-3s出现进度条,设置后直接出现进度条)

只要在eclipse.ini中加入-vm的参数就可以了

2.取消所有启动时要激活的插件(在用时激活也一样)和其它的相关的在启动时执行的操作。

3.关闭自动更新

减少jvm内存回收引起的eclipse卡的问题
这个主要是jvm在client模式,进行内存回收时,会停下所有的其它工作,带回收完毕才去执行其它任务,在这期间eclipse就卡住了。所以适当的增加jvm申请的内存大小来减少其回收的次数甚至不回收,就会是卡的现象有明显改善。

主要通过以下的几个jvm参数来设置堆内存的:

-Xmx512m 最大总堆内存,一般设置为物理内存的1/4
-Xms512m 初始总堆内存,一般将它设置的和最大堆内存一样大,这样就不需要根据当前堆使用情况而调整堆的大小了
-Xmn192m 年轻带堆内存,sun官方推荐为整个堆的3/8
堆内存的组成 总堆内存 = 年轻带堆内存 + 年老带堆内存 + 持久带堆内存
年轻带堆内存 对象刚创建出来时放在这里
年老带堆内存 对象在被真正会回收之前会先放在这里
持久带堆内存 class文件,元数据等放在这里
-XX:PermSize=128m 持久带堆的初始大小
-XX:MaxPermSize=128m 持久带堆的最大大小,eclipse默认为256m。如果要编译jdk这种,一定要把这个设的很大,因为它的类太多了。

我的配置(2g内存的笔记本):

还有其它的相关参数可以看看下面的参考材料,很有启发的:
-XX:+UseParallelGC 使用并发内存回收
-XX:+DisableExplicitGC 禁用System.gc()的显示内存回收

eclipse相关设置来来减少卡的现象
1.关闭自动构建。在启用时,每保存一下,eclipse就会自动为我们构建整个项目,这样对于大的项目来说,每次保存时都会造成很卡。其实自动构建完全没有必要,只要保证在运行前构建一次就ok了,eclipse也会在运行前自动为我们构建,所以关闭是最明智的选择。

2.关闭拼写检查设置

3.关闭SaveAction。在每次保存时都会执行的操作,这个会严重的拖慢保存,特别是文件大时。这个其实只要自己养成良好的编程习惯,就完全不需要这个了。

4.优化代码提示。

5.eclipse按Ctrl键卡死的问题解决方法
在eclipse中编辑3万行左右的代码时,在用ctrl+c/v复制时eclipse经常会卡住较长的时间。
后来发现只要按下ctrl键就会卡,我猜测应该是因为eclipse中按住ctrl后可以用鼠标单击跳转到变量定义的地方,所以当按下ctrl键时eclipse会去生成这个映射,当文件比较大时,这个行为会花费比较多的时间,非常不爽,经过一番查找才知道,可以通过以下方法设置快捷键。

Eclipse — Windows->Preferences->General->Editors->Text Editors->Hyperlinking:
去掉这个选项:Enable on demand hyperlinks style navigation
或者将你不想做Ctrl跳转的文件不选即可!

其它的优化链接
http://wcgdonot.iteye.com/blog/1380429

参考材料:

jvm启动参数大全:
http://www.blogjava.net/midstr/archive/2008/09/21/230265.html
jvm结构的一些知识(其中的堆的构成):
http://hllvm.group.iteye.com/group/wiki/2905-JVM
jvm堆知识:
http://ruijf.iteye.com/blog/1028455
eclipse启动调优:
http://www.iteye.com/topic/756538
eclipse自带的help contents(搜索”Running Eclipse”可以找到启动相关的配置)

DDNS实现 (DHCP+DNS)

在网络管理中,维护DNS服务器是一项很基本的工作。但是,随着网络规模的不断扩大,频繁的去修改DNS区域数据文件,那也将会是一件很麻烦的事情。因此,动态DNS就应运而生。

动态DNS(DDNS)需要DNS和DHCP来协同工作。Linux下也可以实现DDNS,不过DNS需要Bind8以上的版本,DHCP需要3.0以上的版本。

本文用RedHat9来实现DDNS,Bind版本是bind-9.2.1-16,DHCP版本是dhcp-3.0pl1-23。DNS和DHCP使用一台服务器。

后记讲使用Cent OS 5.1实现DDNS。

1. DDNS试验拓扑

DDNS试验拓扑

2. 安装DNS和DHCP软件包

挂载系统盘,进入RPM包目录,使用rpm –ivh来安装bind包和dhcp包。其中caching-nameserver包是用来安装name.ca、name.local等区域文件的,如果不安装此包,那么就要手写或者从别的地方down这些文件了。

rpm

3. 配置DNS服务

① 编辑DNS服务主配置文件named.conf,默认在/etc/目录下。 [codesyntax lang=”text”]

vi /etc/named.conf
options {
             directory "/var/named";
};
zone "." IN {
            type hint;
             file "named.ca";
};
zone "localhost" IN {
             type master;
             file "localhost.zone";
             allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
             type master;
             file "named.local";
             allow-update { none; };
};
zone "bob.com" IN {
             type master;
            file "bob.com.dns";
             allow-update { none; };
};
zone "1.168.192.in-addr.arpa" IN {
             type master;
             file "bob.com.rev";
             allow-update { none; };
};
include "/etc/rndc.key";

[/codesyntax]

② 建立区域数据文件

因为安装了caching-nameserver这个包,所以像named.ca、named.local和localhost.zone这三个区域数据文件都有了。现在来创建bob.com域的正向和反向区域数据文件。 [codesyntax lang=”text”]

vi /var/named/bob.com.dns
$TTL 86400
$ORIGIN bob.com.
@    IN   SOA   bob.com.   root.bob.com. (
                                                    20081103 ;     serial
                                                    120 ;          refresh
                                                    14400 ;      retry
                                                    3600000 ;  expiry
                                                    86400 ) ;    minimum
                      IN   NS     bob.com.
dns                IN    A      192.168.1.251
www             IN    A      192.168.1.250

[/codesyntax] [codesyntax lang=”text”]

i /var/named/bob.com.rev
$TTL 86400
@    IN    SOA   bob.com.   root.bob.com. (
                                                    20081103 ;     Serial
                                                    120 ;          Refresh
                                                    14400 ;      Retry
                                                    3600000 ;  Expire
                                                    86400 ) ;    Minimum
                     IN   NS      bob.com.
251               IN  PTR     dns.bob.com.
250               IN  PTR     [url]www.bob.com[/url].

[/codesyntax] [codesyntax lang=”bash”]

chown named.named /var/named/bob.com.*

[/codesyntax]

③ 测试DNS服务

使用service named start命令启动DNS服务。

named

在防火墙中将UDP和TCP的53端口开放。

然后使用service iptables restart命令重启防火墙。

Windows PC测试:

在Windows PC上将DNS指向192.168.1.251。

windos

在Windows PC上使用nslookup命令来解析DNS服务器中的域名。

windows

Linux  PC测试:

在Linux PC上将DNS指向192.168.1.251。

resolv

在Linux PC上使用host命令和nslookup命令来解析DNS服务器中的域名。

linuxpc

4. 配置DHCP服务

① 编辑DHCP服务主配置文件dhcpd.conf,默认在/etc/目录下。 [codesyntax lang=”text”]

vi /etc/dhcpd.conf
ddns-update-style interim;
ignore client-updates;
default-lease-time 604800;
max-lease-time 864000;
option domain-name “bob.com”;
option domain-name-servers 192.168.1.251;
option time-offset -18000;
subnet 192.168.1.0 netmask 255.255.255.0 {
        range 192.168.1.100 192.168.1.200;
        option broadcast-address 192.168.1.255;
        option routers 192.168.1.1;
        }

[/codesyntax]

② 测试DHCP+DNS服务

使用service dhcpd start命令启动DHCP服务。

dhcpd

Windows PC测试:

在Windows PC上设置动态获取IP和DNS。

dhcp

在Windows PC上使用nslookup命令来解析DNS服务器中的域名。

windows

Linux PC测试:

在Linux PC上使用动态获取IP和DNS。

linuxpc

使用service network restart命令重启网卡。

service

使用ifconfig命令查看Linux PC获取到的IP地址。

linux

使用cat /etc/resolv.conf查看Linux PC获取到的DNS地址。

dhcp

在Linux PC上使用host命令和nslookup命令来解析DNS服务器中的域名。

linuxpc

5. 配置安全的DDNS

① 创建密钥

在DDNS服务器中以root身份进行:

使用dnssec–keygen –a HMAC-MD5 –b 128 –n USER bobddns命令来生成密钥。

dnssec-keygen用来生成更新密钥。

-a HMAC-MD5采用HMAC-MD5加密算法。

-b 128生成的密钥长度为128位。

-n USER bobddns密钥的用户名为bobddns。

dnssec

密钥生成后,会在当前目录下自动生成两个密钥文件Kbobddns.+157+xxx.key和Kbobddns.+157+xxx.private。

ls两个密钥文件

查看两个密钥文件的内容:

cat Kbobddns.+157+50923.key

cat Kbobddns.+157+50923.private

cat密钥文件

两个密钥文件中的128位密钥是一致的。需记住这一串密钥字符串,后面将会用到。

② 添加密钥信息到DNS主配置文件中 [codesyntax lang=”text”]

vi /etc/named.conf
添加:
key bobddns {
algorithm hmac-md5;
secret J+mC6Q29xiOtNEBySR4O1g==;
};

[/codesyntax] algorithm:指明生成密钥的算法。 secret:指明密钥串。 将bob.com区域中的allow-update { none; }中的“none”改成“key bobddns”; 将1.168.192.in-addr.arpa区域中的allow-update { none; }中的“none”也改成“key bobddns”。将“none”改成“key bobddns”的意思是指明采用“key bobddns”作为密钥的用户可以动态更新“bob.com”区域。

编辑named.conf

③ 添加密钥信息到DHCP主配置文件中 [codesyntax lang=”text”]

vi /etc/dhcpd.conf
添加:
key bobddns {
            algorithm hmac-md5;
            secret J+mC6Q29xiOtNEBySR4O1g==;
}
zone bob.com. {
            primary 192.168.1.251;
            key bobddns;
}
zone 1.168.192.in-addr.arpa. {
            primary 192.168.1.251;
            key bobddns;
}

[/codesyntax]

编辑dhcpd.conf

注意:域名后面的“.”千万不能少了,还有在每个“}”后面都没有“;”,这两点和named是不一样的,请注意。

④ 重启DHCP和DNS服务

service dhcpd restart

service named restart

重启DHCP和DNS服务

⑤ 测试DDNS

Windows PC测试:

使用hostname命令查看主机名。

windowspc

使用ipconfig/releaseipconfig/renew命令重新向DHCP服务器获取IP。

使用nslookup命令测试。使用ls bob.com命令,发现PC1已经被添加到了bob.com这个域中了。然后使用pc1.bob.com能解析到自己的IP地址了。

windows

Linux PC测试:

使用hostname命令查看主机名。

Linuxpc

在Linux PC上的/etc目录下新建一个DHCP客户端文件,文件名为dhclient.conf。 [codesyntax lang=”text”]

vi /etc/dhclient.conf
加入:
send fqdn.fqdn "Linux";
send fqdn.encoded on;
send fqdn.server-update off;

[/codesyntax]

dhclient.conf

使用dhclient命令立即启动DHCP客户端。

使用nslookup命令测试。使用linux.bob.com能解析到自己的IP地址了,使用pc1.bob.com也能解析到Windows PC的IP地址了。

linux

DDNS服务器测试:

在重启完DHCP和DNS服务后,如果正常,会在/var/named/目录下生成两个.jnl二进制格式区域文件。这两个文件是当前正在工作的区域文件的运行时文件,所有动态更新的记录首先会反应到这两个文件中,然后经过大约15分钟的时间才会将更新内容添加到区域数据文件中。在本文的例子中,区域数据文件就是“bob.com.dns”和“bob.com.rev”。

jnl

查看更新后的区域数据文件,系统会将手写的区域数据文件格式更改成它自己的格式。

bob.com.dns

说明:以上区域文件的书写格式与更新前相比变化较大,说明该文件已经被更新过了。Windows PC和Linux PC的主机记录已经在区域数据文件中自动添加进来了。这里还要说明的是,在动态更新的客户端PC1和Linux的A纪录下多了一条同名的TXT类型的纪录。TXT类型纪录是BIND-DNS和DHCP专门用来实现DDNS的辅助性资源纪录,它的值是哈希标示符字符串,该字符串的值还可以在DHCP租约文件/var/lib/dhcp/dhcpd.leases中找到。

dhcpd.lease

bob.com.rev

后记:Cent OS 5.1实验DDNS成功。

刚开始我使用Cent OS 5.1做这个实验,但是没有成功。named和dhcpd这两个服务都能够正常的启动,但是两个区域数据文件的.jnl文件死活不出现,这样就没有达到动态更新的目的。因为以前我使用Red Hat 9将这个实验做了出来,所以,现在我就先使用Red Hat 9来做这个实验,成功了。

接下来,我又重新使用Cent OS 5.1来做这个DDNS实验,但是结果还是一样。我以为是chroot搞的鬼,就将bind-chroot-9.3.3-10.el5这个包卸载了,但是结果还是不成功。那问题就不在chroot上了,我又重装上了bind-chroot-9.3.3-10.el5。

后来,我比对了一下Red Hat 9和Cent OS 5的区域数据文件的属主(Red Hat 9 的区域数据文件默认在/var/named/目录下;Cent OS 5的区域数据文件默认在/var/named/chroot/var/named/目录下。),发现Red Hat 9的named目录的属主和属组都是named,而Cent OS 5的named目录的属主是root,属组是named,并且named目录下的区域数据文件的属主和属组与named目录一样。因此,我将named目录的属主和属组都改成了named后,并且重启named服务,使用updatedb命令重刷系统数据库后,在/var/named/chroot/var/named/目录下两个.jnl文件出现了。此时使用Windows PC和Linux PC测试都成功了。真的很高兴,做了几遍终于搞定了。原来是文件及目录的权限搞怪,使用ps aux可以看到named服务的管理者是named。

如果使用Cent OS或者Red Hat 企业版做这个实验,其他步骤和上面一样,只要将name目录的属主改成named即可搞定。 [codesyntax lang=”bash”]

chown -R named.named /var/named/chroot/var/named/

[/codesyntax]