服务器

nginx的301跳转

今天把vps上的apache换成了nginx,需要对wordpress进行了301重定向,把www.njava.com和njava.com进行合并,通过判断nginx核心变量host来实现:

server {
server_name www.njava.com njava.com ;
if ($host != 'www.njava.com' ) {
rewrite ^/(.*)$ http://www.njava.com/$1 permanent;
}

Tags: ,

星期六, 20 3 月, 2010 服务器 没有评论

njava迁往米国BURSTNET VPS

上帝保佑

Tags:

星期二, 16 3 月, 2010 服务器 没有评论

freebsd常用状态信息命令

systat 实时查看各种信息

systat -pigs 猪头进程占用CPU
systat -iostat 硬盘IO
systat -swap 交换分区
systat -mbufs 网络缓冲区
systat -vmstat 虚拟内存
systat -netstat 网络
systat -icmp ICMP协议
systat -ip IP协议
systat -tcp TCP协议
systat -ifstat 网卡

显示PCI总线设备信息

pciconf -lv

显示内核加载的模块

kldstat -v

显示指定模块

klsdstat -m ipfilter

即插即用设备

pnpinfo

显示设备占用的IRQ和内存地址

devinfo -u
cpu
sysctl -a|grep cpu
sysctl -a|grep sched 查看使用的调度器

虚拟内存

vmstat

硬盘

gstat
systat -iostat
iostat

网卡

ifconfig
systat -ifstat

网络

netstat
sockstat
tcpdump
trafshow

Tags: ,

星期六, 13 3 月, 2010 服务器 没有评论

freebsd的观察系统状况命令systat

systat [-display] [更新-时间]
display system statistics 观察系统状况

-display          The - flag expects display to be one of: icmp, icmp6,
ifstat, iostat, ip, ip6, mbufs, netstat, pigs, swap,
tcp, or vmstat.  These displays can also be requested
interactively (without the ``-'') and are described in
full detail below.

例如

%systat -vm 1
    1 users    Load  5.04  4.35  3.92                  Mar 13 23:58

Mem:KB    REAL            VIRTUAL                       VN PAGER   SWAP PAGER
        Tot   Share      Tot    Share    Free           in   out     in   out
Act 2749488   20628 10344444    60420  167684  count     2
All 2792768   25576 14629708    76304          pages     4
Proc:                                                            Interrupts
  r   p   d   s   w   Csw  Trp  Sys  Int  Sof  Flt     21 cow    8236 total
  2     140 471       38k 9180 135k  225  63k 6927   6135 zfod        ata1 irq15
                                                          ozfod   225 mpt0 irq26
34.4%Sys   3.1%Intr 59.3%User  0.3%Nice  2.8%Idle        %ozfod  4005 cpu0: time
|    |    |    |    |    |    |    |    |    |    |       daefr  4006 cpu1: time
=================++>>>>>>>>>>>>>>>>>>>>>>>>>>>>>-    2162 prcfr
                                      1312 dtbuf     7597 totfr
Namei     Name-cache   Dir-cache    100000 desvn     9460 react
   Calls    hits   %    hits   %     53487 numvn          pdwak
   22102   21938  99                 24392 frevn          pdpgs
                                                          intrn
Disks   da0   da1 pass0 pass1                      501792 wire
KB/t  15.88  5.75  0.00  0.00                     2965052 act
tps     241     7     0     0                      331332 inact
MB/s   3.73  0.04  0.00  0.00                      143876 cache
%busy    38     3     0     0                       23808 free

查看是那头猪头进程在消耗cpu

%systat -pigs

                    /0   /1   /2   /3   /4   /5   /6   /7   /8   /9   /10
     Load Average   |||||||||||||

                    /0%  /10  /20  /30  /40  /50  /60  /70  /80  /90  /100
njava    php-cgi XXX
njava    php-cgi X

Tags: ,

星期六, 13 3 月, 2010 服务器 没有评论

Linux tail 命令详解

用途

从指定点开始将文件写到标准输出。使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容。

语法

标准语法

tail [ -f ] [ -c Number | -n Number | -m Number | -b Number | -k Number ] [ File ]

要以逆序显示行

tail [ -r ] [ -n Number ] [ File ]

描述

tail 命令从指定点开始将 File 参数指定的文件写到标准输出。如果没有指定文件,则会使用标准输入。 Number 变量指定将多少单元写入标准输出。 Number 变量的值可以是正的或负的整数。如果值的前面有 +(加号),从文件开头指定的单元数开始将文件写到标准输出。如果值的前面有 -(减号),则从文件末尾指定的单元数开始将文件写到标准输出。如果值前面没有 +(加号)或 -(减号),那么从文件末尾指定的单元号开始读取文件。

Number 变量用于确定计数的起点的单元类型由 -b、-c、-k、-m 以及 -n 标志确定。如果没有指定其中的任何一个标志,那么 tail 命令就会读取指定文件的最后十行,并将其写到标准输出。这与在命令行输入 -n 10 是相同的。

-m 标志在单字节和双字节字符环境中提供了一致的结果。当输入是包含多字节字符的文本文件时应谨慎使用 -c 标志,因为产生的输出可能不从字符边界开始。

标志

-b Number

从 Number 变量表示的 512 字节块位置开始读取指定文件。

-c Number

从 Number 变量表示的字节位置开始读取指定文件。

-f

如果输入文件是常规文件或如果 File 参数指定 FIFO(先进先出),那么 tail 命令不会在复制了输入文件的最后的指定单元后终止,而是继续从输入文件读取和复制额外的单元(当这些单元可用时)。如果没有指定 File 参数,并且标准输入是管道,则会忽略 -f 标志。tail -f 命令可用于监视另一个进程正在写入的文件的增长。

-k Number

从 Number 变量表示的 1KB 块位置开始读取指定文件。

-m Number

从 Number 变量表示的多字节字符位置开始读取指定文件。使用该标志提供在单字节和双字节字符代码集环境中的一致结果。

-n Number

从 Number 变量表示的行位置开始读取指定文件。

-r

从文件末尾以逆序方式显示输出。-r 标志的缺省值是以逆序方式打印整个文件。如果文件大于 20,480 字节,那么 -r 标志只显示最后的 20,480 字节。

-r 标志只有与 -n 标志一起时才有效。否则,就会将其忽略。

退出状态

该命令返回下列的退出值:

0

成功完成。

>0

出现错误。

示例

要显示 notes 文件的最后十行,输入:

tail notes要指定从 notes 文件末尾开始读取的行数,输入:

tail  -n 20 notes

要从第 200 字节开始,每次显示一页 notes 文件,输入:

tail  -c +200 notes | pg

要跟踪文件的增长,输入:

tail  -f accounts

这显示 accounts 文件的最后十行。tail 命令继续显示添加到 accounts 文件中的行。显示会一直继续,直到您按下 Ctrl-C 按键顺序来停止。

文件

包含 tail 命令。

/usr/bin/tail

Tags:

星期六, 13 3 月, 2010 服务器 没有评论

.htaccess常用设置

.htaccess 文件 (Hypertext Access file) 是Apache Web服务器的一个非常强大的配置文件,对于这个文件,Apache有一堆参数可以让你配置出几乎随心所欲的能。.htaccess 配置文件坚持了Unix的一个文化——使用一个ASCII 的纯文本文件来配置你的网站的访问策略。

1. 创建自定义的出错页面

对于Linux Apache来说这是一项极其简单的事情。使用下面的.htaccess语法你可以轻松的完成这一功能。(把.htaccess放在你的网站根目录下)

 
ErrorDocument 401 /error/401.php
ErrorDocument 403 /error/403.php
ErrorDocument 404 /error/404.php
ErrorDocument 500 /error/500.php

2. 设置网站的时区

 
SetEnv TZ America/Houston

3. 阻止IP列表

有些时候,你需要以IP地址的方式阻止一些访问。无论是对于一个IP地址还是一个网段,这都是一件非常简单的事情,如下所示:

 
allow from all
deny from 145.186.14.122
deny from 210.10.56 #封禁210.10.56.0~210.10.56.255的所有IP地址

Apache对于被拒绝的IP会返回403错误。

4. 把一些老的链接转到新的链接上——搜索引擎优化SEO

 
Redirect 301 /iindex.php  http://www.njava.com

5. 为服务器管理员设置电子邮件。

 
ServerSignature EMail
SetEnv SERVER_ADMINdefault@domain.com

6. 使用.htaccess 访止盗链。

如果你网站上的一个图片被别的N多的网站引用了,那么,这很有可能会导致你服务器的性能下降,使用下面的代码可以保护某些热门的链接不被过多的引用。

 
Options +FollowSymlinks
# Protect Hotlinking
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?domainname.com/[nc]
RewriteRule .*.(gif|jpg|png)$http://www.someonename.com/Article/UploadFiles/200908/20090824122550889.png[nc]

7. 阻止 User Agent 的所有请求

 
## .htaccess Code :: BEGIN
## Block Bad Bots by user-Agent
SetEnvIfNoCase user-Agent ^FrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Java.* [NC,OR]
SetEnvIfNoCase user-Agent ^Microsoft.URL [NC,OR]
SetEnvIfNoCase user-Agent ^MSFrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Offline.Explorer [NC,OR]
SetEnvIfNoCase user-Agent ^[Ww]eb[Bb]andit [NC,OR]
SetEnvIfNoCase user-Agent ^Zeus [NC]

Order Allow,Deny
Allow from all
Deny from env=bad_bot

## .htaccess Code :: END

8. 把某些特殊的IP地址的请求重定向到别的站点

 
ErrorDocument 403http://www.youdomain.com
Order deny,allow
Deny from all
Allow from 124.34.48.165
Allow from 102.54.68.123

9. 直接找开文件而不是下载

通常,我们打开网上文件的时候总是会出现一个对话框问我们是下载还是直接打开,使用下面的设置就不会出现这个问题了,直接打开。

 
AddType application/octet-stream .pdf
AddType application/octet-stream .zip
AddType application/octet-stream .mov

10. 修改文件类型

下面的示例可以让任何的文件都成为PHP那么被服务器解释。比如:myphp, cgi,phtml等。

 
ForceType application/x-httpd-php
SetHandler application/x-httpd-php

11. 阻止存取.htaccess 文件

 
# secure htaccess file
order allow,deny
deny from all

12. 保护服务器上的文件被存取

 
# prevent access of a certain fileorder allow,deny
deny from all

13. 阻止目录浏览

 
# disable directory brow
sing
Options All -Indexes

14. 设置默认主页

 
# serve alternate default index page
DirectoryIndex about.html

15. 口令认证

你可以创建一个文件用于认证。下面是一个示例:

 
# to protect a file
AuthType Basic
AuthName “Prompt”
AuthUserFile /home/path/.htpasswd
Require valid-user

# password-protect a directory resides
AuthType basic
AuthName “This directory is protected”
AuthUserFile /home/path/.htpasswd
AuthGroupFile /dev/null
Require valid-user

16. 把老的域名转像新的域名

 
# redirect from old domain to new domain
RewriteEngine On
RewriteRule ^(.*)$http://www.yourdomain.com/$1[R=301,L]

Tags: , ,

星期四, 11 3 月, 2010 服务器 没有评论

apache DDos防范模块 mod_evasive

什么是mod_evasive?

mod_evasive is an evasive maneuvers module for Apache to provide evasive action in the event of an HTTP DoS or DDoS attack or brute force attack. It is also designed to be a detection and network management tool, and can be easily configured to talk to ipchains, firewalls, routers, and etcetera. mod_evasive presently reports abuses via email and syslog facilities.

Detection is performed by creating an internal dynamic hash table of IP Addresses and URIs, and denying any single IP address from any of the following:

  • Requesting the same page more than a few times per second
  • Making more than 50 concurrent requests on the same child per second
  • Making any requests while temporarily blacklisted (on a blocking list)

This method has worked well in both single-server script attacks as well as distributed attacks, but just like other evasive tools, is only as useful to the point of bandwidth and processor consumption (e.g. the amount of bandwidth and processor required to receive/process/respond to invalid requests), which is why it’s a good idea to integrate this with your firewalls and routers for maximum protection.

This module instantiates for each listener individually, and therefore has a built-in cleanup mechanism and scaling capabilities. Because of this per-child design, legitimate requests are never compromised (even from proxies and NAT addresses) but only scripted attacks. Even a user repeatedly clicking on ‘reload’ should not be affected unless they do it maliciously. mod_evasive is fully tweakable through the Apache configuration file, easy to incorporate into your web server, and easy to use.

官方网站:http://www.nuclearelephant.com/projects/mod_evasive/

原理

mod_evasive是apache防范DDOS攻击的模块,其原理大致如下:
有新访问到达时:

  • 查看黑名单中是否有该客户IP。
  • 将IP和请求URL一起HASH;查找HASH表看过去1秒是否连续请求同一页。
  • 将IP和请求URL一起HASH;查找HASH表看过去1秒是否请求超过50个连接。

满足任意一条就返回403并阻止该IP一定时间,该时间由DOSSiteInterval决定。

1、安装mod_evasive

bear@bear-laptop:~$ sudo apt-get install libapache2-mod-e
libapache2-mod-encoding  libapache2-mod-evasive
bear@bear-laptop:~$ sudo apt-get install libapache2-mod-evasive
[sudo] password for bear:
正在读取软件包列表… 完成
正在分析软件包的依赖关系树
正在读取状态信息… 完成
下列软件包是自动安装的并且现在不再被使用了:
linux-headers-2.6.31-14 linux-headers-2.6.31-14-generic
使用’apt-get autoremove’来删除它们
下列【新】软件包将被安装:
libapache2-mod-evasive
共升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 0 个软件未被升级。
需要下载 15.9kB 的软件包。
解压缩后会消耗掉 115kB 的额外空间。
获取:1 http://ubuntu.cn99.com karmic/universe libapache2-mod-evasive 1.10.1-1 [15.9kB]
下载 15.9kB,耗时 0 秒 (121kB/s)
选中了曾被取消选择的软件包 libapache2-mod-evasive。
(正在读取数据库 … 系统当前总共安装有 151313 个文件和目录。)
正在解压缩 libapache2-mod-evasive (从 …/libapache2-mod-evasive_1.10.1-1_amd64.deb) …
正在设置 libapache2-mod-evasive (1.10.1-1) …
* Reloading web server config apache2                                          apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName
[ OK ]

bear@bear-laptop:~$

2、配置mod_evasive

sudo vi /etc/apache/conf.d/mod_evasive

#添加以下:

<IfModule mod_evasive20.c>

DOSHashTableSize 3097:定义哈希表大小。

DOSSiteCount 50:允许客户机的最大并发连接。

DOSPageCount 2:允许客户机访问同一页的间隔。

DOSPageInterval 1:网页访问计数器间隔。

DOSSiteInterval 1:全站访问计数器间隔。

DOSSiteInterval 60:加入黑名单后拒绝访问时间。

DOSEmailNotify crdd1130@gmail.com:有IP加入黑名单后通知管理员。

DOSSystemCommand "sudo iptables -A INPUT -s %s -j DROP":IP加入黑名单后执行的系统命令。

DOSLogDir "/tmp":锁定机制临时目录。

DOSWhiteList 127.0.0.1:防范白名单,不阻止白名单IP。

</IfModule>


Tags: ,

星期四, 11 3 月, 2010 服务器 没有评论

SHELL下的数字比较及计算

比较:
方法一: if [ ${A} -lt ${B} ]; then …
这是最基本的比较方法,使用lt(小于),gt(大于),le(小于等于),ge(大于等于),优点:还没发现;缺点:只能比较整数,使用lt,gt等不直观
方法二: if ((${A} < ${B})) then …
这是CShell风格比较,优点:不用使用lt,gt等难记的字符串;缺点:还是只能比较整数
方法三: if (echo ${A} ${B} | awk ‘!($1>$2){exit 1}’) then …
这是使用awk比较,优点:可以比较小数;缺点:表达式太复杂,难记
方法四: if (echo ${A} – ${B} | bc -q | grep -q “^-“); then …
这是使用bc计算比较,优点:可以比较小数;缺点:表达式更复杂,难记

计算:
方法一:typeset C=$(expr ${A} + ${B});
SHELL中的基本工具,优点:方便检测变量是否为数字;缺点:只能计算整数,且只能计算加减法,不能计算乘除法
方法二:let “C=${A}+${B}”; 或 let “C=A+B”
内嵌命令计算,优点:能计算乘除法及位运算等;缺点:只能计算整数
方法三:typeset C=$((A+B))
CShell风格的计算,优点:能计算乘除法及位运算等,简介,编写方便;缺点:不能计算小数
方法四:typeset C=${echo ${A} ${B} | awk ‘{print $1+$2}’)
使用awk计算,优点:能计算小数,可以实现多种计算方式,计算灵活;缺点:表达式太复杂
方法五:typeset C=${echo ${A} + ${B} | bc -q)
使用awk计算,优点:能计算小数,计算方式比awk还多,计算灵活;缺点:表达式太复杂,小数点后面的位数必须使用scale=N来设置,否则可能会将结果截断为整数

Tags: , ,

星期四, 11 3 月, 2010 服务器 没有评论

查看Apache并发请求数及其TCP连接状态

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves

StartServers     10
MinSpareServers   10
MaxSpareServers   15
ServerLimit     2000
MaxClients      2000
MaxRequestsPerChild 10000

查看httpd进程数(即prefork模式下Apache能够处理的并发请求数):

Linux命令:

ps -ef | grep httpd | wc -l

返回结果示例:

1388

表示Apache能够处理1388个并发请求,这个值Apache可根据负载情况自动调整,我这组服务器中每台的峰值曾达到过2002。

查看Apache的并发请求数及其TCP连接状态:

Linux命令:

netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’

(这条语句是从新浪互动社区事业部技术总监王老大那儿获得的,非常不错)

返回结果示例:

LAST_ACK 5

SYN_RECV 30

ESTABLISHED 1597

FIN_WAIT1 51

FIN_WAIT2 504

TIME_WAIT 1057

其中的SYN_RECV表示正在等待处理的请求数;ESTABLISHED表示正常数据传输状态;TIME_WAIT表示处理完毕,等待超时结束的请求数。

关于TCP状态的变迁,可以从下图形象地看出:

状态:描述

CLOSED:无连接是活动的或正在进行

LISTEN:服务器在等待进入呼叫

SYN_RECV:一个连接请求已经到达,等待确认

SYN_SENT:应用已经开始,打开一个连接

ESTABLISHED:正常数据传输状态

FIN_WAIT1:应用说它已经完成

FIN_WAIT2:另一边已同意释放

ITMED_WAIT:等待所有分组死掉

CLOSING:两边同时尝试关闭

TIME_WAIT:另一边已初始化一个释放

LAST_ACK:等待所有分组死掉

Tags: , ,

星期四, 11 3 月, 2010 服务器 没有评论

MySQL数据库命令行修改root密码的几种方法

方法1: 用SET PASSWORD命令
mysql -u root
mysql> SET PASSWORD FOR ‘root’@’localhost’ = PASSWORD(’newpass’);

方法2:用mysqladmin
mysqladmin -u root password “newpass”
如果root已经设置过密码,采用如下方法
mysqladmin -u root password oldpass “newpass”

方法3: 用UPDATE直接编辑user表
mysql -u root
mysql> use mysql;
mysql> UPDATE user SET Password = PASSWORD(’newpass’) WHERE user = ‘root’;
mysql> FLUSH PRIVILEGES;

在丢失root密码的时候,可以这样
mysqld_safe –skip-grant-tables&
mysql -u root mysql
mysql> UPDATE user SET password=PASSWORD(”new password”) WHERE user=’root’;
mysql> FLUSH PRIVILEGES;

Tags: ,

星期四, 11 3 月, 2010 服务器 没有评论
1LMooBmUE153Wnd3zDryWvDyXxQudbFxDr