环境:
nginx-1.2.7.tar.gz
LuaJIT-2.0.1.tar.gz
按照正常流程对LuaJIT-2.0.1.tar.gz编译,make;make install
编译nginx
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.0
./configure --prefix=/usr/local/nginx --add-module=exp/lua-nginx-module/ 其他模块参数略
此时会报告错误
checking for LuaJIT library in /usr/local/lib and /usr/local/include/luajit-2.0 (specified by the LUAJIT_LIB and LUAJIT_INC env) ... not found
./configure: error: the ngx_lua addon requires the lua or luajit library and LUAJIT_LIB is defined as /usr/local/lib and LUAJIT_INC /usr/local/include/luajit-2.0, but we cannot find LuaJIT there.
但是查看相应目录及文件都存在,对错误细节内容追踪,在 objs/autoconf.err 中包含
>> ----------------------------------------
>> checking for LuaJIT library in /usr/local/lib and
>> /usr/local/include/luajit-2.0 (specified by the LUAJIT_LIB and LUAJIT_INC
>> env)
>>
>> /usr/local/lib/libluajit-5.1.a(lj_clib.o): In function `lj_clib_unload':
>> lj_clib.c:(.text+0x9d): undefined reference to `dlclose'
>> /usr/local/lib/libluajit-5.1.a(lj_clib.o): In function `clib_error_':
>> lj_clib.c:(.text+0xb5): undefined reference to `dlerror'
>> /usr/local/lib/libluajit-5.1.a(lj_clib.o): In function `lj_clib_load':
>> lj_clib.c:(.text+0x1bf): undefined reference to `dlopen'
>> lj_clib.c:(.text+0x214): undefined reference to `dlerror'
>> lj_clib.c:(.text+0x2ec): undefined reference to `dlopen'
>> lj_clib.c:(.text+0x2fd): undefined reference to `dlerror'
>> /usr/local/lib/libluajit-5.1.a(lj_clib.o): In function `lj_clib_index':
>> lj_clib.c:(.text+0x47e): undefined reference to `dlsym'
>> collect2: ld 返回 1
通过该提示,可以在 configure 后追加 --with-ld-opt=-ldl 解决编译问题,并能顺利通过,但是不建议自己指定-ldl选项,因为会导致其他问题。
那能否不指定这个选择,顺利完成编译呢?
通过对LuaJIT编译过程分析,发现LuaJIT在编译中未找到ldconfig,分析为此原因导致
编辑 Makefile文件,找到ldconfig位置(75行)
原内容是:LDCONFIG= ldconfig -n
修改为:LDCONFIG= /sbin/ldconfig -n
然后对LuaJIT重新make install
此时再编译nginx,一切顺利
nginx-1.2.7.tar.gz
LuaJIT-2.0.1.tar.gz
按照正常流程对LuaJIT-2.0.1.tar.gz编译,make;make install
编译nginx
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.0
./configure --prefix=/usr/local/nginx --add-module=exp/lua-nginx-module/ 其他模块参数略
此时会报告错误
checking for LuaJIT library in /usr/local/lib and /usr/local/include/luajit-2.0 (specified by the LUAJIT_LIB and LUAJIT_INC env) ... not found
./configure: error: the ngx_lua addon requires the lua or luajit library and LUAJIT_LIB is defined as /usr/local/lib and LUAJIT_INC /usr/local/include/luajit-2.0, but we cannot find LuaJIT there.
但是查看相应目录及文件都存在,对错误细节内容追踪,在 objs/autoconf.err 中包含
>> ----------------------------------------
>> checking for LuaJIT library in /usr/local/lib and
>> /usr/local/include/luajit-2.0 (specified by the LUAJIT_LIB and LUAJIT_INC
>> env)
>>
>> /usr/local/lib/libluajit-5.1.a(lj_clib.o): In function `lj_clib_unload':
>> lj_clib.c:(.text+0x9d): undefined reference to `dlclose'
>> /usr/local/lib/libluajit-5.1.a(lj_clib.o): In function `clib_error_':
>> lj_clib.c:(.text+0xb5): undefined reference to `dlerror'
>> /usr/local/lib/libluajit-5.1.a(lj_clib.o): In function `lj_clib_load':
>> lj_clib.c:(.text+0x1bf): undefined reference to `dlopen'
>> lj_clib.c:(.text+0x214): undefined reference to `dlerror'
>> lj_clib.c:(.text+0x2ec): undefined reference to `dlopen'
>> lj_clib.c:(.text+0x2fd): undefined reference to `dlerror'
>> /usr/local/lib/libluajit-5.1.a(lj_clib.o): In function `lj_clib_index':
>> lj_clib.c:(.text+0x47e): undefined reference to `dlsym'
>> collect2: ld 返回 1
通过该提示,可以在 configure 后追加 --with-ld-opt=-ldl 解决编译问题,并能顺利通过,但是不建议自己指定-ldl选项,因为会导致其他问题。
那能否不指定这个选择,顺利完成编译呢?
通过对LuaJIT编译过程分析,发现LuaJIT在编译中未找到ldconfig,分析为此原因导致
编辑 Makefile文件,找到ldconfig位置(75行)
原内容是:LDCONFIG= ldconfig -n
修改为:LDCONFIG= /sbin/ldconfig -n
然后对LuaJIT重新make install
此时再编译nginx,一切顺利
改之前先建立一个登录的用户
1,只允许某个IP登录,拒绝其他所有IP
在 /etc/hosts.allow 写:
sshd: 192.168.1.207
在 /etc/hosts.deny 写:
sshd: ALL
2,禁止某个用户通过ssh登录
在/etc/ssh/sshd_conf添加
AllowUsers 用户名
或者
AllowGroups 组名
或者
DenyUsers 用户名
3、修改默认端口:默认Port为22,并且已经注释掉了;修改是把注释去掉,并修改成其它的端口。
4、禁止root用户远程登陆:修改PermitRootLogin,默认为yes且注释掉了;修改是把注释去掉,并改成no。
5、PermitEmptyPasswords no不允许空密码用户login
1,只允许某个IP登录,拒绝其他所有IP
在 /etc/hosts.allow 写:
sshd: 192.168.1.207
在 /etc/hosts.deny 写:
sshd: ALL
2,禁止某个用户通过ssh登录
在/etc/ssh/sshd_conf添加
AllowUsers 用户名
或者
AllowGroups 组名
或者
DenyUsers 用户名
3、修改默认端口:默认Port为22,并且已经注释掉了;修改是把注释去掉,并修改成其它的端口。
4、禁止root用户远程登陆:修改PermitRootLogin,默认为yes且注释掉了;修改是把注释去掉,并改成no。
5、PermitEmptyPasswords no不允许空密码用户login
firewall.sh
#!/bin/sh
/sbin/modprobe ip_tables
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_nat
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
#以上命令为载入模块
iptables -P INPUT DROP
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT
iptables -P FORWARD DROP
iptables -F FORWARD
iptables -t nat -F
#以上命令为设置默认规则----禁止所有,注意会清空原有规则,请注意原有规则的保存备份。
################################add tointernet##########################
iptables -A INPUT -p udp --sport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 123 -j ACCEPT
iptables -A INPUT -p tcp --sport 20 -j ACCEPT
iptables -A INPUT -p tcp --sport 21 -j ACCEPT
iptables -A INPUT -p tcp --sport 80 -j ACCEPT
iptables -A INPUT -p tcp --sport 443 -j ACCEPT
iptables -A INPUT -p tcp --sport 8080 -j ACCEPT
iptables -A INPUT -p tcp --sport 25 -j ACCEPT
iptables -A INPUT -p tcp --sport 3306 -j ACCEPT
iptables -A INPUT -p tcp --sport 52521 -j ACCEPT
################################add tointernet##########################
#以上规则的意思是,开放你服务器对外访问的回程允许,如果你的服务器不需要对外访问,请删除
################################禁止IP#############################
#iptables -A INPUT -s 66.85.180.96 -j DROP
#
################################add manager#############################
iptables -A INPUT -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -s ***.***.***.*** -p 0 -j ACCEPT
################################add manager#############################
#以上的规则的意思是,开放你的管理客户端的所有通讯(当然包括22端口啦),但除了这个源IP外,其它任何IP都访问该服务器的22端口了
#
#
################################add 80##################################
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
################################add 80##################################
#开放外网所有访问你的80
#如果你的MYSQL或其它服务需要对外开放,请按上面的格式添加
#
#丢弃坏的TCP包
#iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
#处理IP碎片数量,防止攻击,允许每秒100个
#iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
#
#
/etc/rc.d/init.d/iptables save
/etc/rc.d/init.d/iptables restart
jk.sh
#!/bin/bash
WAIT_DIR=${1-/datan/website}
nohup /usr/local/bin/inotifywait --exclude '^/datan/website/(god|ddimg|upimg|file)/' -qmre attrib,modify,move,create,delete $WAIT_DIR --format '"%w" "%f" "%e" "%T"' --timefmt='%F_%T' \
| while read DIR FILE EVENT TIME ;do
echo $DIR $FILE $EVENT $TIME >>/data/logs/jk/web_$(date -d "yesterday" +"%Y%m%d").txt
done
#!/bin/sh
/sbin/modprobe ip_tables
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_nat
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
#以上命令为载入模块
iptables -P INPUT DROP
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT
iptables -P FORWARD DROP
iptables -F FORWARD
iptables -t nat -F
#以上命令为设置默认规则----禁止所有,注意会清空原有规则,请注意原有规则的保存备份。
################################add tointernet##########################
iptables -A INPUT -p udp --sport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 123 -j ACCEPT
iptables -A INPUT -p tcp --sport 20 -j ACCEPT
iptables -A INPUT -p tcp --sport 21 -j ACCEPT
iptables -A INPUT -p tcp --sport 80 -j ACCEPT
iptables -A INPUT -p tcp --sport 443 -j ACCEPT
iptables -A INPUT -p tcp --sport 8080 -j ACCEPT
iptables -A INPUT -p tcp --sport 25 -j ACCEPT
iptables -A INPUT -p tcp --sport 3306 -j ACCEPT
iptables -A INPUT -p tcp --sport 52521 -j ACCEPT
################################add tointernet##########################
#以上规则的意思是,开放你服务器对外访问的回程允许,如果你的服务器不需要对外访问,请删除
################################禁止IP#############################
#iptables -A INPUT -s 66.85.180.96 -j DROP
#
################################add manager#############################
iptables -A INPUT -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -s ***.***.***.*** -p 0 -j ACCEPT
################################add manager#############################
#以上的规则的意思是,开放你的管理客户端的所有通讯(当然包括22端口啦),但除了这个源IP外,其它任何IP都访问该服务器的22端口了
#
#
################################add 80##################################
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
################################add 80##################################
#开放外网所有访问你的80
#如果你的MYSQL或其它服务需要对外开放,请按上面的格式添加
#
#丢弃坏的TCP包
#iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
#处理IP碎片数量,防止攻击,允许每秒100个
#iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
#
#
/etc/rc.d/init.d/iptables save
/etc/rc.d/init.d/iptables restart
jk.sh
#!/bin/bash
WAIT_DIR=${1-/datan/website}
nohup /usr/local/bin/inotifywait --exclude '^/datan/website/(god|ddimg|upimg|file)/' -qmre attrib,modify,move,create,delete $WAIT_DIR --format '"%w" "%f" "%e" "%T"' --timefmt='%F_%T' \
| while read DIR FILE EVENT TIME ;do
echo $DIR $FILE $EVENT $TIME >>/data/logs/jk/web_$(date -d "yesterday" +"%Y%m%d").txt
done
一、VPS只有一个根分区,没有swap交换分区。VPS内存不大,于是,我为其增加了一个swap交换文件。
1、进入一个目录
cd /var/
2、获取256M的文件块:
[/code]
dd if=/dev/zero of=swapfile bs=1024 count=262144
[/code]
3、创建swap文件
/sbin/mkswap swapfile
4、激活swap文件
/sbin/swapon swapfile
5、查看一下swap是否正确:
/sbin/swapon -s
6、加到fstab文件中让系统引导时自动启动
vi /etc/fstab
在末尾增加以下内容:
/var/swapfile swap swap defaults 0 0
1、进入一个目录
cd /var/
2、获取256M的文件块:
[/code]
dd if=/dev/zero of=swapfile bs=1024 count=262144
[/code]
3、创建swap文件
/sbin/mkswap swapfile
4、激活swap文件
/sbin/swapon swapfile
5、查看一下swap是否正确:
/sbin/swapon -s
6、加到fstab文件中让系统引导时自动启动
vi /etc/fstab
在末尾增加以下内容:
/var/swapfile swap swap defaults 0 0
1. 重启系统看是否可以自动修复。
2. 使用fsck -y /dev/sda1 进行自动修复。(用”-y”选项来执行该命令对硬盘进行检查和修复)
添加参数:fsck -y -C -t ext3 /dev/sda1 (一般情况下修复完成后,所有文件移动到 lost+found目录,文件名会被改变)
(-C 显示进度条 -t 指定文件系统类型 -y 默认自动yes修复)
3. 如果fsck修复完成后,启动系统依然自读。
查看分区结构:
[root@localhost ~]# more /etc/fstab
[root@localhost ~]# more /proc/mounts
[root@localhost ~]# mount
/dev/sda2 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
查看ro挂载的分区,如果发现有ro,就重新mount
umount /dev/sda1
mount /dev/sda1 /boot
如果发现有提示“device is busy”,找到是什么进程使得他busy
fuser -m /boot 将会显示使用这个模块的pid
fuser -mk /boot 将会直接kill那个pid
然后重新mount即可。
4. 直接remount
[root@localhost ~]# mount -o rw,remount /dev/sda1
2. 使用fsck -y /dev/sda1 进行自动修复。(用”-y”选项来执行该命令对硬盘进行检查和修复)
添加参数:fsck -y -C -t ext3 /dev/sda1 (一般情况下修复完成后,所有文件移动到 lost+found目录,文件名会被改变)
(-C 显示进度条 -t 指定文件系统类型 -y 默认自动yes修复)
3. 如果fsck修复完成后,启动系统依然自读。
查看分区结构:
[root@localhost ~]# more /etc/fstab
[root@localhost ~]# more /proc/mounts
[root@localhost ~]# mount
/dev/sda2 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
查看ro挂载的分区,如果发现有ro,就重新mount
umount /dev/sda1
mount /dev/sda1 /boot
如果发现有提示“device is busy”,找到是什么进程使得他busy
fuser -m /boot 将会显示使用这个模块的pid
fuser -mk /boot 将会直接kill那个pid
然后重新mount即可。
4. 直接remount
[root@localhost ~]# mount -o rw,remount /dev/sda1
目标ftp服务器是一个非标准端口的ftp
1.通过shell登录
#ftp //shell下输入ftp命令,进入到ftp提示符
>open IP PORT //IP ,PORT对应为服务器的IP和端口号
或者直接使用一条语句
#ftp IP PORT
2.多文件下载(对目录无效)
如:下载目录下的所有文件(子目录是无法下载下来的)
>mget *
这样操作,下载每个文件都会提问,每次都要输入一个y
要去掉提问,就要先输入
>prompt off
3.解决:ftp命令行不支持目录下载
通过wget得到解决
#wget ftp://IP:PORT/* --ftp-user=xxx --ftp-password=xxx -r
注:
星号*必须有,否则下载下来的就一个文件index.html
-r参数就是用来目录下载的
附:
一个ftp多文件下载上传的shell脚本
ftp server: 192.168.0.100:2121
User/PWD : test/ 2009
到OUTBOX下下载所有的文件(不包括文件夹),并将test.txt上传到INBOX
内容如下
#!/bin/bash
#cd /home/ftptmp/
ftp -v -n 192.168.0.100 2121 <<EOF
user test 2009
binary
cd OUTBOX
prompt
mget *
cd ..
cd INBOX
put test.txt
close
bye
EOF
1.通过shell登录
#ftp //shell下输入ftp命令,进入到ftp提示符
>open IP PORT //IP ,PORT对应为服务器的IP和端口号
或者直接使用一条语句
#ftp IP PORT
2.多文件下载(对目录无效)
如:下载目录下的所有文件(子目录是无法下载下来的)
>mget *
这样操作,下载每个文件都会提问,每次都要输入一个y
要去掉提问,就要先输入
>prompt off
3.解决:ftp命令行不支持目录下载
通过wget得到解决
#wget ftp://IP:PORT/* --ftp-user=xxx --ftp-password=xxx -r
注:
星号*必须有,否则下载下来的就一个文件index.html
-r参数就是用来目录下载的
附:
一个ftp多文件下载上传的shell脚本
ftp server: 192.168.0.100:2121
User/PWD : test/ 2009
到OUTBOX下下载所有的文件(不包括文件夹),并将test.txt上传到INBOX
内容如下
#!/bin/bash
#cd /home/ftptmp/
ftp -v -n 192.168.0.100 2121 <<EOF
user test 2009
binary
cd OUTBOX
prompt
mget *
cd ..
cd INBOX
put test.txt
close
bye
EOF