freebsd6.2 nginx+php+mysql+zend系统优化防止ddos攻击
<p>一、安装软件前的准备</p><p>系统的安装:freebsd6.2以上的光盘,最小化安装系统,同时安装好ports</p>
<p>二、手动安装nginx+php</p>
<p>1) 进入系统后,准备cvs更新:</p>
<p>1. cd /usr/ports/net/cvsup-without-gui</p>
<p>2. cp /usr/share/examples/cvsup/ports-supfile /etc/ports-supfile</p>
<p>3. # vi /etc/ports-supfile</p>
<p>将其中的#*default host=CHANGE_THIS.FreeBSD.org一行改为</p>
<p>*default host=cvsup4.FreeBSDchina.org</p>
<p>4. 更新ports</p>
<p> /usr/local/bin/cvsup -g -L 2 /etc/ports-supfile</p>
<p>2) 安装mysql</p>
<p>#cd /usr/ports/databases/mysql51-server</p>
<p>#make WITH_CHARSET=gbk WITH_XCHARSET=all WITH_PROC_SCOPE_PTH=yes BUILD_OPTIMIZED=yes BUILD_STATIC=yes SKIP_DNS_CHECK=yes WITHOUT_INNODB=yes install clean</p>
<p>#cp /usr/local/share/mysql/my-large.cnf /usr/local/etc/my.cnf ##mysql的优化参数,也可以手动修改</p>
<p>#rehash</p>
<p># mysql_install_db --user=mysql ##初始化mysql</p>
<p>#/usr/local/bin/mysqld_safe & ##启动mysql</p>
<p>#/usr/local/bin/mysqladmin -u-root password 'newpass' ##修改root密码,newpass是你需要改的密码</p>
<p>关闭mysql可以使用mysqladmin -uroot -p shutdown</p>
<p>3) 安装php</p>
<p>#cd /usr/ports/lang/php5</p>
<p>#make config ##配置编译参数</p>
<p> CLI Build CLI version<br /> CGI Build CGI version<br />[ ] APACHE Build Apache module<br />[ ] DEBUG Enable debug<br />] SUHOSIN Enable Suhosin protection system<br /> MULTIBYTE Enable zend multibyte support<br />[ ] IPV6 Enable ipv6 support<br />[ ] REDIRECT Enable force-cgi-redirect support (CGI only)<br />[ ] DISCARD Enable discard-path support (CGI only)<br /> FASTCGI Enable fastcgi support (CGI only)<br /> PATHINFO Enable path-info-check support (CGI only)<br />#make install clean</p>
<p># cp /usr/local/etc/php.ini-dist /usr/local/etc/php.ini ##cp php.ini配置文件</p>
<p>4) 安装php5-extensions</p>
<p># cd /usr/ports/lang/php5-extensions/</p>
<p>#make config</p>
<p>Options for php5-extensions 1.1<br />-------------------------------------------------<br /> CURL CURL support</p>
<p> FTP FTP support<br /> GD <br /> GETTEXT<br /> MBSTRING multibyte string support</p>
<p> MCRYPT Encryption support <br /> MYSQL</p>
<p> PCRE Perl Compatible Regular Expression support<br />[ ] POSIX //去掉.<br />[ ] SQLITE //去掉.</p>
<p> ZIP ZIP support<br /> ZLIB<br /># make install clean</p>
<p>5) 安装Zend Optimizer</p>
<p>#cd /usr/ports/devel/ZendOptimizer/</p>
<p>#make #不要安装,只需要下载解包</p>
<p>#cd /usr/ports/devel/ZendOptimizer/work/ZendOptimizer-*</p>
<p>#./install-tty ##会出现一个文字的安装界面,只是最后一步,不要选择apache就可以了</p>
<p>#vi /usr/local/etc/php.ini #zend的路径,一般来说,上面的安装会自动加入下面的文字,假如没有,请手动添加。</p>
<p></p>
<p>zend_extension_manager.optimizer=/usr/local/Zend/lib/Optimizer-3.3.0</p>
<p>zend_extension_manager.optimizer_ts=/usr/local/Zend/lib/Optimizer_TS-3.3.0</p>
<p>zend_optimizer.version=3.3.0a</p>
<p>zend_extension=/usr/local/Zend/lib/ZendExtensionManager.so</p>
<p>zend_extension_ts=/usr/local/Zend/lib/ZendExtensionManager_TS.so</p>
<p>小提示:安装zend,在freebsd下面,目前只有支持到php5.1.x,对于php5.2.x还不能支持,因为zend还没有为php5.2.x开发版本,在网上查了好多关于解决此类的问题,但得到的结果是,zend可以顺利安装,phpinfo也显示zend正常了,但程序无法调用,即zend没有工作,也就是目前无法解决,我想只有等到zend php5.2.x的版本后,才可以解决此问题,也希望哪位已经解决此类问题的兄弟,share一下你的经验。假如你非要使用zend,那就请你将php降到5.1.x,或者你不当心已经升级了ports,那建议你可以安装php4.x,毕竟目前php4.x还通用于大部分的环境</p>
<p>6) 安装nginx</p>
<p>#cd /usr/ports/www/nginx/</p>
<p>#make install</p>
<p>7) 安装lighttpd,为了得到fastcgi</p>
<p># cd /usr/ports/www/lighttpd/</p>
<p>#make install</p>
<p>#rehash</p>
<p>8) 配置nginx</p>
<p>#user nobody<br />删除前面的注释#,改成 user www</p>
<p><br />#log_format main '$remote_addr - $remote_user [$time_local] '</p>
<p># '"$request" $status $body_bytes_sent '</p>
<p># '"$http_referer" "$http_user_agent"';</p>
<p>log_format main '$remote_addr - $remote_user [$time_local] '</p>
<p> '"$request" $status $body_bytes_sent '</p>
<p> '"$http_referer" "$http_user_agent"';</p>
<p>##以上步骤,为了能够正常分析log的pv,hits,访问量,才设定的,默认的log格式,是无法准确分析出所需要的结果</p>
<p>location / {<br /> root /usr/local/www/nginx;<br /> index index.html index.htm;<br />}<br />在index.html前面添加一个index.php<br />location / {<br /> root /data/web/jk0086.com/htdocs;<br /> index index.php index.html index.htm;<br />}</p>
<p><br />#location ~ \.php$ {<br /># fastcgi_pass 127.0.0.1:9000;<br /># fastcgi_index index.php;<br /># fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script.name;<br /># include fastcgi_params;<br />#}<br />将前面的#去掉,修改为<br />location ~ \.php$ {<br /> fastcgi_pass 127.0.0.1:9000;<br /> fastcgi_index index.php;<br /> fastcgi_param SCRIPT_FILENAME /usr/local/etc/nginx$fastcgi_script.name;<br /> include fastcgi_params;<br />}<br />##去掉注释,其实就是激活了nginx的fastcgi功能,也说明了nginx本身就已经准备用于fastcgi的环境中</p>
<p>9) 配置spawn-fcgi,就是一个启动fastcgi命令,使得nginx可以通过9000端口访问(纯粹个人理解-_-)</p>
<p>参数说明:****127.0.0.1的9000端口,进程数为64(如果服务器内存小于3GB,可以只开启25个进程),用户为www</p>
<p>/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www -g www -C 64 -f /usr/local/bin/php-cgi</p>
<p>10) 这边请注意启动顺序,先启动fastcgi,再启动nginx</p>
<p>Nginx.conf由于经常需要修改,即经常需要重启nginx,因此这边写了一个启动脚本,请查看:</p>
<p>#!/usr/local/bin/bash</p>
<p>case $1 in</p>
<p>start)</p>
<p> /usr/local/sbin/nginx</p>
<p>;;</p>
<p>stop)</p>
<p> killall -9 nginx</p>
<p>;;</p>
<p>test)</p>
<p> nginx -t -c /usr/local/etc/nginx/nginx.conf</p>
<p>;;</p>
<p>restart)</p>
<p> ps auxww | grep nginx | grep master | awk '{print $2}' | xargs kill -HUP</p>
<p>;;</p>
<p>show)</p>
<p> ps -aux|grep nginx</p>
<p>;;</p>
<p>esac<br /> </p>
<p><br />保存为nginx.sh使用方法为:</p>
<p>nginx.sh start #启动nginx</p>
<p>nginx.sh stop #停止nginx</p>
<p>nginx.sh restart #重启nginx</p>
<p>nginx.sh test #测试nginx.conf的准确性</p>
<p>11) 安装phpMyAdmin</p>
<p>#cd /usr/ports/databases/phpmyadmin</p>
<p>#make install</p>
<p>#mv /usr/local/www/phpmyadmin /data/web/ jk0086.com/htdocs/</p>
<p>#cd /data/web/jk0086.com/htdocs/phpmyadmin</p>
<p>#vi config.inc.php ##这边要说明一下,freebsd默认安装的phpmyadmin,里面配置文件有问题,需要手动修改,请修改成如下内容:</p>
<p><?php</p>
<p>/* $Id: config.sample.inc.php 9689 2006-11-10 20:05:49Z nijel $ */</p>
<p>// vim: expandtab sw=4 ts=4 sts=4:</p>
<p>/**</p>
<p> * phpMyAdmin sample configuration, you can use it as base for</p>
<p> * manual configuration. For easier setup you can use scripts/setup.php</p>
<p> *</p>
<p> * All directives are explained in Documentation.html and on phpMyAdmin</p>
<p> * wiki <http://wiki.cihar.com>.</p>
<p> */</p>
<p>/*</p>
<p> * This is needed for cookie based authentication to encrypt password in</p>
<p> * cookie</p>
<p> */</p>
<p>$cfg['blowfish_secret'] = 'asdf:LKJ'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */</p>
<p>/*</p>
<p> * Servers configuration</p>
<p> */</p>
<p>$i = 0;</p>
<p>/*</p>
<p> * First server</p>
<p> */</p>
<p>$i++;</p>
<p>/* Authentication type */</p>
<p>$cfg['Servers'][$i]['auth_type'] = 'cookie';</p>
<p>/* Server parameters */</p>
<p>$cfg['Servers'][$i]['host'] = 'localhost';</p>
<p>$cfg['Servers'][$i]['connect_type'] = 'tcp';</p>
<p>$cfg['Servers'][$i]['compress'] = false;</p>
<p>/* Select mysqli if your server has it */</p>
<p>$cfg['Servers'][$i]['extension'] = 'mysql';</p>
<p>/* User for advanced features */</p>
<p>// $cfg['Servers'][$i]['controluser'] = 'pam';</p>
<p>// $cfg['Servers'][$i]['controlpass'] = 'pampasswd';</p>
<p>/* Advanced phpMyAdmin features */</p>
<p>// $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';</p>
<p>// $cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';</p>
<p>// $cfg['Servers'][$i]['relation'] = 'pma_relation';</p>
<p>// $cfg['Servers'][$i]['table_info'] = 'pma_table_info';</p>
<p>// $cfg['Servers'][$i]['table_coords'] = 'pma_table_coords';</p>
<p>// $cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages';</p>
<p>// $cfg['Servers'][$i]['column_info'] = 'pma_column_info';</p>
<p>// $cfg['Servers'][$i]['history'] = 'pma_history';</p>
<p>// $cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords';</p>
<p>/*</p>
<p> * End of servers configuration</p>
<p> */</p>
<p>/*</p>
<p> * Directories for sa ving/loading files from server</p>
<p> */</p>
<p>$cfg['UploadDir'] = '';</p>
<p>$cfg['Sa veDir'] = '';</p>
<p>?></p>
<p> <br /> </p>
<p><br />以上只是一个配置文件,当你打开Phpmyadmin的时候,会提示你输入用户名密码,然后登陆数据库,相对比较安全的</p>
<p>三、系统优化+防止ddos</p>
<p>1) 这个话题有点大,我相信我做的只是其中很小的一部分,同时很多人也会问我,是不是要编译内核,这边的回答是不需要编译任何内核,只需要copy文件,然后重启一下服务器就可以了。</p>
<p>2) 加载文件修改</p>
<p># vi /boot/loader.conf #加入如下文本</p>
<p>kern.dfldsiz="2147483648" # Set the initial data size limit</p>
<p>kern.maxdsiz="2147483648" # Set the max data size</p>
<p>kern.ipc.nmbclusters="0" # Set the number of mbuf clusters</p>
<p>kern.ipc.nsfbufs="66560" # Set the number of sendfile(2) bufs</p>
<p>##解释:</p>
<p>a. 第一,第二行主要是为了突破1G内存设置的</p>
<p>b. 第三行其实是bsd的一个bug,当系统并发达到一个数量级的时候,系统会crash,这个是非常糟糕的事情,所幸更改了这个参数后,在高并发的时候,基本可以没有类似情况,当然非常bt的情况,还得进一步想办法</p>
<p>c. 第四行是读取的文件数,如果你下载的文件比较大,且比较多,加大这个参数,是非常爽的</p>
<p>3) Sysctl修改</p>
<p>#vi /etc/rc.local</p>
<p>sysctl kern.ipc.maxsockets=100000 ##增加并发的socket,对于ddos很有用</p>
<p>sysctl kern.ipc.somaxconn=65535 ##打开文件数</p>
<p>sysctl net.inet.tcp.msl=2500 ##timeout时间<br /> </p>
<p><br /> </p>
<p>4) 通过上述的简单优化,会给你带来意外的惊喜,如果有兴趣的兄弟,可以尝试一下看看,绝无副作用。</p>
<p>四、其他</p>
<p>1) 加速ports安装</p>
<p>#vi /etc/make.conf ##加入如下</p>
<p>MASTER_SITE_OVERRIDE?=http://ports.hshh.org/${DIST_SUBDIR}/</p>
<p>MASTER_SITE_OVERRIDE?=http://ports.cn.freebsd.org/${DIST_SUBDIR}/</p>
<p>2) Freebsd颜色显示</p>
<p>secureCRT设置::终端->linux>勾选ANSI颜色-->确定</p>
<p>#vi /etc/csh.cshrc ##加入如下</p>
<p>setenv LSCOLORS ExGxFxdxCxegedabagExEx</p>
<p>setenv CLICOLOR yes</p>
<p>#cd /usr/ports/edit/vim;make install</p>
<p>#echo "syntax on">/root/.vimrc</p>
<p>#echo "alias vi vim" >>/root/.cshrc</p>
<p>##颜色主要是靠vim来显示的,因此需要安装vim,然后把vi alias成vim就可以了</p>
<p>3) Other。。。。。。。。更新中</p>
頁:
[1]