联系我们
      工作时间
  • 周一至周五:09:00-17:30
  • 周六至周日:10:00-16:00
基于LNMP架构下安全机制构建
2022-11-22 11:57:45 697
  • 收藏
  • 管理

    一个电子商务网站的建立,第一步就是生产环境的构建,必须有丰富的经验和超前的规划,才能更好的构建一个最优的生产环境。在程序上,对于图片、动画、其它附件等的路径规划也至关重要,静态文件、各模块缓存的多目录量化分布等,也是我们要考虑的重点。因为这关系到日后的数据备份、维护、故障处理、网站多机扩展分布等一系列问题。

    这一系列的问题中的核心在于文件路径,其中包括系统文件路径和网站文件路径。如果文件按一定的规则进行存储,而且结构清晰,那么不管是数据备份还是数据查询都方便操作。

    系统文件

    系统文件主要说的是操作系统下的文件分布。以100G空间的VPS为例, linux分区可分为根分区 / ,占18G空间,swap分区占2G空间,其它所剩80G,可平分给两个分区/home与/data。 /home/主要用来存用户网站程序、图片、数据库的,/data/主要用来进行自动化备份。而生产环境中所用到的nginx、PHP、MySQL、memcached、eaccelerator等应用程序都装在/usr/localhost/下。因为如果重装了系统,那么肯定要重新安装软件,而如果系统版本不变,则可以直接安装之前已经编译好的程序,如果系统版本改变了,最好重新make一下。这部分不涉及内容备份。

    /home/分区下,我们可以分别新建三个文件夹,database(mysql数据库目录)、wwwlogs(nginx日志目录)、wwwroot(网站程序目录)。

    /home/database/下主要存放的是mysql数据库和mysql系统日志,文件夹下每个子文件夹代表一个数据库。

    /home/wwwlogs/下主要放nginx所产生的日志,每个域名一个日志文件,格式为“yscss.com.log”,下面的文件夹用月份命名,用来存储每日切割的每个域名的日志文件。

    /home/wwwroot/下以域名命名文件夹,每个文件夹代表一个网站,路径格式如:/home/wwwroot/yscss.com,是网站的根目录路径。

    网站文件

    上面已经说到/home/wwwroot/yscss.com是网站的根目录路径,那么接下来我们看看网站路径。以/表示网站根目录,但实际路径为/home/wwwroot/yscss.com/。一般常用的网站程序目录命名如admin(后台)、skin(风格)、template(模板)、module(模块)、file(缓存、附件)。在以上文件中,admin、skin、template、module这些目录一般情况下很少会去改变,而且所占空间也很少,可以减少备份的次数。File目录下主要是存放缓存、图片和其它附件的。所占的空间随着时间的推移,会越来越大,当文件多到10G+级别时,每天完全备份就显得不现实了。这时文件目录必须要有一个良好的规则用于备份和提高性能。具体的解决方案是文件按日存储后按月打包放到/home/wwwroot/yscss.com/file/upload目录下。如/home/wwwroot/ yscss.com /file/upload/201307/16/目录存放的是2013年7月16日上传的文件。那么在增量备份时我们可以用tar zcvf /home/wwwroot/yscss.com/file/upload/201307/16/* /data/backup/yscss.com/file-upload-201307-16.tgz的格式进行文件备份。其中的域名、年、月、日都可以改成一些系统变量,配置好后写成shell脚本,然后crontab –e添加到linux自动化定时任务cron中,如00 00 * * * /bin/bash /root/cut_nginx_logs.sh每到晚上0点,都会执行nginx日志切割脚本。

    而对于前端静态内容文件目录格式为/$module[linkurl]/($itemid/1000)+1/$itemid.html,即每个目录下存1000个文件,既有利于打开速度,提升性能,也有利于SEO和备份。当然,如果前期觉得模块下文件估计上十万级时,可适当的把每个目录下所包括的文件数增大从1000最大可增到5000,这个工作必须前期就规划好。

    缓存

    缓存可分为模板缓存和内容缓存,模板缓存比较少,不必分目录存储,路径为

    /home/wwwroot/ynjsw.com/file/cache/tpl/$module-[index|list|show|search].php。

    内容缓存上,采用分目录分ID段存储,路径为:

    /home/wwwroot/ynjsw.com/file/cache/php/($userid/1000)+1/$userid.php

    广告缓存目录 /home/wwwroot/ynjsw.com/file/cache/htm/ad_$itemid_$id.htm

    标签缓存目录 /home/wwwroot/ynjsw.com/file/cache/tag/md5($tag).htm

    /home/wwwroot/ynjsw.com/file/cache/目录下其它文件的说明

    area.php 地区缓存   

    category-$module.php分类缓存 

    bancomment-$module.php 禁止评论

    banip.php禁止IP    

    banword.php 禁止词语  

    catetree-$module.php 模块顶级栏目下拉列表

    group-$groupid.php用户组缓存  

    hits-$module.php点击缓存 

    module-$module.php模块设置

    模块复制安装默认配置

    /home/wwwroot/ynjsw.com/file/setting/*.[csv|sql]

    用户修改文件记录目录

    /home/wwwroot/ynjsw.com/file/user/($userid/1000)+1/$userid/editor.data.$moduleid.php

    备份与还原

    网站的数据库备份最常用的为全库备份,单库备份。

    全库备份:

    /usr/local/mysql/bin/mysqldump -uroot –p密码--all-databases>/data/backup/ all日期.sql(未压缩)
    /usr/local/mysql/bin/mysqldump -uroot –p密码--all-databases|gzip>/data/backup/ all日期.sql.gz

    单库备份:

    /usr/local/mysql/bin/mysqldump -uroot –ppassword 库名>/data/backup/库名日期.sql(未压缩)
    /usr/local/mysql/bin/mysqldump -uroot –ppassword 库名|gzip>/data/backup/库名日期.sql.gz

    备份文件的下载

    有人说可以发到Gmail上,在这个云存储横行的年代,我更建议发送到百度云盘。当文件备份完成后,可加个alias到/data/下,location /data/ {     alias /data/;}然后用百度云盘离线下载。

    如果发生重大灾难性事故,可以直接调用百度云盘上的数据,也可把打包的备份文件尽快的发送到服务器上,实现数据恢复。

    端口安全

    平时常用的管理端口就是SSH的22端口,可以修改下。

    sed -i 's/#Port 22 /Port 9999/g'  /etc/ssh/sshd_config
    service sshd restart

    其它

    linux系统管理员帐号越少越好

    备份目录只有下载时才开放http访问,下载完成后关闭。

    如果网站遭入侵,把nginx日志下载后好好分析,看看具体的是哪个文件存在漏洞。

    如果网站遭误删除,别急于还原数据库,而是把当前数据库先备份,然后把备份的数据在别的数据库上先还原调用,看看是否正常,如果正常,再去执行最终还原。

    如果删除的数据量少,也可以镜像一个已经备份的站,然后从镜像站中把数据手动添加过来。


    上一页:PHP编程效率的20个要点 下一页:MySQL数据库备份还原命令
    全部评论(0)