超详细的amp安装配置

sd_zcl

贡献于2014-10-09

字数:13695 关键词: Web服务器

 一、 安装httpd2.2.3和php5.1.6 安装一些库文件,首先linux内核是2。6的 下载:主要软件包, httpd-2.2.3.tar.gz php-5.1.6.tar.gz 安装php所需的软件包 (其中libxml2是安装php5必须的,为什么还需要perl呆会说明原因。) libxml2-2.6.19.tar.gz libxslt-1.1.15.tar.gz ActivePerl-5.8.8.817-i686-linux-2.2.17-gcc-257965.rpm 如果是2。6的内核,就不用安装了。 curl-7.15.0.tar.gz GD库所需要软件包 (有人说PHP源码包里自带了GD2.0.28和zlib, 只要安装GD的三个支持包:jpg,png和freetype,但是我们还是 下载) gd-2.0.33.tar.gz freetype-2.1.10.tar.gz jpegsrc.v6b.tar.gz libpng-1.2.8.tar.gz zlib-1.2.3.tar.gz Apache-2.2.3.tar.gz Php-5.1.6.tar.gz 对于这些文件的下载直接可以去网站上搜 安装前必须说明要删除这些文件在你的机器上默认安装的。 (注;其实如果linux的系统内核是2.6.X的,gd,zlib,freetype,jpegsrc,libpng,curl等文件都有,虽然版本比我说的这个低一些也没有太大关系,这些文件查看如果有就可以不用安装了,只要安装libxml2和libxslt就可以了。) 二:安装apache2。 # cd /export2/soft/ 进入目录/export2/soft/ # tar -zvxf httpd-2.2.3.tar.gz 解压httpd-2.2.3.tar.gz # cd httpd-2.2.3 进入httpd-2.2.3目录 # mkdir -p /export1/server/apache 生成/export1/server/apache目录 # ./configure --prefix=/export1/server/apache 或者 # ./configure --prefix=/usr/local/apache --enable-modules=so --enable-rewrite && make && make install 以上是进程模式安装,如果要比较灵活可控的进程模式如下安装 # vi server/mpm/worker/worker.c 找到下面几行,并改成如下的数值,其目的是在源码中修改apache可支持的最大线程数和最大客户端数目。 # define DEFAULT_SERVER_LIMIT 256 # define MAX_SERVER_LIMIT 40000 # define DEFAULT_THREAD_LIMIT 256 # define MAX_THREAD_LIMIT 40000 # 编译和安装 apr 1.2 cd srclib/apr ./configure --prefix=/usr/local/apr make make install # 编译和安装 apr-util 1.2 cd ../apr-util ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr make make install 优化编译选项及配置apache可加载的模块 patch -p1 < mod_limitipconn-0.22/apachesrc.diff /usr/local/apache/bin/apxs -c -i -a mod_limitipconn.c /usr/local/apache/bin/apxs -c -i -a mod_evasive20.c 更改2Glogs export CFLAGS="-O2 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE" 然后编译cronolog即可 CHOST="i686-pc-linux-gnu" CFLAGS="-march=pentium4 -O3 -pipe -fomit-frame-pointer" CXXFLAGS="-march=pentium4 -O3 -pipe -fomit-frame-pointer" ./configure --prefix=/usr/local/apache --enable-mods-shared=all --enable-so --with-mpm=worker --enable-deflate --enable-cache --enable-disk-cache --enable-mem-cache --enable-file-cache --enable-proxy --enable-rewrite --enable-charset-lite --disable-ipv6 -disable-dav --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util # 编译及安装 Make && make install # vi /export1/server/apache/conf/httpd.conf #ServerName http://www.fzone.com/ 在其下增加 ServerName http://www.fzone.com/ 保存退出,现在就这么简单配置apache。 # /export1/server/apache/bin/apachectl -k start 启动apahce, 用浏览器查看http://www.fzone.com,得到it works,说明apache已经配置成功了。 # /export1/local/apache/bin/apachectl -k stop 停止apache。 如果要更改apache的文件目录,DocumentRoot "/export1/server/apache/htdocs" 比如更改到DocumentRoot "/home/ftpsite",如果单纯的更改这个是不能生效了,还要把#更改成就可以访问了。 三:安装mysql # cd /export2/soft/ # tar -zvxf mysql-max-5.0.27-linux-i686-glibc23.tar.gz # mkdir -p /export1/server/mysql (省略也可) # cp -r mysql-max-5.0.27-linux-i686-glibc23.tar.gz /export1/server/mysql # cp /export1/server/mysql/support-files/my-medium.cnf /etc/my.cnf 添加mysql用户及用户组 # groupadd mysql # useradd -g mysql mysql 修改mysql目录权限 # chown -R root /export1/server/mysql # chgrp -R mysql /export1/server/mysql # chown -R mysql /export1/server/mysql/data # chown -R root /usr/local/mysql # chgrp -R mysql /usr/local/mysql # chown -R mysql /usr/local/mysql/data 生成mysql系统数据库 # /export1/server/mysql/scripts/mysql_install_db --user=mysql& ./scripts/mysql_install_db --user=mysql 启动mysql服务 # /export1/server/mysql/bin/mysqld_safe --user=mysql & /usr/local/mysql/bin/mysqld_safe --user=mysql & ./bin/mysqladmin -u root password update user set password=password('Db#$yUI*') where user='root'; mysql忘了密码怎么办呀?? 我的办法比较苯 ./mysqld_safe --skip-grant-tables & ./mysql \r mysql update user set password=password('aaa') where user='root'; flush privileges \q 四:安装php5,php5必须有libxml2支持! 安装libxml2 # cd /export1/soft/ # tar -zxf libxml2-2.6.19.tar.gz # cd libxml2-2.6.19 # mkdir -p /export1/server/libxml2 这一步可建也可不建 # ./configure --prefix=/export1/server/libxml2 # make; make install 安装 libxslt(可选安装,你可以不安装) # cd /export2/soft/ # tar -zxf libxslt-1.1.15.tar.gz # mkdir -p /export1/server/libxslt # cd libxslt-1.1.15 # ./configure --prefix=/export1/server/libxslt --with-libxml-prefix=/export1/server/libxml2 # make; make install 安装php5 # cd /export2/soft/ # tar -zvxf php-5.1.6.tar.gz # mkdir -p /export1/server/php # cd php-5.1.6 # ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs --with-curl --enable-ftp --with-libxml-dir=/export1/server/libxml2 --with-expat-dir --enable-soap --with-xsl=/export1/server/libxslt --enable-xslt --with-gd --with-jpeg --with-zlib --with-png --with-freetype # make # make install # cp php.ini-dist /export1/server/php/lib/php.ini 其中./configure 后的 --prefix=/export1/server/php --with-apxs2=/export1/server/apache/bin/apxs --with-mysql=/export1/server/mysql/ --with-libxml-dir=/export1/server/libxml2 是必要的选项 --with-gd --with-jpeg-dir --with-png --with-zlib-dir --with-freetype-dir 这是让PHP支持GD库的配置选项 --with-curl支持CURL库 --enable-ftp 打开FTP库函数支持 --enable-soap --with-xsl=/export1/server/libxslt --enable-xslt 让PHP支持SOAP, 上面这些一般用得少, 可以去掉 ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql --with-curl --enable-ftp --with-expat-dir --enable-soap --enable-xslt --with-gd --with-jpeg --with-zlib --with-png --with-freetype 六:重新配置apache2让他支持php。 配置 httpd.conf 让apache支持PHP # vi /export1/server/apache/conf/httpd.conf 找到 AddType application/x-gzip .gz .tgz 在其下添加如下内容 AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps LoadModule php5_module modules/libphp5.so 重启apache # /export1/server/apache/bin/apachectl restart 启动时出现如下错误: httpd: Could not reliably determine the server's fully qualified domain name, using 59.108.113.51 for ServerName 这个是没有指定服务器的名称。解决方法echo ServerName localhost >> httpd.conf或者去httpd.conf文件中更改。 在htdocs目录里建一内容为 PHP文件, 输入URL地址查看PHP配置是否正确 ok,web环境apache2+mysql5+php5就介绍到这里。 更详细的apache2的配置和mysql配置和php.ini的配置参考相应文档。 Apache下的高级配置(使用于现成模式) 在主配置文件httpd.conf注释下一行,这样做的目的是把apache的功能配置分成小文件,便于修改和移植 Include conf/Includes/*.conf 修改MPM(多道处理器)参数 # cd /usr/local/apache2.2 # vi conf/extra/httpd-mpm.conf 找到如下选项,并改成对应的数值             ServerLimit           64           ThreadLimit          128           StartServers           8           MaxClients          8192           MinSpareThreads       64           MaxSpareThreads       256           ThreadsPerChild       128           MaxRequestsPerChild    0       ServerLimit              64       ThreadLimit              64       StartServers              8       MaxClients             4096       MinSpareThreads          64       MaxSpareThreads         256       ThreadsPerChild          64       MaxRequestsPerChild     500 测试过的配置:          ServerLimit          32          ThreadLimit          64          StartServers          8          MaxClients         2048          MinSpareThreads      64          MaxSpareThreads      256          ThreadsPerChild       64          MaxRequestsPerChild   0 修改apache2.2子进程所有者 # vi /usr/local/apache2.2/conf/httpd.conf 把daemon改为nobody User nobody Group nobody 一般说来,可以不需要的模块包括: #LoadModule env_module libexec/mod_env.so #LoadModule negotiation_module libexec/mod_negotiation.so #LoadModule status_module libexec/mod_status.so #server side include已经过时了 #LoadModule includes_module libexec/mod_include.so #不需要将没有缺省index文件的目录下所有文件列出 #LoadModule autoindex_module libexec/mod_autoindex.so #尽量不使用CGI:一直是Apache安全问题最多的地方 #LoadModule cgi_module libexec/mod_cgi.so #LoadModule asis_module libexec/mod_asis.so #LoadModule imap_module libexec/mod_imap.so #LoadModule action_module libexec/mod_actions.so #不使用安全认证可以大大提高访问速度 #LoadModule access_module libexec/mod_access.so #LoadModule auth_module libexec/mod_auth.so #LoadModule setenvif_module libexec/mod_setenvif.so 最好保留的有: #用于定制log格式 LoadModule config_log_module libexec/mod_log_config.so #用于增加文件应用的关联 LoadModule mime_module libexec/mod_mime.so #用于缺省index文件:index.php等 LoadModule dir_module libexec/mod_dir.so 可用可不用的有: #比如:需要在~/username/下调试php可以将 LoadModule userdir_module libexec/mod_userdir.so #比如:需要将以前的URL进行转向或者需要使用CGI scrīpt-alias LoadModule alias_module libexec/mod_alias.so 三、配置模块 1.配置静态页面压缩输出模块deflate 使用mod_deflate模块 在httpd.conf中加入以下设置: SetOutputFilter DEFLATE DeflateFilterNote ratio SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary 或者 DeflateFilterNote ratio AddOutputFilterByType DEFLATE text/* AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscrīpt 两种配置方法的作用差不多,其目的主要是把一些不必要压缩的文件禁止压缩。 2.配置mod_cache模块 # cd /usr/local/apache2.2/conf/Includes # vi mod_cache.conf 在配置文件里添加如下语句 LoadModule disk_cache_module modules/mod_disk_cache.so CacheRoot / CacheSize 256 CacheEnable disk / CacheDirLevels 5 CacheDirLength 3 LoadModule mem_cache_module modules/mod_mem_cache.so CacheEnable mem / MCacheSize 4096 MCacheMaxObjectCount 100 MCacheMinObjectSize 1 MCacheMaxObjectSize 2048 vi /usr/local/apache2/conf/httpd.conf 在末尾添加上: CacheForceCompletion 100 CacheDefaultExpire 3600 CacheMaxExpire 86400 CacheLastModifiedFactor 0.1 设置虚拟目录 然后保存退出。启动apache 3.配置mod_expires模块 mod_expires可以减少10%左右的重复请求,让重复的用户对指定的页面请求结果都CACHE在本地,根本不向服务器发出请求。 mod_expires的安装配置:       ExpiresActive on       ExpiresByType image/gif "access plus 1 month"       ExpiresByType text/css "now plus 1 month"       ExpiresDefault "now plus 1 day" 注释: 所有的.gif文件1个月以后过期 所有的文件缺省1天以后过期 4.配置dosevasive模块 /usr/local/apache2.2/bin/apxs -i -a -c mod_dosevasive20.c 编辑httpd.conf,加入以下内容: LoadModule dosevasive20_module modules/mod_dosevasive20.so DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 10 5.配置mod_limitipconn模块 mod_limitipconn.c是一个非官方的apache防止多线程下载模块,可以用来作为WEB文件的下载限制,但是它是使用ExtendedStatus On形式,工作在应用层。当同一个IP的连接到达限制的时候,apache对get请求发送: HTTP/1.1 503 Service Temporarily Unavailable 从而使用户不能下载,但并不能阻止这种攻击,仍旧允许连接的。 # /usr/local/apache2.2/bin/apxs -c -i -a mod_limitipconn.c 修改apache配置文件: # vi /usr/local/apache/conf/httpd.conf 同时需要设置以下参数在 httpd.conf 中 , 也可以在单个虚拟服务器中。   ExtendedStatus On 修改配置文件: 1 全局控制:   在httpd.conf加上以下几行:                   # 所有虚拟主机的/目录             MaxConnPerIP 3       # 每IP只允许3个并发连接             NoIPLimit image/*    # 对图片不做IP限制             # 所有主机的/mp3目录     MaxConnPerIP 1           # 每IP只允许一个连接请求        OnlyIPLimit audio/mpeg video      # 该限制只对视频和音频格式的文件       2 局部限制,你也可以在虚拟主机的配置文件里设置IP限制,方法是完全一样:   < VirtualHost xx.xxx.xx.xx >     ServerAdmin chenlf@chinalinuxpub.com     ServerName server.domain.com           ServerAlias *.domain.com           UseCanonicalName OFF           VirtualDocumentRoot /htdoc/domain/%1   < IfModule mod_limitipconn.c >         < Location / >      # 所有虚拟主机的/目录       MaxConnPerIP 5           # 每IP只允许3个并发连接             NoIPLimit image/*        # 对图片不做IP限制         < /Location >         < Location /mp3 >      # 所有主机的/mp3目录       MaxConnPerIP 2           # 每IP只允许一个连接请求          OnlyIPLimit audio/mpeg video # 该限制只对视频和音频格式的文件         < /Location >   < /IfModule >   ErrorLog /home/my/logs/error_log   CustomLog /home/my/logs/access_log common < /VirtualHost > 重启apache,用多线程的下载工具下载时,大于3个线程,其余的将得到信息: HTTP/1.1 503 Service Temporarily Unavailable 或者根据User_Agent判断,把已知的多线程工具都给deny 掉 in httpd.conf ..... BrowserMatch "NetAnt" badguy BrowserMatch "GetRight" badguy BrowserMatch "JetCar" badguy BrowserMatch "Mass Downloader" badguy BrowserMatch "ReGet" badguy BrowserMatch "DLExpert" badguy BrowserMatch "FlashGet" badguy BrowserMatch "Offline Explorer" badguy BrowserMatch "Teleport" badguy ........... order deny,allow deny from env=badguy allow from all 注意httpd里面应该有 mod_setenvif模块。 在你的apache的conf文件里面加入 LoadModule limitipconn_module lib/apache/mod_limitipconn.so ExtendedStatus On 6.安装modsecurity(mod_security 可以加强apache的安全性,特别是在防sql 注入上有很好的效果。) 下载站点:http://www.modsecurity.org/download/  # /usr/local/httpd220/bin/apxs -cia mod_security.c 打开httpd.conf查看是否有如下文字加入 在httpd.conf中添加下列一段mod_security的配置文件 LoadModule security_module      modules/mod_security.so SecFilterEngine On SecFilterCheckURLEncoding On SecFilterDefaultAction "deny,log,status:500" #SecFilterForceByteRange 32 126 #SecFilterScanPOST On SecAuditLog logs/audit_log ### SecFilter "\.\./" ##### SecFilter /etc/*passwd SecFilter /bin/*sh #for css attack SecFilter "<( | *scrīpt" SecFilter "<(.| +>" #for sql attack SecFilter "delete[ ]+from" SecFilter "insert[ ]+into" SecFilter "select.+from" SecFilter "union[ ]+from" SecFilter "drop[ ]" 四、滚卷log 编译前设置export CFLAGS="-O2 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE" 使其支持2G以上文件。 ErrorLog "|/usr/local/sbin/cronolog    /usr/local/apache2.2/logs/error_%Y%m%d.log" CustomLog "|/usr/local/sbin/cronolog    /usr/local/apache2.2/logs/access_%Y%m%d.log" combined 用gzip压缩每天的日志: 30 4 * * * /usr/bin/gzip -f /home/apache/logs/`date -d yesterday +%w`/access_log 日志的定期删除: 30 5 * * */usr/bin/find /home/apache/logs/ -name access_log.gz -mtime +3 |xargs -r /bin/rm -f 运行语法检查命令检查语法,出现错误后继续调整。 # ./bin/apachectl -t html网页跳转 index.html 使apache的日志文件里不记录图片文件      找到:         LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined       LogFormat "%h %l %u %t \"%r\" %>s %b" common       LogFormat "%{Referer}i -> %U" referer       LogFormat "%{User-agent}i" agent     再后面加上图片文件的类型       SetEnvIf Request_URI \.gif$ gif-image       SetEnvIf Request_URI \.GIF$ gif-image       SetEnvIf Request_URI \.jpg$ gif-image       SetEnvIf Request_URI \.JPG$ gif-image       SetEnvIf Request_URI \.png$ gif-image       SetEnvIf Request_URI \.js$    gif-image          SetEnvIf Request_URI \.bmp$ gif-image       SetEnvIf Request_URI \.css$ gif-image       SetEnvIf Request_URI \.mid$ gif-image       SetEnvIf Request_URI \.swf$ gif-image       SetEnvIf Request_URI \.mmf$ gif-image       SetEnvIf Request_URI \.wma$ gif-image       SetEnvIf Request_URI \.midi$ gif-image     日志       CustomLog /usr/local/apache/logs/access.log combined env=!gif-image 使用两个 ProxyPassReverse / http://%{HTTP_HOST}:8088/ RewriteEngine on                                          RewriteCond     %{REQUEST_URI} !.*\.(gif|png|jpg)$ RewriteRule ^/(.*) http://%{HTTP_HOST}:8088/ $1 [P] Linux下检测Apache进程数量并自动重启的脚本 在/etc/crontab里,定时执行检测脚本,检测系统的Apache,和Mysql进程是否超出标准,超标的话,自动重启,没有的话,记录进程数据. Crontab的内容(每30分钟执行一次,并将结果记录在/var/log/chksys.log) 0,30 * * * * root /usr/local/chksys.sh >> /var/log/chksys.log /usr/local/chksys.sh代码: #!/bin/bash #check apache,mysql thread and auto reboot system #Powered by ipaddr(aspbiz) #config MaxApacheThread=300 MaxMysqlThread=250 NeedReboot=0 ApacheThread=`ps -A|grep http|wc -l` MysqlThread=`ps -A|grep mysql|wc -l` if [ $ApacheThread -gt $MaxApacheThread ] then NeedReboot=1 fi if [ $MysqlThread -gt $MaxMysqlThread ] then NeedReboot=1 fi if [ $NeedReboot -eq 1 ] then echo "-----------------------------" echo $(date +"%y-%m-%d %H:%M:%S" echo "-----------------------------" echo "Apache:$ApacheThread;Mysql:$MysqlThread." echo "System is busy,reboot" reboot else echo "-----------------------------" echo $(date +"%y-%m-%d %H:%M:%S" echo "-----------------------------" echo "Apache:$ApacheThread;Mysql:$MysqlThread." echo "System is normal" fi

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 6 金币 [ 分享文档获得金币 ]
0 人已下载

下载文档

相关文档