欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

freebsd6.2 nginx+php+mysql+zend系统优化防止ddos攻击

程序员文章站 2022-04-03 20:18:17
一、安装软件前的准备 系统的安装:插入freebsd6.2以上的光盘,最小化安装系统,同时安装好ports 二、手动安装nginx+php 1)        进入系统... 08-09-08...

一、安装软件前的准备

系统安装:插入freebsd6.2以上的光盘,最小化安装系统,同时安装好ports

二、手动安装nginx+php

1)        进入系统后,准备cvs更新:

1.         cd /usr/ports/net/cvsup-without-gui

2.         cp /usr/share/examples/cvsup/ports-supfile /etc/ports-supfile

3.         # vi /etc/ports-supfile

将其中的#*default host=change_this.freebsd.org一行改为

*default host=cvsup4.freebsdchina.org

4.         更新ports

    /usr/local/bin/cvsup -g -l 2 /etc/ports-supfile

2)        安装mysql

#cd /usr/ports/databases/mysql51-server

#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

#cp /usr/local/share/mysql/my-large.cnf /usr/local/etc/my.cnf   ##mysql的优化参数,也可以手动修改

#rehash

# mysql_install_db --user=mysql          ##初始化mysql

#/usr/local/bin/mysqld_safe &            ##启动mysql

#/usr/local/bin/mysqladmin -u root password 'newpass'    ##修改root密码,newpass是你需要改的密码

关闭mysql可以使用mysqladmin -uroot -p shutdown

3)        安装php

#cd /usr/ports/lang/php5

#make config    ##配置编译参数

[x] cli        build cli version
[x] cgi        build cgi version
[ ] apache     build apache module
[ ] debug      enable debug
[x]] suhosin enable suhosin protection system
[x] multibyte enable zend multibyte support
[ ] ipv6       enable ipv6 support
[ ] redirect   enable force-cgi-redirect support (cgi only)
[ ] discard    enable discard-path support (cgi only)
[x] fastcgi    enable fastcgi support (cgi only)
[x] pathinfo   enable path-info-check support (cgi only)
#make install clean

# cp /usr/local/etc/php.ini-dist /usr/local/etc/php.ini   ##cp php.ini配置文件

4)        安装php5-extensions

# cd /usr/ports/lang/php5-extensions/

#make config

options for php5-extensions 1.1
-------------------------------------------------
[x] curl        curl support

[x] ftp        ftp support
[x] gd       
[x] gettext
[x] mbstring multibyte string support

[x] mcrypt      encryption support 
[x] mysql

[x] pcre        perl compatible regular expression support
[ ] posix //去掉.
[ ] sqlite //去掉.

[x] zip         zip support
[x] zlib
# make install clean

5)        安装zend optimizer

#cd /usr/ports/devel/zendoptimizer/

#make                       #不要安装,只需要下载解包

#cd /usr/ports/devel/zendoptimizer/work/zendoptimizer-*

#./install-tty               ##会出现一个文字的安装界面,只是最后一步,不要选择apache就可以了

#vi /usr/local/etc/php.ini          #插入zend的路径,一般来说,上面的安装会自动加入下面的文字,假如没有,请手动添加。

[zend]

zend_extension_manager.optimizer=/usr/local/zend/lib/optimizer-3.3.0

zend_extension_manager.optimizer_ts=/usr/local/zend/lib/optimizer_ts-3.3.0

zend_optimizer.version=3.3.0a

zend_extension=/usr/local/zend/lib/zendextensionmanager.so

zend_extension_ts=/usr/local/zend/lib/zendextensionmanager_ts.so

小提示:安装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还通用于大部分的环境

6)        安装nginx

#cd /usr/ports/www/nginx/

#make install

7)        安装lighttpd,为了得到fastcgi

# cd /usr/ports/www/lighttpd/

#make install

#rehash

8)        配置nginx

#user   nobody
删除前面的注释#,改成 user   www


#log_format  main  '$remote_addr - $remote_user [$time_local] '

#                      '"$request" $status $body_bytes_sent '

#                      '"$http_referer" "$http_user_agent"';

log_format  main  '$remote_addr - $remote_user [$time_local] '

                      '"$request" $status $body_bytes_sent '

                      '"$http_referer" "$http_user_agent"';

##以上步骤,为了能够正常分析log的pv,hits,访问量,才设定的,默认的log格式,是无法准确分析出所需要的结果

location / {
    root    /usr/local/www/nginx;
    index    index.html index.htm;
}
在index.html前面添加一个index.php
location / {
    root    /data/web/www.jk0086.com/htdocs;
    index    index.php index.html index.htm;
}


#location ~ \.php$ {
#    fastcgi_pass    127.0.0.1:9000;
#           fastcgi_index   index.php;
#           fastcgi_param     script_filename     /scripts$fastcgi_script.name;
#    include      fastcgi_params;
#}
将前面的#去掉,修改为
location ~ \.php$ {
    fastcgi_pass    127.0.0.1:9000;
           fastcgi_index   index.php;
           fastcgi_param     script_filename     /usr/local/etc/nginx$fastcgi_script.name;
    include      fastcgi_params;
}
##去掉注释,其实就是激活了nginx的fastcgi功能,也说明了nginx本身就已经准备用于fastcgi的环境中

9)        配置spawn-fcgi,就是一个启动fastcgi命令,使得nginx可以通过9000端口访问(纯粹个人理解-_-)

参数说明:****127.0.0.1的9000端口,进程数为64(如果服务器内存小于3gb,可以只开启25个进程),用户为www

/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www -g www -c 64 -f /usr/local/bin/php-cgi

10)     这边请注意启动顺序,先启动fastcgi,再启动nginx

