大纲:
一、系统安装
二、编译安装基本环境
三、配置虚拟主机及基本性能调优
四、基本安全设置
五、附录及相关介绍
一、系统约定
软件源代码包存放位置 | /usr/local/src |
源码包编译安装位置(prefix) | /usr/local/software_name |
脚本以及维护程序存放位置 | /usr/local/sbin |
MySQL 数据库位置 | /var/lib/mysql |
Apache 网站根目录 | /data/wwwroot |
Apache 虚拟主机日志根目录 | /data/logs/www |
Apache 运行账户 | www:www |
yum RPM包信息文件 | /etc/yum.list |
二、系统环境部署及调整
1. 检查系统是否正常
# more/var/log/messages
(检查有无系统内核级错误信息)
# dmesg (检查硬件设备是否有错误信息)
# ifconfig (检查网卡设置是否正确)
# ping www.163.com
(检查网络是否正常)
2. 关闭不需要的服务
# ntsysv
以下仅列出需要启动的服务,未列出的服务一律关闭:
crond
crond 是 Unix 下的一个传统程序,该程序周期地运行用户调度的任务。比起传统的 Unix 版本, Vixie 版本添加了不少属性,而且更安全,配置更简单
irqbalance
仅当服务器 CPU 为 S.M.P 架构或支持双核心、 HT 技术时,才需开启,否则关闭
microcode_ctl
可以编码以及发送新的微代码到 kernel 以更新 Intel IA32 系列处理器
mysql
一个快速高效可靠的轻型 SQL 数据库引擎
network
激活/关闭启动时的各个网络接口 网络。
random
保存和恢复系统的高质量随机数生成器,这些随机数是系统一些随机行为提供的。
sendmail
邮件服务器
sshd
是
OpenSSH 守护进程。用于在不可信网络上提供安全的连接通道 。
Syslog
syslog 是操作系统提供的一种机制,守护程序通常使用这种机制将各种信息写到各个系统日志文件。通常应该启动该服务
3. 对 TCP/IP 网络参数进行调整,加强抗 SYNFlood 能力
# echo 'net.ipv4.tcp_syncookies = 1'>> /etc/sysctl.conf
# sysctl -p
4. 配置 yum ,导入 CentOS RPM-GPG-KEY
#rpm --import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
Or rpm ?import/etc/pki/rpm-gpg/ RPM-GPG-KEY-CentOS-5
# yum list | tee /etc/yum.list
5. 重新启动系统
# init 6
6. 使用 yum 程序安装所需开发包(以下为标准的 RPM 包名称)
#yum install ntp vim-enhanced gccgcc-c++ gcc-g77 flex bison autoconf automake bzip2-devel
ncurses-devel zlib-devel libjpeg-devellibpng-devel libtiff-devel freetype-devel libXpm-devel gettext-devel pam-develkernel
7. 定时校正服务器时钟,定时与中国国家授时中心授时服务器同步
# crontab -e
加入一行:
15 3 * * */usr/sbin/ntpdate 210.72.145.44 > /dev/null 2>&1
8. 源码编译安装所需包 (Source)
(1) GD2
gd 库是 php 处理图形的扩展库, gd 库提供了一系列用来处理图片的 API ,使用 GD 库可以处理图片,或者生成图片。 在网站上 GD 库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。
# cd /usr/local/src
# wget http://www.libgd.org/releases/oldreleases/gd-2.0.34.tar.gz
# tar xzvf gd-2.0.34.tar.gz
# cd gd-2.0.34
# ./configure --prefix=/usr/local/gd2
# 配置安装路径
# make
# make install
(2) LibXML2
Libxml2 是一个 xml c 语言版的解析器,本来是为 Gnome 项目开发的工具,是一个基于 MITLicense 的免费开源软件。它除了支持 c 语言版以外,还支持 c++ 、 PHP 、 Pascal 、 Ruby 、 Tcl 等语言的绑定,能在 Windows 、 linux 、 Solaris 、 MacOsX 等平台上运行 。
# cd /usr/local/src
# wget
http://xmlsoft.org/sources/libxml2-2.6.32.tar.gz
http://www.ismole.net/downloads/libxml2-2.6.32.tar.gz
# tar zvxf libxml2-2.6.32.tar.gz
# cd libxml2-2.6.32
# ./configure--prefix=/usr/local/libxml2
# make
# make install
(3) LibMcrytpt
libmcrypt 是编码函数库,前身是 mcrypt 。
# cd /usr/local/src
#wget http://voxel.dl.sourceforge.net/ ... mcrypt-2.5.8.tar.gz
http://jaist.dl.sourceforge.net/sourceforge/mcrypt/libmcrypt-2.5.8.tar.gz
# tar zvxf libmcrypt-2.5.8.tar.gz
# cd libmcrypt-2.5.8
# ./configure --prefix=/usr/local/libmcrypt
# make
# make install
(4) Zlib
zlib 是一套公开源代码的压缩,解压缩的函数库,提供了很多文件操作的方法,但是他不是一套类库,所以有兴趣的人都可以把他进行封装,实现自己的类库,和更高层的接口。
# cd /usr/local/src
# wget http://www.zlib.net/zlib-1.2.3.tar.gz
http://down.itlearner.com/downsoft/tools/zlib-1.2.3.tar.gz
# tar xzvf zlib-1.2.3.tar.gz
# cd zlib-1.2.3
# ./configure --prefix=/usr/local/zlib
# make
# make install
(5) Apache 日志截断程序
Cronolog 是一个小巧高效的日志文件处理工具,可以实现自动的按规则生成周期性的日志文件 。
# cd /usr/local/src
# wget http://cronolog.org/download/cronolog-1.6.2.tar.gz
# tar xzvf cronolog-1.6.2.tar.gz
# cd cronolog-1.6.2
# ./configure?prefix=/usr/local/cronolog
# make
# make install
10. 升级 OpenSSL 和 OpenSSH
Openssl 包括与加密相关的管理工具和库文件,可以向其它软件包提供加密支持,尤其是 OpenSSH 和网络浏览器 ( 为了浏览安全的 https 网站 ).
OpenSSH 是一组用于安全地访问远程计算机的连接工具。它可以作为 rlogin 、 rsh rcp 以及 telnet
的直接替代品使用。更进一步, 其他任何 TCP/IP 连接都可以通过 SSH 安全地进行隧道 / 转发。 OpenSSH
对所有的传输进行加密, 从而有效地阻止了窃听、 连接劫持,以及其他网络级的***。
# cd /usr/local/src
# wget http://www.openssl.org/source/openssl-0.9.8h.tar.gz
# wget http://mirror.mcs.anl.gov/openssh/portable/openssh-5.0p1.tar.gz
# tar xzvf openssl-0.9.8h.tar.gz
# cd openssl-0.9.8h
# ./config --prefix=/usr/local/openssl
# make
# make test
# make install
# cd ..
# tar xzvf openssh-5.0p1.tar.gz
# cd openssh-5.0p1
# ./configure
\
"--prefix=/usr" \
"--with-pam" \
"--with-zlib" \
"--sysconfdir=/etc/ssh"\
"--with-ssl-dir=/usr/local/openssl"\
"--with-zlib=/usr/local/zlib"\
"--with-md5-passwords"
# make
# make install
代码说明:
"--with-pam"
à 启用 PAM(PluggableAuthentication Modules) 支持,使用此选项后还必须在 sshd_config 中开启 UsePAM 指令
"--sysconfdir=/etc/ssh"
à 配置文件目录 [PREFIX/etc]
"--with-md5-passwords"
à 支持读取 /etc/passwd 或 /etc/shadow 中经过 MD5 加密的口令
( 1 )禁用 SSH V1 协议
SSH 是指 Secure Shell , SSH 协议族由 IETF ( InternetEngineering Task Force ) 的 Network Working Group 制定, SSH 协议的内容 SSH 协议是建立在应用层和传输层基础上的安全协议。 SSH (SecureShell) 是目前比较可靠的为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。通过 SSH ,可以把所有传输的数据进行加密,也能够防止 DNS 欺骗和 IP 欺骗。 SSH ,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。 SSH 有很多功能,它既可以代替 Telnet ,又可以为 FTP 、 Pop 、甚至为 PPP 提供一个安全的 " 通道 " 。
#vi /etc/ssh/sshd_config
找到:
#Protocol 2,1
改为:
Protocol 2
# ( 2 )禁止 root 直接登录
#
此处先建立一个普通系统用户:
#
# useradd username
#
# passwd username
#
找到:
#
#PermitRootLoginyes
#
改为:
#
PermitRootLogin no
( 3 )禁用 GSSAPI
#vi /etc/ssh/sshd_config
找到以下两行,并将他们注释:
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
( 4 )禁用 DNS 名称解析
找到:
#UseDNS yes
改为:
UseDNS no
( 5 )禁用客户端 GSSAPI
# vi /etc/ssh/ssh_config
找到: GSSAPIAuthentication yes 将这行注释掉。
最后,确认修改正确后重新启动 SSH 服务
# servicesshd restart
# ssh -V
确认 OpenSSH 以及 OpenSSL
版本正确。
以上 SSH 配置可利用以下脚本自动修改:
代码:
#init_ssh
ssh_cf="/etc/ssh/sshd_config"
sed -i -e '74 s/^/#/' -i -e '76 s/^/#/' $ssh_cf
sed -i "s/#UseDNS yes/UseDNS no/" $ssh_cf
#client
sed -i -e '44 s/^/#/' -i -e '48 s/^/#/' $ssh_cf
echo "ssh is init is ok.............."
三、编译安装 L.A.M.P 环境
1. 下载软件
# cd /usr/local/src
# wget http://apache.mirror.phpchina.com/httpd/httpd-2.2.9.tar.gz
#wget http://mirrors.ntua.gr/MySQL/Dow ... ysql-5.0.51b.tar.gz
# wget http://cn2.php.net/distributions/php-5.2.6.tar.gz
#wget http://downloads.zend.com/optimi ... glibc23-i386.tar.gz
#wget http://xcache.lighttpd.net/pub/Releases/1.2.2/xcache-1.2.2.tar.gz
2. 编译安装 MySQL
MySQL 是一个真正的多用户、多线程 SQL 数据库服务器,它是一个客户机 / 服务器结构的实现。 MySQL 是现在流行的关系 数据库 中其中的一种,相比其它的数据库管理系统 ( DBMS ) 来说, MySQL 具有小巧、功能齐全、查询迅捷等优点。 MySQL 主要目标是快速、健壮和易用。
查看软件安装模块可以进入解压目录下执行:
#./configure ?help |less
若是以前编译过了,重新编译前执行 :
# make clean
查看分析你的 CPU 型号 :
http://gentoo-wiki.com/Safe_Cflags
查找您的 GCC 编译参数 .
确定系统 CPU 类型:
# cat /proc/cpuinfo | grep "model name"
执行后会看到系统中 CPU 的具体型号,记下 CPU 型号。
# tar xzvf mysql-5.0.51b.tar.gz
# cd mysql-5.0.51b
à # ./configure \
"--prefix=/usr/local/mysql" \
"--localstatedir=/data/mysql/data"\
"--with-comment=Source" \
"--with-server-suffix=-learningsky"\
"--with-mysqld-user=mysql" \
"--without-debug" \
"--with-big-tables" \
"--with-charset=utf8" \
"--with-collation=utf8_chinese_ci" \
"--with-extra-charsets=all" \
"--with-pthread" \
"--enable-static" \
"--enable-thread-safe-client" \
"--with-client-ldflags=-all-static" \
"--with-mysqld-ldflags=-all-static" \
"--enable-assembler" \
"--without-isam" \
"--without-innodb" \
"--without-ndb-debug"
#make
#make install
# useradd mysql -d /data/mysql -s/sbin/nologin
#/usr/local/mysql/bin/mysql_install_db--user=mysql
#cd /usr/local/mysql
#chown -R root:mysql .
#chown -R mysql /data/mysql/data
#cp share/mysql/my-huge.cnf /etc/my.cnf
#cp share/mysql/mysql.server /etc/rc.d/init.d/mysqld
#chmod 755 /etc/rc.d/init.d/mysqld
#chkconfig --add mysqld
#/etc/rc.d/init.d/mysqld start
#cd /usr/local/mysql/bin
#for i in *; do ln -s /usr/local/mysql/bin/$i /usr/bin/$i; done
或用代码编译
à # vi mysql.sh
代码:
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=prescott -O2 -pipe -fomit-frame-pointer"
CXXFLAGS="${CFLAGS}"
./configure \
"--prefix=/usr/local/mysql" \
"--localstatedir=/data/mysql/data"\
"--with-comment=Source" \
"--with-server-suffix=-learningsky"\
"--with-mysqld-user=mysql" \
"--without-debug" \
"--with-big-tables" \
"--with-charset=utf8" \
"--with-collation=utf8_chinese_ci"\
"--with-extra-charsets=all" \
"--with-pthread" \
"--enable-static" \
"--enable-thread-safe-client" \
"--with-client-ldflags=-all-static" \
"--with-mysqld-ldflags=-all-static" \
"--enable-assembler" \
"--without-isam" \
"--without-innodb" \
"--without-ndb-debug"
make && make install
mkdir -p /data/mysql/data
useradd mysql -d /data/mysql -s /sbin/nologin
/usr/local/mysql/bin/mysql_install_db --user=mysql
cd /usr/local/mysql
chown -R root:mysql .
chown -R mysql /data/mysql/data
cp share/mysql/my-huge.cnf /etc/my.cnf
cp share/mysql/mysql.server /etc/rc.d/init.d/mysqld
chmod 755 /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
/etc/rc.d/init.d/mysqld start
cd /usr/local/mysql/bin
for i in *; do ln -s /usr/local/mysql/bin/$i /usr/bin/$i; done
#sh mysql.sh
即可开始编译
代码说明:
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=prescott -O2 -pipe -fomit-frame-pointer"
CXXFLAGS="${CFLAGS}"
./configure \
"--prefix=/usr/local/mysql" \
"--localstatedir=/data/mysql/data" \
# 指定默认数据库文件保存目录
"--with-comment=Source" \
"--with-server-suffix=- mylinuxsky " \
# 服务器后缀名改成主机后缀
"--with-mysqld-user=mysql" \
#MySQL 用户名
"--without-debug" \
# 去除 debug 排除故障模式
"--with-big-tables" \
# 在32位平台上支持大于4 G 行的表
"--with-charset=utf8" \
# 指定你所需要的字符集参数( utf8,utf8... )
"--with-collation=utf8_chinese_ci" \ # 字符集校正码( utf8_chinese_ci ,...)
"--with-extra-charsets=all" \
# 添加所有文字符支持
"--with-pthread" \
# 强制使用 pthread 库 (posix 线程库 )
"--enable-static" \
# 使用静态方式
"--enable-thread-safe-client" \
# 以线程方式编译客户端
"--with-client-ldflags=-all-static" \
# 以纯静态方式编译客户端
"--with-mysqld-ldflags=-all-static" \
# 以纯静态方式编译服务端
"--enable-assembler" \
# 使用一些字符函数的汇编版本
"--without-isam" \
# 去掉 isam 表类型支持,现在很少用了, isam 表是一种依赖平台的表
"--without-innodb" \ # 去掉 innodb 表支持, innodb 是一种支持事务处理的表 , 适合企业级应用
"--without-ndb-debug" # 去除 ndb-debug 排除故障模式
make && make install
mkdir -p /data/mysql/data
useradd mysql -d /data/mysql -s /sbin/nologin
/usr/local/mysql/bin/mysql_install_db --user=mysql
cd /usr/local/mysql
chown -R root:mysql .
chown -R mysql /data/mysql/data
cp share/mysql/my-huge.cnf /etc/my.cnf
cp share/mysql/mysql.server /etc/rc.d/init.d/mysqld
chmod 755 /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
# 将 mysql 加入到服务里去
/etc/rc.d/init.d/mysqld start
cd /usr/local/mysql/bin
for i in *; do ln -s /usr/local/mysql/bin/$i /usr/bin/$i; done
#sh mysql.sh
即可开始编译 .
3. 编译安装 Apache
Apache 是目前互联网上最流行的 Web 服务器,它可以运行在几乎所有广泛使用的计算机平台上。
# cd /usr/local/src
# tar zxvf httpd-2.2.9.tar.gz
# cd httpd-2.2.9
# ./configure \
"--prefix=/usr/local/apache2" \
"--with-included-apr" \
"--enable-so" \
"--enable-deflate=shared" \
"--enable-expires=shared" \
"--enable-rewrite=shared" \
"--enable-static-support" \
"--disable-userdir"
# make
# make install
# echo '/usr/local/apache2/bin/apachectlstart
' >> /etc/rc.local
# 开机的时候自动启动 apache 服务器
代码说明:
#./configure\
"--prefix=/usr/local/apache2" \
"--with-included-apr" \
# 在编译时强制使用当前源代码中绑定的 APR 版本,仅在 2.2.3 以后的版本中可用
"--enable-so" \
# 核心能够装载 DSO (即对单个模块的动态加载)
"--enable-deflate=shared" \
# 支持网页压缩
"--enable-expires=shared" \
# 支持 HTTP 控制
"--enable-rewrite=shared" \
# 支持 URL
重写
"--enable-static-support" \
# 使用静态连接(默认为动态连接)编译所有二进制支持程序。
"--disable-userdir"
# 禁止用户从自己的主目录中提供页面
4. 编译安装 PHP
PHP 的全名为 HypertextPreprocessor ,它是个被广泛运用在网页程式撰写的语言,尤其是它能适用于网页程式的开发及能够嵌入 HTML 文件之中,它的语法和 C 、 Java 及 Perl 等语法相似,且学习起来更容易上手。 PHP 的目地是为了能使网站开发者可以快速地撰写动态网页。
# cd /usr/local/src
# tar zxvf php-5.2.6.tar.gz
# cd php-5.2.6
#./configure \
"--prefix=/usr/local/php" \
"--with-apxs2=/usr/local/apache2/bin/apxs"\
"--with-config-file-path=/usr/local/php/etc" \
"--with-mysql=/usr/local/mysql"\
"--with-libxml-dir=/usr/local/libxml2" \
"--with-gd=/usr/local/gd2" \
"--with-jpeg-dir" \
"--with-png-dir" \
"--with-bz2" \
"--with-freetype-dir" \
"--with-iconv-dir" \
"--with-zlib-dir " \
"--with-openssl=/usr/local/openssl" \
"--with-mcrypt=/usr/local/libmcrypt" \
"--enable-soap" \
"--enable-gd-native-ttf" \
"--enable-ftp" \
"--enable-mbstring" \
"--enable-exif" \
"--disable-ipv6" \
"--disable-cgi" \
"--disable-cli"
# make
# make install
# mkdir/usr/local/php/etc
# cp php.ini-dist /usr/local/php/etc/php.ini
代码说明 :
#./configure \
"--prefix=/usr/local/php" \
"--with-apxs2=/usr/local/apache2/bin/apxs" \ # 将 PHP 模块编译进 apache
"--with-config-file-path=/usr/local/php/etc" \ # 将 PHP 的主配置文件放在什么地方 , 这是个人习惯
"--with-mysql=/usr/local/mysql" \
# 指定 mysql 的路径
"--with-libxml-dir=/usr/local/libxml2" \
"--with-gd=/usr/local/gd2" \
"--with-jpeg-dir" \
"--with-png-dir" \
"--with-bz2" \
"--with-freetype-dir" \
"--with-iconv-dir" \
"--with-zlib-dir " \
"--with-openssl=/usr/local/openssl" \
"--with-mcrypt=/usr/local/libmcrypt" \
"--enable-soap" \
# 启用 soap 函数库
"--enable-gd-native-ttf" \
"--enable-ftp" \
# 启用 ftp 函数库
"--enable-mbstring" \
# 启用多字节字符串函数库
"--enable-exif" \
# 启用 exif 函数库
"--disable-ipv6" \
# 禁掉 ipv6 协议
"--disable-cgi" \
# 禁掉 cgi 支持
"--disable-cli"
# 禁掉 cli 模式,提升速度和安全性 .
# 5.Xcache 的安装 .
XCache 是一套华人所开发的 PHP 加速器,号称稳定性高。
#tar xvf xcache-1.2.2.tar.gz
#/usr/local/php/bin/phpize
./configure --enable-xcache --enable-xcache-coverager--with-php-config=/usr/local/php/bin/php-config \
--enable-inline-optimization --disable-debug
#vi/usr/local/php/etc/php.ini
( 将以下内容加入php.ini最后面)
代码:
[xcache-common]
zend_extension =/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/xcache.so
[xcache.admin]
xcache.admin.user = "admin"
; 如何生成 md5 密码 : echo -n"password"| md5sum
xcache.admin.pass = "fb88eaa6f3c3bc09b5a66f16ccac3964" # 密码为 hmg4802959
[xcache]
; Change xcache.size to tune the size of the opcode cache
xcache.size = 24M
xcache.shm_scheme = "mmap"
xcache.count = 4
xcache.slots = 8K
xcache.ttl = 0
xcache.gc_interval = 0
; Change xcache.var_size to adjust the size of variable cache
xcache.var_size = 8M
xcache.var_count = 1
xcache.var_slots = 8K
xcache.var_ttl = 0
xcache.var_maxttl = 0
xcache.var_gc_interval = 300
xcache.test = Off
xcache.readonly_protection = On
xcache.mmap_path = "/tmp/xcache"
xcache.coredump_directory = ""
xcache.cacher = On
xcache.stat = On
xcache.optimizer = Off
[xcache.coverager]
xcache.coverager = On
xcache.coveragedump_directory = ""
6. 安装 Zend Optimizer
ZendOptimizer 用优化代码的方法来提高 PHP 4.0 应用程序的执行速度。实现的原理是对那些在被最终执行之前由运行编译器 (Run-TimeCompiler) 产生的代码进行优化 。
# cd /usr/local/src
# tarxzvf ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz
# ./ZendOptimizer-3.3.3-linux-glibc23-i386/install.sh
安装 Zend Optimizer 过程的最后不要选择重启 Apache 。
7. 整合 Apache 与 PHP
# vi /usr/local/apache2/conf/httpd.conf
找到:
AddType application/x-gzip .gz .tgz
在该行下面添加
AddType application/x-httpd-php .php
AddOutputFilterByType DEFLATE text/htmltext/plain text/xml
找到:
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
将该行改为
<IfModule dir_module>
DirectoryIndex index.html index.htm index.php
</IfModule>
找到:
#Include conf/extra/httpd-mpm.conf
#Include conf/extra/httpd-info.conf
#Include conf/extra/httpd-vhosts.conf
#Include conf/extra/httpd-default.conf
去掉前面的 “#” 号,取消注释。
注意:以上 4 个扩展配置文件中的设置必须按照相关原则进行配置!
修改完成后保存退出。
# /usr/local/apache2/bin/apachectl restart
8. 查看确认 L.A.M.P 环境信息、提升 PHP 安全性
在网站根目录放置 phpinfo.php 脚本,检查 phpinfo 中的各项信息是否正确。
<?php
phpinfo();
?>
确认 PHP 能够正常工作后,在 php.ini 中进行设置提升 PHP 安全性。
# vi /usr/local/php/etc/php.ini
找到:
disable_functions =
设置为:
phpinfo,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_open,proc_get_status,error_log,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server
注:这些禁用的参数都是系统参数,启用对系统安全有危害!
9.apache 配置
Apache 虚拟主机配置解释:
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin geyongliang2003@yahoo.com.cn # 网站管理员邮件地址
DocumentRoot "/data/www/wwwroot" # 网站存放的根目录
ServerName www.test.com
# 网站域名
ServerAlias mylinuxsky.test.com
# 网站域名别名
# ErrorLog
"/data/logs/error-bbs.learningsky.org_log" # 记录错误日志
# CustomLog "|/usr/local/cronolog
/data/logs/access_bbs.learningsky.org.%Y%m%d"combined env=!dontlog # 记录网
站日志
</VirtualHost>
基本的性能优化:
#vi/usr/local/apache2/conf/extra/httpd-default.conf
Timeout 15
KeepAlive Off
MaxKeepAliveRequests 50
KeepAliveTimeout 5
UseCanonicalName Off
AccessFileName .htaccess
ServerTokens Prod
ServerSignature Off
HostnameLookups Off
#vi/usr/local/apache2/conf/extra/httpd-mpm.conf
<IfModulempm_prefork_module>
ServerLimit 2000
StartServers 10
MinSpareServers 10
MaxSpareServers 15
MaxClients 2000
MaxRequestsPerChild 10000
</IfModule>
日志相关配置:
1. 日志 分割:安装 cronolog 软件
2. 过滤掉无需记录的日志
#vi httpd.conf
找到:
LogFormat"%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b\"%{Referer}i\" \"%{User-Agent}i\"" combined
后面加入如下:
# filter the localhost visit
SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog
# filter some special directories
SetEnvIf Request_URI "^ZendPlatform.*$" dontlog
SetEnvIf Request_URI \.healthcheck\.html$ dontlog
SetEnvIf Remote_Addr "::1" dontlog
SetEnvIf Request_URI "\.getPing.php$"dontlog
SetEnvIf Request_URI "^/error\.html$" dontlog
SetEnvIf Request_URI "\.gif$" dontlog
SetEnvIf Request_URI "\.jpg$" dontlog
SetEnvIf Request_URI "\.css$" dontlog
其它根据自己的需要做一些调整。
另一种日志不记录图片的方法:
<FilesMatch"\.(ico|gif|jpg|swf)">
SetEnv dontlog 1
</FilesMatch>
CustomLog logs/access_log combined env=!dontlog
3. 日志处理
压缩每天的日志
30 3 * * */usr/bin/gzip -f /data/logs/access_www.linuxtone.org.`date -d yesterday+%Y%m%d.log
删除前三天的日志
30 5 * **/usr/bin/find /data/logs/ -nameaccess_*.gz -mtime +3 |xargs -r /bin/rm -f
4. 利用awstats分析日志
http://bbs.linuxtone.org/thread-56-1-1.html
Apache 防盗链:
RewriteEngineOn
RewriteCond%{HTTP_REFERER} !^http://learningsky.com/.*$ [NC]
RewriteCond%{HTTP_REFERER} !^http://learningsky.com$ [NC]
RewriteCond%{HTTP_REFERER} !^http://www.learningsky.com/.*$ [NC]
RewriteCond%{HTTP_REFERER} !^http://www.learningsky.com$ [NC]
RewriteRule.*\.(
gif|jpb|png|css|js|swf)$ http://www.learningsky.com/about/nolink.png
[R,NC]
防盗链配置的说明:
1.红色部分:表示自己的信任站点。对我的站点来说,设置为 http://www.learningsky.com
和 http://learningsky.com
2.鲜绿色部分: 要保护文件的扩展名(以|分开)。以这些为扩展名的文件,可以加入你想见如的防盗链格式文件,必须通过红色标注的网址引用,才可以访问。
3.蓝色部分:盗链后的重定向页面。用以输出警示信息,这张图片应该尽可能的小。例如我的警示图片是 http://www.learningsky.com/about/nolink.png。为了简单处理的原因,我的绿色字体部分,要保护的图片扩展中,没有 .png
的图片,而警示图片是 .png的。我站内没有 .png的其他图片)
当然也可以换成http://www.learningsky.com
下相应的下载页面这样不仅屏蔽/禁止非本网站的盗链访问,还将盗链请求转给自身的网站,让读者知道谁是真正的原创作者
基本安全设置:
1.iptables封锁相关端口(推荐读CU白金大哥的两小时玩转iptables)
2.SSH全安(修改SSH端口限制来源IP登陆,或者参考
http://bbs.linuxtone.org/thread-106-1-1.html)
3.Linux防Arp***策略(http://bbs.linuxtone.org/thread-41-1-1.html)
4.注意(还是那句老话:安全工作从细节做起!)
三、服务器安全性设置
设置系统防火墙
# touch /usr/local/sbin/fw.sh
将以下脚本命令粘贴到fw.sh 文件中。
#!/bin/bash
# Stop iptables servicefirst
service iptables stop
# Load Passive FTPKernel modules
/sbin/modprobeip_conntrack_ftp
/sbin/modprobeip_nat_ftp
# Inital chains defaultpolicy
/sbin/iptables -F -tfilter
/sbin/iptables -P INPUTDROP
/sbin/iptables -POUTPUT ACCEPT
# Enable Native NetworkTransfer
/sbin/iptables -A INPUT-i lo -j ACCEPT
# Accept EstablishedConnections
/sbin/iptables -A INPUT-m state --state ESTABLISHED,RELATED -j ACCEPT
# ICMP Control
/sbin/iptables -A INPUT-p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
# WWW Service
/sbin/iptables -A INPUT-p tcp --dport 80 -j ACCEPT
# FTP Service
/sbin/iptables -A INPUT-p tcp --dport 21 -j ACCEPT
# SSH Service
/sbin/iptables -A INPUT-p tcp --dport 22 -j ACCEPT
# chmod 755 /usr/local/sbin/fw.sh
# echo '/usr/local/sbin/fw.sh' >>/etc/rc.local
# /usr/local/sbin/fw.sh
参考文献:
LinuxTone.Org(基于centos构建高性能的lamp平台):
http://bbs.linuxtone.org/thread-122-1-1.html
LinuxTone.Org(Apache相关问题专题贴):
http://bbs.linuxtone.org/thread-88-1-1.html
Discuz!公司Nanu先生文章的相关链接:
http://www.discuz.net/thread-722804-1-1.html
转载于:https://blog.51cto.com/fantefei/902121