nginx.conf由于经常需要修改,即经常需要重启nginx,因此这边写了一个启动脚本,请查看:

#!/usr/local/bin/bash

case $1 in

start)

        /usr/local/sbin/nginx

;;

stop)

        killall -9 nginx

;;

test)

        nginx -t -c /usr/local/etc/nginx/nginx.conf

;;

restart)

        ps auxww | grep nginx | grep master | awk '{print $2}' | xargs kill -hup

;;

show)

        ps -aux|grep nginx

;;

esac
 


保存为nginx.sh使用方法为:

nginx.sh start   #启动nginx

nginx.sh stop   #停止nginx

nginx.sh restart #重启nginx

nginx.sh test   #测试nginx.conf的准确性

11)     安装phpmyadmin

#cd /usr/ports/databases/phpmyadmin

#make install

#mv /usr/local/www/phpmyadmin /data/web/ www.jk0086.com/htdocs/

#cd /data/web/www.jk0086.com/htdocs/phpmyadmin

#vi config.inc.php   ##这边要说明一下,freebsd默认安装的phpmyadmin,里面配置文件有问题,需要手动修改,请修改成如下内容:

<?php

/* $id: config.sample.inc.php 9689 2006-11-10 20:05:49z nijel $ */

// vim: expandtab sw=4 ts=4 sts=4:

/**

 * phpmyadmin sample configuration, you can use it as base for

 * manual configuration. for easier setup you can use scripts/setup.php

 *

 * all directives are explained in documentation.html and on phpmyadmin

 * wiki <http://wiki.cihar.com>.

 */

/*

 * this is needed for cookie based authentication to encrypt password in

 * cookie

 */

$cfg['blowfish_secret'] = 'asdf:lkj'; /* you must fill in this for cookie auth! */

/*

 * servers configuration

 */

$i = 0;

/*

 * first server

 */

$i++;

/* authentication type */

$cfg['servers'][$i]['auth_type'] = 'cookie';

/* server parameters */

$cfg['servers'][$i]['host'] = 'localhost';

$cfg['servers'][$i]['connect_type'] = 'tcp';

$cfg['servers'][$i]['compress'] = false;

/* select mysqli if your server has it */

$cfg['servers'][$i]['extension'] = 'mysql';

/* user for advanced features */

// $cfg['servers'][$i]['controluser'] = 'pam';

// $cfg['servers'][$i]['controlpass'] = 'pampasswd';

/* advanced phpmyadmin features */

// $cfg['servers'][$i]['pmadb'] = 'phpmyadmin';

// $cfg['servers'][$i]['bookmarktable'] = 'pma_bookmark';

// $cfg['servers'][$i]['relation'] = 'pma_relation';

// $cfg['servers'][$i]['table_info'] = 'pma_table_info';

// $cfg['servers'][$i]['table_coords'] = 'pma_table_coords';

// $cfg['servers'][$i]['pdf_pages'] = 'pma_pdf_pages';

// $cfg['servers'][$i]['column_info'] = 'pma_column_info';

// $cfg['servers'][$i]['history'] = 'pma_history';

// $cfg['servers'][$i]['designer_coords'] = 'pma_designer_coords';

/*

 * end of servers configuration

 */

/*

 * directories for saving/loading files from server

 */

$cfg['uploaddir'] = '';

$cfg['savedir'] = '';

?>

 
 


以上只是一个配置文件,当你打开phpmyadmin的时候,会提示你输入用户名密码,然后登陆数据库,相对比较安全的

三、系统优化+防止ddos

1)        这个话题有点大,我相信我做的只是其中很小的一部分,同时很多人也会问我,是不是要编译内核,这边的回答是不需要编译任何内核,只需要copy文件,然后重启一下服务器就可以了。

2)        加载文件修改

# vi /boot/loader.conf    #加入如下文本

kern.dfldsiz="2147483648"               # set the initial data size limit

kern.maxdsiz="2147483648"               # set the max data size

kern.ipc.nmbclusters="0"        # set the number of mbuf clusters

kern.ipc.nsfbufs="66560"                # set the number of sendfile(2) bufs

##解释:

a.  第一,第二行主要是为了突破1g内存设置

b.  第三行其实是bsd的一个bug,当系统并发达到一个数量级的时候,系统会crash,这个是非常糟糕的事情,所幸更改了这个参数后,在高并发的时候,基本可以没有类似情况,当然非常bt的情况,还得进一步想办法

c.  第四行是读取的文件数,如果你下载的文件比较大,且比较多,加大这个参数,是非常爽的

3)        sysctl修改

#vi /etc/rc.local

sysctl kern.ipc.maxsockets=100000    ##增加并发的socket,对于ddos很有用

sysctl kern.ipc.somaxconn=65535     ##打开文件数

sysctl net.inet.tcp.msl=2500          ##timeout时间
 


 

4)        通过上述的简单优化,会给你带来意外的惊喜,如果有兴趣的兄弟,可以尝试一下看看,绝无副作用。

四、其他

1)        加速ports安装

#vi /etc/make.conf     ##加入如下

master_site_override?=http://ports.hshh.org/${dist_subdir}/

master_site_override?=http://ports.cn.freebsd.org/${dist_subdir}/

2)        freebsd颜色显示

securecrt设置:仿真:终端->linux>勾选ansi颜色-->确定

#vi /etc/csh.cshrc    ##加入如下

setenv lscolors exgxfxdxcxegedabagexex

setenv clicolor yes

#cd /usr/ports/edit/vim;make install

#echo "syntax on">/root/.vimrc

#echo "alias vi        vim" >>/root/.cshrc

##颜色主要是靠vim来显示的,因此需要安装vim,然后把vi alias成vim就可以了

3)        other。。。。。。。。更新中