全面免费获取流量精准流量客户群!

正所谓,家鸡有米汤锅近,野鸟无粮天地宽。

今天说的就是,在如何像小野鸟一样在创业初期获得大量免费流量。

流量分两种,被动流量与主动流量。

「被动流量」难求
来自于他人的主动推荐——除了日复一日悉心经营内容、粉丝、人脉外没啥捷径。

「主动流量」易取
给你十万流量,就等你抹开面子,挽起袖子来扫街。

扫什么扫,街什么街?
1. QQ与微信流量;
2. 自媒体与全网流量;
3. 线下流量。
扫第一条街:QQ与微信流量

步骤1、
准备一堆最低配的安卓手机
· 为什么是安卓手机?
因为安卓手机不挑食啊,能装很多ios系统装不了的匪夷所思的推广软件;也因为安卓手机便宜啊。
· 为什么是一堆手机?
挂微信/挂QQ用。
微信/QQ系统检测是否作弊,主要有两条标准:多个ID,是否共用MAC地址与IP地址。
而每台手机都有一个独立的MAC地址;如果用手机流量上网IP地址也是独立,不会被微信/QQ系统判定为作弊而封号。

步骤2、
买一堆不需实名认证的手机卡,注册微信小号
· 为什么买不需实名认证的手机卡?
如果你不嫌一张张实名认证累,不怕得名下一堆欠费的手机号影响信用记录烦,那就去实名认证吧。
· 为什么是注册小号而不用你现在的ID?
我不是一针见血指出说微商那一套是真Low啊,但就算你每一条朋友圈内容、说说都设置「部分可见」不祸害亲朋好友,万一微信/QQ又出新规则封你号岂不得人脉全丢?

步骤3、
给微信小号加满4000好友
为什么是4000好友?
微信好友上限5000好友,留下1000的富余量留给自然增长。
怎么加满4000好友?
请看「要人十条」——
1、买一堆16级太阳号QQ,向QQ群要人
为什么是16级太阳号?
1. 看起来不像是路边捡来的QQ,容易加群通过,不容易被封;
2. 太阳号能创建两个普通群,比普通号多一个;
为什么是QQ小号给导给微信小号导粉,而不是相反?
1. 就算太阳号也只能加550人,相比微信的5000人上限天花板太矮,且容易被封号,因此只用作引流,不用作落地;
2. QQ说说也好,空间也好,人人都能点评点赞,万一无人问津,就不容易像微信朋友圈那样营造热销假象。
3. 用户使用时间看移动端,移动端使用时间看微信,微信朋友圈爆光更多,一对一沟通也即时与顺畅。

为什么是通过玩群导粉?
玩群最快啊。
· 最粗暴玩群法——
用关键字找你产品、行业相关群(一天最多加20个群,所以每天都要加满哦)
然后用「豪迪群发器」这类群发软件,批量加好友。(话术可以是我是XX群的群友,一起学习交流之类套近乎的。)
不管什么产品,什么行业,好友通过率不会高于百分之一……但就像电话诈骗,宰一个算一个啦。

· 稍精细玩群法——
第一步同样是加群
加群以后先不急着批量加好友,先闲聊熟络熟络,然后为收集群员关注的点做成教程(植入微信ID),上传到群共享,或发布到公众号(植入微信ID)再转发到群,以为群员解决问题为噱头吸粉……期间再装装逼摆摆谱,半个群都能主动加你,然后你再拉好友建群,并鼓励邀请朋友加入。

· 最全面玩群法——
高端点的做法是一下加3个以上的小号进一个群,一个负责逗哏转发软文,其他捧哏;就算被骂了,逗哏的留个微信号退群,捧哏的接着潜伏玩上面两种玩法……

2、向视频站要人
全网三大流量聚集地:音乐、游戏、视频。
· 所以下载你行业相关视频,都PS上你的微信、QQ,或藏入微信、QQ号的语音,然后改改标题重新上传。
· 如果你够美,或够奇葩,把短视频发到秒拍、美拍、小咖秀;在映客、花椒、斗鱼直播,也许一场微信小号就加满了。

3、向微商要人
中国的微商分两拨人,
· 一拨人叫上线,做局让下线相信很快能开上保时捷,然后拿下线的代理费和压货款自己买保时捷开;
· 一拨叫下线,交了代理费压了货而推广不举,又不服气人人都说自己被上线骗了要卖货证明自己,所以没事就发朋友圈刷屏出火。
这类智商捉鸡的下线,建了一堆微商圈彼此依偎着交流捉鸡的人生经验——不骗他们骗谁?
所以,加一堆微商群,复制这段话:“很多人问微信怎么批量加好友,我刚学到了一个好办法,不需要下载任何软件,一天自动加几百到千人没问题,私信我,免费教你(最后10个名额)”。
等人加你,就告诉他们好方法就是加一堆微商群,复制那段话。

4、向手机号要人
· 可以是主动的,
无论58同城,赶集网,地区黄页,都有大量的手机号——搜索你行业相关关键词,然后提取手机号,挨个微信加好友咯。
当然因行业而异也有「特通」——如果你是卖水光针的,主动找KTV前台、酒吧买通讯录就对了;如果你要进校园,找校推从业者买通讯录。
· 可以是被动的,
58同城、赶集网、各种租房卖房二手车平台发低价出售房、车的消息,并留绑定微信的手机小号,等保险、金融、房产中介从业者联系你,然后向他们买以及换通讯录,挨个微信加好友咯。
其他也是同理,你是卖自行车的就低价出自行车,你是卖进口护肤品的就低价出护肤品,你是卖保健品的就低价出保健品……要找微商下线?低价出你4000好友的微信账号呗。

5、向伪需求要人
· 可以是伪招聘需求,
可以是把薪资标得特别高,起码上万吧,说什么微商助理在家SOHO城市不限学历随便,然后植入你的电话、微信呗。
· 可以是伪威客需求,
在威客网站用ID发布微商相关任务,能吸引接受任务的人,又能够吸引一大批旁观微商。

6、向群发要人
· 如果你是玩美业的,用你的微信ID注册账号(例如「微信:XXX」),再信鸽论坛群发这类的群发软件,把你的软文铺满PClady美容护肤论坛、闺蜜网晚九点、19楼美容护肤、55BBS丽人专区、 Onlylady护肤论坛、爱丽社区美容晒货、瑞丽美容护肤论坛、天涯时尚资讯、 悦己网悦享购、豆瓣护肤相关小组、网易女人论坛、Yoka美容护肤论坛、 凤凰网美容达人论坛、新浪女性论坛、辣妈帮交流区、美啦晒心得、美妆心得社区、闺蜜圈话题、花瓣网、画皮网……
· 如果你是玩其他行业的,找找你行业的社区论坛。

7、向免费要人
· 比如,淘宝买文字教程、视频教程,以及最新电影,发到相关论坛贴吧,说发送到邮箱即可提取,邮箱自动回复更多资料与电影,以及微信ID;
· 比如,用百度知道行家答题(ID藏小号),引用百度网盘资料(资料再藏小号);
· 比如,论坛、贴吧发直播大贴,每日更新直播解决问题的过程与进度,软植小号;

8、向「色流」要人
什么是「色流」?就是为「好色而生」的流量。
好色之心人皆有之,郭嘉监管又如此之严,所以敢玩色情插边球都能爆——
比如,
· 没事换个美女头像,更十篇婊味图文,然后设置「允许陌生人查看十张图片」,用「移形换影」这类虚拟定位软件定位到人多的地方,摇一摇加人或主动等人加小号;
· 没事再发俩诱惑漂流瓶,用好想找哥哥聊天哦这类婊味文案,留小号;
· 没事把探探、陌陌、租我都给注册一遍,尤其是陌陌吧,每天发交友贴留小号;
· 没事混个论坛、贴吧,然后不时美声发语音信息,留小号;
· 没事把“天天酷跑”、“天天爱消除”、“节奏大师”附近的人都扫一遍,求加微信一起玩,留小号;

9、向互推要人
你有一个CP,我有一个CP,我们彼此换换,聚众银乱关五年。
直接的,直接发朋友圈说我有一个朋友做XX的,想买XX扫码报我名打9折。
间接的,好友圈玩猜谜,猜中了扫码加好友领奖品咯。

10、向「裂变」要人
所谓裂变,让好友主动给你拉人,一个好友分裂出多个。
怎么做?要不给他红包,要不和他玩游戏,要不给他价值——
· 通过红包裂变
1、发朋友圈:想要红包的联系我进群;
2、群里有了十来人,就公告,到100人发红包——让贪便宜的哼哧哼哧拉人啦;
3、到了100人,就让加你的新号领红包;
这么几次,就裂变出一个满4000人的新号了。
· 通过游戏裂变
1、发朋友圈:想免费拿XX奖品的联系我进群;
2、群里有了十来人,就开始猜骰子送奖品——开始是猜两个色子,后来猜三个色子,让贪便宜的哼哧哼哧转发拉人啦;
3、让猜中的加你的新号领红包;
这么几次,就裂变出一个满4000人的新号了。
· 通过价值裂变
1、每天20:00在某微信群占星、算命、测字;
2、次次以人不够,让群成员拉人主动加群;
3、说加你小号就送占星、算命、测字教程;
这么几场,就裂变出一个满4000人的新号了。
回顾
所谓「要人十条」,向QQ群、向视频站、向微商、向手机号、向群发、向伪需求、向免费、向色流、向互推、向裂变要人,
只为给微信小号加满4000好友。

步骤4、
用微信小号变现
加满好友不变现,就像把营销当成科学研究离钱越来越远一样暴殄天物。
要变现,也分大变现和小变现。
1、大变现
当然是猛推你的微信公众号
· 要不玩订阅号
然后挂微店卖产品,
· 要不开服务号
然后用「人人店」这类插件发展三级分销(你可以发展下线卖货,不仅X折代发货,下线收入的N%还归你);
或用「91拼团」这类插件发展拼团(N人一起买共享特惠,发起拼团的团长还能获得免单甚至倒贴)。
什么时候挂微店,什么时候玩三级分销与拼团?
· 什么时候挂微店卖产品?
当产品「非标」的时候。
像绝版签名书、开光佛牌、DIY手工皂、精仿名表、这类淘宝买不到,就算有也难比价的货,挂微店效果杠杠的。
· 什么时候发展三级分销与拼团?
当产品「普适」且「实惠」的时候。
像进口水果、进口护肤品、进口保健品这类人人需要,且看似高端随便标个几十块都觉得好便宜的货,就得用三级分销与拼团去整。
2、小变现
以装纯绿茶婊的名义,晒红包记录,暗示狼友主动发红包讨好你。
配上一两句『接着收接着肉偿吧』之类让人浮想联翩的文案,钱哗哗地来……

第一条街总览
要想在创业初期,扫出QQ与微信流量,你得:
1、准备一堆最低配的安卓手机;
2、买一堆不需实名认证的手机卡,注册微信小号;
3、给微信小号加满4000好友;
4、用微信小号变现。
扫街真的很苦很累很Low吗?
那就对了,舒服是留给那些【本魔之外所有一切讲营销的都是离钱太远科学家与十世屌丝】的,听完他们说的还能得到小礼物——听完能得到个屁咧。
要生存,唯有猛烈实战。
如果创业靠嘴,那街边舔棒棒糖的个个身价千万;更何况如此猛烈实战尚且未必能生存,若不猛烈,则根本连生存都不可能了。
所以扫完一条街还有一条——

扫第二条街:自媒体与全网流量
步骤1、
为承接全网流量,开微信公众号
为什么用微信公众号承接全网流量?
1、因为微信公众号,是去中心化的
· 所谓中心化,就像是家鸟,吃好吃坏看主人。
就是像今天头条等内容型社区,推送的大流量入口掌握在编辑手里,作者得看编辑脸色吃饭;你甘心自己的千辛万苦搞来的流量被平台榨取,为别人所用吗?
又如新浪博客,上了博客首页推荐分分钟阅读破万,没上?不知道,因为从没进过没上首页推荐的博客。
· 所谓去中心化,就像是野鸟,吃好吃坏靠自己。
微信公众号是典型特征。爷公众号上每一个关注,每一个阅读都是自己辛苦挖的,所以微信平台也无力干预内容(毕竟不靠平台推荐赏饭,也没谁每天盯着平台脸色)。
除了郭嘉政策的严禁黄赌毒,以及民怨太深的H5游戏与测试之外,其他内容可以说是百无禁忌。
2、因为微信公众号,自带分享背书
自己建站,用个美国域名,香港主机,备案都不用,内容比微信更自由啊,为什么不用自己建站来承接全网流量呢?
因为自己建站,不带分享属性——打开你莫名其妙的三无域名已经捏一把汗了,把你三无域名上可能埋了病毒的网页分享给朋友,这心得多大。
微信公众号则不同,背靠腾讯的安全背书,分享只取决于内容,其他一概不用管。
3、因为微信公众号,背靠微信入口
用户使用时间,移动端占掉了一半以上,而微信又占了移动端使用时间的三分之二以上——这不是重点,重点是微信有公众号关注与推送入口,只要像本号这样内容过硬,高频多次打开根本不成问题。

步骤2、
在微信公众号,积累优质内容
1、什么是「积累」?
起码日更一篇,表示对关注者的尊重;
哪怕有事更不了,起码像和菜头的「槽边往事」那样,发张图片点卯。
2、什么是「优质内容」?
内容本身隔行如隔山,也没法给普适标准,但大概看三个数据。
· 一看阅读率
文章的阅读率(阅读数/粉丝数)越高,文章越好;
· 二看留言数
文章的留言率(留言数/粉丝数)越高,文章越好;
· 三看赞赏数,
文章的赞赏率(赞赏数/粉丝数)越高,文章越好。
每天评估每篇文章这三个数据,过一个月你连开公开课像营销科学派那样告诉台下一千人《什么是微信好文章》都够格了。

步骤3、
给微信公众号引流
没有十万阅读,那就不提升阅读、留言、赞赏数了? 当然得。
请看「引流十方」——
1、从关注者引流
为什么?
当关注者
转发你的文章到朋友圈;
且说了正面评价;
的时候,他就是你最好的软文——转发到朋友圈是给你直接引流;说正面评价又用作为朋友的信任背书强化引流效果。
怎么做?
那什么是让关注者转发与正面评价的决定性因素?标题。80%的受众只看标题,所以标题能「装逼」就够了。
为什么是装逼?你想想当你转发文章到朋友圈,还不是为了——
· 装作老子牛逼,连这个都知道(就像这样的标题《波旬:78%人深受其害却不自知的78+N种心理触发器 》——装给好友看,老子玩的就是高端咧);
· 装作老子牛逼,所以要调戏你(就像这样的标题《听说你又色又贪,所以能年赚百万》——装给好友看,老子把你一眼看穿咧)
· 装作老子牛逼,有自己的主张(就像这样的标题《波旬:永别北上广深宣言书》——装给好友看,老子就是敢像作者对大城市撕票咧)
· 装作老子牛逼,转给你占便宜(就像这样的标题《波旬:送你「一口箱子」2016.5.5版 | 最可怕的营销武器》——装给好友看,这样的干货老子都不忘带上你一起占便宜咧)
· 装作老子牛逼,知道作者秘密(就像这样的标题《吹什么品牌诊断,姐教你听脉搏、看手相》——装给好友看,老子连波旬是个姐我都知道咧)
另外,为什么每篇文章标题里都带上作者名?当然是为了让转发者不知不觉为你背书咧。
——总之,你用标题带关注者装逼,关注者用转发给你背书。
2、从微信、QQ引流
参见上条街啦。
3、从微博引流
为什么?
为什么不是微信给微博引流,而是微博给微信引流?
微博的用户使用时间已被微信大幅挤占;且微博的时间线也偏向于明星与段子手,趁吃枣药丸之前,把粉丝转移到微信公众号就对了。
怎么做?
· 如果你微博没啥粉丝,
1、微博检索问题相关关键词,然后用水军关注提及相关问题的受众(根据「互惠法则」,小透明被关注就有可能因为亏欠而回粉;再加上「大数法则」关注一百人,至少一人回粉)。
2、微博检索问题相关关键词,然后用水军评论加私信邀请做测试(测试开头可以推微信公众号ID,测试结果可以留微信二维码)
我见过最夸张的水军是「伊的家」,总共约13000个马甲,但凡提到祛痘、美白、防晒、补水等肌肤问题的微博用户都得中枪。
· 如果你微博粉丝众多,
封面图直接挂微信二维码啦,就像这样无孔不入:
http://j.mao2.cn (二维码自动识别)

4、从专栏引流
从哪些专栏引流?
开通头条号、搜狐公众号、一点资讯公众号、虎嗅专栏、百度百家、简书、知乎回答、知乎专栏、新浪博客。
为什么从专栏引流?
因为这些专栏有「中心化」的推荐红利——
· 例如开通今日头条号、搜狐公众号、一点资讯公众号、虎嗅专栏、百度百家、知乎回答、知乎专栏、新浪博客,编辑喜欢的文章与作者都会拿到平台核心资源主推;
· 例如知乎回答、知乎专栏,会随着粉丝点赞获得几何级数的曝光;
· 例如新浪博客,虽然没啥靠谱的资源了,但SEO权重天然高,用于占领长尾关键词搜索结果,小品牌、小作者的相关搜索词,不用几篇就首页了。
5、从视频引流
· 下载你行业相关视频,都PS上你的微信公众号,或藏入推荐微信公众号的语音,然后改改标题重新上传。
· 如果你够美,或够奇葩,把植入公众号的短视频发到秒拍、美拍、小咖秀;在映客、花椒、斗鱼直播并不时转公众号文章,也许一场微信小号就加满了。
6、从图片引流
把带上你微信公众号ID水印的图片,发满全网而获百度图片收录,进而被不知情的网民引用。
Tips:百度贴吧贴图、百度百科、搜狗百科、堆糖网、花瓣网、新浪博客文章内图、高百度权重新闻源发文内图,都会被百度图片优先收录。
7、从分类信息网引流
分类信息网,如58、人人、赶集都是引流对象。
多半是刷存在感,但如果走狗屎撞上了算法抽风,或编辑脑残推荐,也能带来红利——所以,用「信鸽分类信息营销专家」这类软件代替人力刷存在感就足了。
8、从百度贴吧引流
当PC时代热门的猫扑、天涯、西祠胡同相继走冷,贴吧依旧火热——毕竟百度贴吧在所有百度搜索结果排名靠前,给贴吧有导入大量小白流量。
先加热,
· 开一个有借口每日更新的大贴并用马甲抢占二楼贴微信公众号ID(比如我之前在市场营销贴吧回复过万的《人肉营销百科,我是某上市公司营销总监免费答疑》这样的);
· 每日转发微信公众号内容到贴吧就好。
再引爆,
· 用二维码做头像与签名图;
· 文章随时软植微信公众号;
· 和吧主套近乎拿小吧然后卯足了劲给自己设精;
· 私信联系与自己互动吧友发微信公众号二维码;
· 没事就和夸过自己的吧友互动形成捧场亲卫队;
9、从短信与EDM引流
到开始到现在都没看见个人订阅号给观众者发过短信——你可以收集你微信公众号铁粉的手机,逢干货内容就短信提醒回来看。
更可以让铁粉加入QQ邮箱列表,然后逢干货发邮件提醒回来看。
10、从付费引流
如果你不能免费引流,那就把付费引流的钱花到刀刃上吧——
比如,在「人人转联盟」、「水君网」这类水军接单平台发任务,就有大量小白转你文章;在「微播易」这类大V接单平台买高端朋友圈项目,就有大量大V转你文章。
回顾
所谓「引流十方」,从关注者、微信与QQ、微博、专栏、视频、图片、分类信息网、百度贴吧、短信与EDM、付费引流,
只为让微信公众号每天涨关注一点点。

步骤4、
凭微信公众号变现
就算没有十万阅读数,那就不想收点零花钱了? 当然想。
微信公众号变现,那是相当的名利双收:
1、收赞赏
总有识货的,当你积累优质内容,迟早赞赏收到手软。
2、挂广告
一万粉丝就能开通流量主服务,关注者点击文章下方广告,你躺着赚钱。
3、卖软文
上「微播易」注册自媒体账号,就能被甲方翻牌子写软文了。
4、卖作者相关产品
为什么是作者相关?
因为作者为关注者持续积累优质内容,关注者当然更买作者账;同时这年头骗子多到傻子都不够用了,推作者无关的产品真没甲方微播易派单之嫌?
为什么罗辑思维卖书好过卖文具?因为罗振宇天天证明自己懂书,却从没证明自己懂文具。
就像我早早在公众号「他化自在天」挂出了第二稿还在修改中的经典『穷营销』。 5、卖作者相关服务
为什么是作者相关?
与产品同理。
当你有十万粉丝,多少人买你的在线/线下培训?
就像我卖给关注者名正言顺骗稿机会的『十二道金牌』。
6、换资源
当你给合作伙伴看你干货满满,动辄几万阅读的公众号,是否更容易获得合作机会?
7、骗融资
微信公众号这样动动脑然后动动手就是几篇的玩意,向投资人要钱除了改善生活还能做甚?
反正如果我融到了钱,肯定是会熟人那买流量合理做账,再让熟人从我这买流量合法平账。

第二条街总览
要想在创业初期,扫出自媒体与全网流量,你得
1、为承接全网流量,开微信公众号;
2、在微信公众号,积累优质内容;
3、给微信公众号引流;
4、凭微信公众号变现。
这就是所谓全网营销,自媒体成交。
扫街真的很苦很累很Low吗?
那就对了,舒服是留给那些【本魔之外所有一切讲营销的都是离钱太远科学家与十世屌丝】的,听完他们说的还能得到小礼物——听完能得到个屁咧。
要生存,唯有猛烈实战。
如果创业靠嘴,那街边舔棒棒糖的个个身价千万;更何况如此猛烈实战尚且未必能生存,若不猛烈,则根本连生存都不可能了。
所以扫完第二条街再来第三条——

扫第三条街:线下流量
步骤1、
装修一个微信小号,用于承接线下扫码加好友
· 为什么用「微信小号」承接?
1、作为占用手机2/3使用时间的APP,微信门槛最低。
2、同时,就算是微信小号,也属于「活人」,相较机械的微信公众号而言,一下拉近了心理距离——如果你再略装修一下,这活人连温度都有了。
· 为什么是「扫码」添加?
1、你以为线下受众,会耐心输入一长串字符,再写一串添加的理由,然后点击发送,再耐心等你通过申请?当然是把输入6个以上字符,简化为一个扫码动作,降低让线下受众的决策门槛与因输错数字而引起的跳失率;
是告诉你我的公众号叫「他化自在天」(ID:sky6th),还是直接Po个二维码更能骗你关注?
http://weixin.qq.com/r/fExbQ6zEifH2regg9xlu (二维码自动识别)
2、同时,让线下受众选择性忽略自己、添加理由通不过申请的心理担忧——不是老子求你加我,是孙子你放二维码让老子加你的,正好老子有相关需求,那就扫一扫咯。
· 微信小号怎么「装修」?
1、现在就发第一条朋友圈,内容为「换号,看到这一条的都是我最在乎的朋友」之类,证明小号不是小号。
2、铺底起码十条,可以在一天内发完以下十条反正没人看时间——证明你是有生活情调的活人(5条)、证明你不缺钱(1条)、证明你帮朋友赚到钱了(1条)、证明你爱你推的品牌与产品(3条)。
3、然后,按上述比例,保证每天至少一条就好。

步骤2、
到线下布局扫码入口,给微信小号吸人
请看「吸人五口」——
1、从渠道入口吸人
· 有门店资源要把渠道吸干
例如门店免费WiFi,扫码添加微信后才给密码——提前告知微信个人介绍就是密码。
例如门店办抽奖活动,留手机后才可告知是否中奖——留手机就能添加微信了。
· 没有门店资源要创造门店资源然后把渠道吸干
例如免费教门店店主建有赞商城,然后在商城加入自己的产品;
例如看到门店招聘就加好友,让店主有偿推荐顾客扫码关注你;
例如免费给超市提供带你微信二维码的小票;
例如以线上宣传资源,置换线下帮你发传单;
例如贿赂快递员,拿钱买他手头的顾客电话;
例如贿赂快递站,让快递站帮你随手发传单;
哪怕上厕所都要把自己二维码贴在蹲位门上。
2、从人脉入口吸人
逮着机会就让朋友推荐疑似有需求的名片给你,你主动加好友;
把个人微信贴在手机背面,通过在行,通过线下聚会互相扫码;
与当地行业协会携手组织会议或免费培训,现场活动推二维码;
3、从大V入口吸人
· 可以是跪舔大V,例如写一系列为大V吹牛逼之类的文章,带上自己的微信小号投稿到各大新闻源,然后想方设法以仰慕者的身份加大V微信,分享文章到朋友圈并@大V,然后求他办事……
· 可以和大V聊互推。如果大V有十万关注,你有两个五万关注的公众号,试着和大V聊聊两号并推换对方推你微信;如果你只有一万关注,试着和大V聊聊推对方十次换对方推你微信一次。
· 可以直接在微播易上下单买大V的「高端朋友圈」业务(如果你不能给大V名,那就只能给大V利了)。
4、从产品入口吸人
· 所有包装、赠品上都藏进客服微信小号的微信二维码;
· 所有宣传辅料上都印联系客服免费抽奖的微信二维码。
5、从媒体入口吸人
买媒体有个悖论:最需要媒体报导的是买不起媒体的,买得起媒体的媒体主动报导。
为什么让比基尼女郎在屁股上印微信二维码,为什么让猛男胸前印二维码穿街过市?为什么在报社电台门前快闪?还不都是为了吸引媒体报导。
回顾

所谓「吸人五口」,从渠道、人脉、大V、产品、媒体入口吸人,
只为攒够线下关注者让微信小号变现。

步骤3、
用微信小号变现线下人群
不就是把线下人群往赚钱的地方引吗——
· 引到产品服务上,恭喜你可以躺着卖货了;
· 引到代理压货上,恭喜你可以压榨下线了;
· 引到直播房号上,恭喜你可以怒赚火箭了;
· 引到三级分销上,恭喜你可以坐享佣金了;
· 引到拼团上,恭喜你可以拿产品又拿钱了;
· 引到轻松筹上,恭喜你可以装病求捐献了;
· 引到微播易上,恭喜你可以卖高端朋友圈;
· 引到公众号上,恭喜你可以多一次推送了;
· 引到实体店促销上,恭喜你可以等接客了;
· 引到金融类产品上,恭喜你可以割韭菜了;
引到哪都是白赚,毕竟人数在——正所谓,地在人失,人地皆失,地失人在,人地俱得。

第三条街总览
要想在创业初期,扫出线下流量,你得:
1、装修一个微信小号,用于承接线下扫码加好友
2、到线下布局扫码入口,给微信小号吸人
3、用微信小号变现线下人群
扫街真的很苦很累很Low吗?
那就对了,舒服是留给那些【本魔之外所有一切讲营销的都是离钱太远科学家与十世屌丝】的,听完他们说的还能得到小礼物——听完能得到个屁咧。
要生存,唯有猛烈实战。
如果创业靠嘴,那街边舔棒棒糖的个个身价千万;更何况如此猛烈实战尚且未必能生存,若不猛烈,则根本连生存都不可能了。

CentOS上如何把Web服务器从Apache换到Nginx

阿里云服务器上, 1G内存的配置,但用了一段时间,感觉Apache有些撑不出,想了想,还是换到目前最热门的Nginx吧。 这里把整个过程记录下来,与大家共享。

Nginx简介:

Nginx是一个高性能的HTTP服务器和反向代理服务器, 最大的优点是节省资源,适用于处理高并发的请求。

1. Nginx最初是按照反向代理设计的,和Apache不同, nginx关心如何处理url,而不是文件!

2. Apache 是个基于进程处理的web服务器,如果同时有多个请求,必须要启动多个进程来处理。 这样在高负载的情况下,资源的消耗和响应的速度都会有很大的问题。 而Nginx是个基于事件(event)的异步处理模式, 下面是Nginx的一个简单的示意图,有一个Master进程,Maste进程负责系统配置,管理socket,以及管理一个或是多个Worker进程。 而Worker进程接收和处理来自用户(浏览器)的请求。一般来讲,一个worker进程可以同时处理上千个用户的连接请求。每个worker进程采用异步的,基于event的方式来处理用户的请求。对于HTML的静态页面,Nginx会自行来处理,但对于PHP,JSP, Python等动态页面,Nginx是通过FastCGI(或者SCGI,UWSGI)来把动态页面的请求交给相应的处理程序来处理。

nginx

安装Nginx

需要注意的是,在CentOS的YUM的基础的容器中,并没有nginx和php-fpm的RPM包。这两个RMP包在epel的容器中, 虽然你可以从官网下载RPM包来安装,但我个人建议,如果你的CentOS/Redhat中没有加入YUM的epel容器,还是先把这个yum容器加上去比较好,以后可以省无数的折腾。epel具体的安装方法,我在 Redhat/CentOS 软件安装之RPM和YUM 这篇文章中有介绍。

yum的容器库中加入了epel容器后,在CentOS上安装Nginx就非常简单,运行下面的命令就可以了。

yum install nginx
安装玩以后,会发现Nginx的配置文件放在 /etc/nginx目录下, 一般在缺省的情况下,web的root目录会在/usr/share/ngxin/html中。

安装完nginx以后,我们要测试一下是否安装成功了.

如果之前已经安装过Apache的话,先要把Apache的服务停掉。

/etc/init.d/httpd stop #停掉apache服务
chkconfig httpd off #开机重启后,apache服务不再启动
这时候你在浏览器上输入 http://主机ip, 如果能出现nginx的测试页面 “Test page for the nginx http server on EPEL”就说明nginx已经正常运行了。

安装php-fpm

PHP-FPM (PHP-FastCGI Process Manager) 是目前最常用的一个PHP FastCGI的实现。通俗的讲,这个模块在Nginx和PHP之间桥梁,使之可以互相通信和交换。

安装及启动过程如下:

yum install php-fpm
/etc/init.d/php-fpm start
chkconfig php-fpm on
下一步是确认一下,nginx和php-fpm是否已经正常运行. 执行 netstat -tunlp 命令,会看到大约如下的一个界面。

可以看到nginx在监听80端口,而php-fpm在监听9000端口。

Screenshot

设置Nginx 和 PHP-FPM

我们假定这个主机上有两个网站,一个是aaa.com, 普通的PHP站点, 一个是bbb.com,为wordpress的博客。 我们就讨论一下在这种情况下,如何设置nginx.

首先为站点建立相应的目录

mkdir -p /var/www/aaa/html
mkdir -p /var/www/bbb/html
mkdir -p /var/log/nginx/aaa
mkdir -p /var/log/nginx/bbb
chown -R nginx:adm /var/www/aaa/html
chown -R nginx:adm /var/wwww/bbb/html
chown -R nginx:adm /var/log/nginx/aaa
chown -R nginx:adm /var/log/nginx/bbb
为两个网站分别设置虚拟目录(virtual directory)

为了保证整个配置更加清晰,我们尽量不修改主配置文件/etc/nginx/nginx.conf , 而是在在/etc/nginx/conf.d目录下建立两个文件,一个是aaa.conf, 一个是bbb.conf

其中aaa.conf的内容如下 (aaa是一个普通的php网站): 参考于: http://wiki.nginx.org/PHPFcgiExample

server {
listen 80 default_server; #当输入ip时,会访问aaa.com
server_name www.aaa.com aaa.com *.aaa.com; #这个应该是最好的写法了
access_log /var/log/nginx/aaa/access.log; #access_log属于ngx_http_log_module的设置, 缺省level为info
error_log /var/log/nginx/aaa/error.log; #error_log属于core module, 缺省的level是error
location / {
root /var/www/aaa/html;
index index.php index.html index.htm; #由于是PHP类型的动态页面为主,所以把index.php放在前面效率会更高些
# try_files $uri $uri/ /index.php?$args; #普通php网站因为没有rewrite的话,这个不需要
}
error_page 404 /404.html; #error_page errcode uri (也就是说出现了404错误,会请求/404.html)
location = /404.html { #这是一个典型的location
root /var/www/aaa/html;
}
#redirect server error pages to the static page /50x.html
#error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/aaa/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
# 因为我们不用Nginx做Apache的反向代理,所以不需要这个
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
# 这种写法可以防止把恶意程序伪装成.jpg之类的攻击,(其实有个更简单的方法,就是把php.ini中的cgi.fix_pathinfo=0,但有时候简单的修改cgi.fix_pathinfo会造成有的php脚本出错)
location ~ [^/]\.php(/|$) {
root /var/www/aaa/html;
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
#try_files $uri =404; #这个try_files说明:对于.php文件,直接执行$uri, 如果找不到这个$uri,直接给出404错误,(和 location / 定义不同!),主要是为了防止 伪装成图片的攻击 (目前看,最安全的方式,是用上面那一句话,官方推荐的)
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache’s document root
# concurs with nginx’s one
#
location ~ /\.ht {
deny all;
}
设置完aaa.com的环境后,还需要设置bbb.com的 nginx的配置,因为bbb.com是wordpress的站点, 除了和aaa.com相同的设置外,还有些特殊的设置,具体设置请参考 http://codex.wordpress.org/Nginx

至此,从Apache向Nginx的移植基本完成。

SSH/SSL 源码编译安装详解

环境:CentOS 6.7
安全加固需求,由于某盟扫描系统主机有SSL系列漏洞,客户要求必须修复;
解决方案:将SSH/SSL升级到最新版本,删除SSL旧版本(实测不删除旧版本某盟扫描无法通过)。
当前版本:OpenSSH_5.3p1, OpenSSL 1.0.1e-fips
当前最新版本:OpenSSH_7.3p1, OpenSSL 1.0.2h

1.查看SSH/SSL当前版本
2.下载最新的SSH/SSL
3.源码编译安装SSL
4.源码编译安装SSH
5.删除SSL旧版本
6.写在后面
1.查看SSH/SSL当前版本

查看SSH/SSL当前版本:
ssh -V
openssl version

[root@test0823 ~]# ssh -V
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013

[root@test0823 ssh]# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
备份ssh配置文件:
tar zcvf /etc/ssh.tar.gz /etc/ssh/

[root@test0823 ~]# tar zcvf /etc/ssh.tar.gz /etc/ssh/
ssh/
ssh/ssh_host_dsa_key.pub
ssh/ssh_host_rsa_key.pub
ssh/ssh_host_rsa_key
ssh/sshd_config
ssh/ssh_config
ssh/moduli
ssh/ssh_host_dsa_key
ssh/ssh_host_key.pub
ssh/ssh_host_key
2.下载最新的SSH/SSL

目前最新版本:
OpenSSH_7.3p1, OpenSSL 1.0.2h
本次安装介质:
链接: http://pan.baidu.com/s/1eRW3ytc 密码: 46sy
SSH/SSL安装配置参考:
SSL安装:
参考 http://www.linuxfromscratch.org/blfs/view/svn/postlfs/openssl.html
SSH安装:
参考 http://www.linuxfromscratch.org/blfs/view/svn/postlfs/openssh.html

3.源码编译安装SSL

本次测试所有源码包均默认上传到服务器的/root目录下。
需要先安装SSL,再安装SSH

3.1 解压SSL源码包

[root@test0823 ~]# tar -zxvf openssl-1.0.2h.tar.gz
[root@test0823 ~]# cd openssl-1.0.2h
3.2 配置并编译

复制下面的命令执行:

./config –prefix=/usr \
–openssldir=/etc/ssl \
–libdir=lib \
shared \
zlib-dynamic &&
make depend &&
make
操作如下:

[root@test0823 openssl-1.0.2h]# ./config –prefix=/usr \
> –openssldir=/etc/ssl \
> –libdir=lib \
> shared \
> zlib-dynamic &&
> make depend &&
> make
3.3 安装SSL

复制下面的命令执行:

make MANDIR=/usr/share/man MANSUFFIX=ssl install &&
install -dv -m755 /usr/share/doc/openssl-1.0.2h &&
cp -vfr doc/* /usr/share/doc/openssl-1.0.2h
操作如下:

[root@test0823 openssl-1.0.2h]# make MANDIR=/usr/share/man MANSUFFIX=ssl install &&
> install -dv -m755 /usr/share/doc/openssl-1.0.2h &&
> cp -vfr doc/* /usr/share/doc/openssl-1.0.2h
3.4 验证SSL版本

openssl version

操作如下:

[root@test0823 openssl-1.0.2h]# openssl version
OpenSSL 1.0.2h 3 May 2016
[root@test0823 openssl-1.0.2h]# ssh -V
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
4.源码编译安装SSH

4.1 解压SSH源码包

[root@test0823 ~]# tar -zxvf openssh-7.3p1.tar.gz
[root@test0823 ~]# cd openssh-7.3p1
4.2 配置

4.2.1 配置前准备

复制下面的命令执行:

install -v -m700 -d /var/lib/sshd &&
chown -v root:sys /var/lib/sshd &&

groupadd -g 50 sshd &&
useradd -c ‘sshd PrivSep’ \
-d /var/lib/sshd \
-g sshd \
-s /bin/false \
-u 50 sshd
操作如下:

[root@test0823 openssh-7.3p1]# install -v -m700 -d /var/lib/sshd &&
> chown -v root:sys /var/lib/sshd &&
>
> groupadd -g 50 sshd &&
> useradd -c ‘sshd PrivSep’ \
> -d /var/lib/sshd \
> -g sshd \
> -s /bin/false \
> -u 50 sshd
4.2.2 配置并编译

复制下面的命令执行:

./configure –prefix=/usr \
–sysconfdir=/etc/ssh \
–with-md5-passwords \
–with-privsep-path=/var/lib/sshd &&
make
操作如下:

[root@test0823 openssh-7.3p1]# ./configure –prefix=/usr \
> –sysconfdir=/etc/ssh \
> –with-md5-passwords \
> –with-privsep-path=/var/lib/sshd &&
> make
4.3 安装SSH

复制下面的命令执行:

make install &&
install -v -m755 contrib/ssh-copy-id /usr/bin &&

install -v -m644 contrib/ssh-copy-id.1 \
/usr/share/man/man1 &&
install -v -m755 -d /usr/share/doc/openssh-7.3p1 &&
install -v -m644 INSTALL LICENCE OVERVIEW README* \
/usr/share/doc/openssh-7.3p1
操作如下:

[root@test0823 openssh-7.3p1]# make install &&
> install -v -m755 contrib/ssh-copy-id /usr/bin &&
>
> install -v -m644 contrib/ssh-copy-id.1 \
> /usr/share/man/man1 &&
> install -v -m755 -d /usr/share/doc/openssh-7.3p1 &&
> install -v -m644 INSTALL LICENCE OVERVIEW README* \
> /usr/share/doc/openssh-7.3p1
4.4 验证SSH版本

[root@test0823 openssh-7.3p1]# ssh -V
OpenSSH_7.3p1, OpenSSL 1.0.2h 3 May 2016
4.5 重启sshd服务

将之前的sshd重命名备份,做一个sshd的软连接:

mv /usr/sbin/sshd /usr/sbin/sshd.OFF
ln -s /root/openssh-7.3p1/sshd /usr/sbin/sshd
使用 service sshd restart 重启一下服务

[root@test0823 openssh-7.3p1]# service sshd restart
Stopping sshd: [ OK ]
Starting sshd: /etc/ssh/sshd_config line 81: Unsupported option GSSAPIAuthentication
/etc/ssh/sshd_config line 83: Unsupported option GSSAPICleanupCredentials
/etc/ssh/sshd_config line 97: Unsupported option UsePAM
[ OK ]
上面的报错并不影响sshd正常启动,为了不再显示上述提示,可以注释掉相关配置行:
vi /etc/ssh/sshd_config
注释掉 81,83,97 三行。

再次重启sshd服务就不会有那三行的提示报错。

允许root用户ssh登录(默认可能就是允许,如果不允许,可以在文件末尾追加下面的一行配置到配置文件,或者直接vi编辑修改)

echo “PermitRootLogin yes” >> /etc/ssh/sshd_config
5.删除SSL旧版本

之前没有删除旧版本的SSL,SSH是因为不了解相关联的程序,
但是最后扫描发现如果不删除旧版本的SSL,某盟的扫描依然会扫出SSL的系列漏洞。

查看rpm安装的openssl相关包:

rpm -qa|grep openssl
对旧版本的SSL(这里是openssl-1.0.1e-42.el6.x86_64)进行删除:
rpm -e openssl-1.0.1e-42.el6.x86_64
直接尝试删除会提示如下库文件的依赖:

[root@test0823 ~]# rpm -e openssl-1.0.1e-42.el6.x86_64
error: Failed dependencies:
libcrypto.so.10()(64bit) is needed by (installed) qt-1:4.6.2-28.el6_5.x86_64
libcrypto.so.10()(64bit) is needed by (installed) libarchive-2.8.3-4.el6_2.x86_64
libcrypto.so.10()(64bit) is needed by (installed) libssh2-1.4.2-1.el6_6.1.x86_64
libcrypto.so.10()(64bit) is needed by (installed) wget-1.12-5.el6_6.1.x86_64
libcrypto.so.10()(64bit) is needed by (installed) wpa_supplicant-1:0.7.3-6.el6.x86_64
libcrypto.so.10()(64bit) is needed by (installed) bind-libs-32:9.8.2-0.37.rc1.el6.x86_64
libcrypto.so.10()(64bit) is needed by (installed) bind-utils-32:9.8.2-0.37.rc1.el6.x86_64
libcrypto.so.10()(64bit) is needed by (installed) mysql-libs-5.1.73-5.el6_6.x86_64
libcrypto.so.10()(64bit) is needed by (installed) fipscheck-1.2.0-7.el6.x86_64
libcrypto.so.10()(64bit) is needed by (installed) httpd-tools-2.2.15-45.el6.centos.x86_64
libcrypto.so.10()(64bit) is needed by (installed) cyrus-sasl-md5-2.1.23-15.el6_6.2.x86_64
libcrypto.so.10()(64bit) is needed by (installed) gnome-vfs2-2.24.2-6.el6.x86_64
libcrypto.so.10()(64bit) is needed by (installed) ptlib-2.6.5-3.el6.x86_64
libcrypto.so.10()(64bit) is needed by (installed) opal-3.6.6-4.el6.x86_64
libcrypto.so.10()(64bit) is needed by (installed) python-libs-2.6.6-64.el6.x86_64
libcrypto.so.10()(64bit) is needed by (installed) python-ldap-0:2.3.10-1.el6.x86_64
libcrypto.so.10()(64bit) is needed by (installed) pyOpenSSL-0.13.1-2.el6.x86_64
libcrypto.so.10()(64bit) is needed by (installed) net-snmp-libs-1:5.5-54.el6.x86_64
libcrypto.so.10()(64bit) is needed by (installed) evolution-data-server-2.32.3-23.el6.x86_64
libcrypto.so.10()(64bit) is needed by (installed) gstreamer-plugins-bad-free-0.10.19-3.el6_5.x86_64
libcrypto.so.10()(64bit) is needed by (installed) xorg-x11-server-Xorg-1.15.0-36.el6.centos.x86_64
libcrypto.so.10()(64bit) is needed by (installed) hplip-libs-3.14.6-3.el6.x86_64
libcrypto.so.10()(64bit) is needed by (installed) ntpdate-4.2.6p5-5.el6.centos.x86_64
libcrypto.so.10()(64bit) is needed by (installed) ntp-4.2.6p5-5.el6.centos.x86_64
libcrypto.so.10()(64bit) is needed by (installed) certmonger-0.77.5-1.el6.x86_64
libcrypto.so.10()(64bit) is needed by (installed) cyrus-sasl-2.1.23-15.el6_6.2.x86_64
libcrypto.so.10()(64bit) is needed by (installed) postfix-2:2.6.6-6.el6_5.x86_64
libcrypto.so.10()(64bit) is needed by (installed) hpijs-1:3.14.6-3.el6.x86_64
libcrypto.so.10()(64bit) is needed by (installed) ekiga-3.2.6-4.el6.x86_64
libcrypto.so.10()(64bit) is needed by (installed) gnome-vfs2-smb-2.24.2-6.el6.x86_64
libcrypto.so.10()(64bit) is needed by (installed) tcpdump-14:4.0.0-5.20090921gitdf3cb4.2.el6.x86_64
libcrypto.so.10()(64bit) is needed by (installed) vsftpd-2.2.2-14.el6.x86_64
libcrypto.so.10()(64bit) is needed by (installed) openssh-5.3p1-111.el6.x86_64
libcrypto.so.10()(64bit) is needed by (installed) openssh-server-5.3p1-111.el6.x86_64
libcrypto.so.10()(64bit) is needed by (installed) openssh-clients-5.3p1-111.el6.x86_64
libcrypto.so.10(OPENSSL_1.0.1)(64bit) is needed by (installed) pyOpenSSL-0.13.1-2.el6.x86_64
libcrypto.so.10(OPENSSL_1.0.1)(64bit) is needed by (installed) net-snmp-libs-1:5.5-54.el6.x86_64
libcrypto.so.10(OPENSSL_1.0.1)(64bit) is needed by (installed) ntpdate-4.2.6p5-5.el6.centos.x86_64
libcrypto.so.10(OPENSSL_1.0.1)(64bit) is needed by (installed) ntp-4.2.6p5-5.el6.centos.x86_64
libcrypto.so.10(OPENSSL_1.0.1)(64bit) is needed by (installed) postfix-2:2.6.6-6.el6_5.x86_64
libcrypto.so.10(OPENSSL_1.0.1)(64bit) is needed by (installed) openssh-5.3p1-111.el6.x86_64
libcrypto.so.10(OPENSSL_1.0.1)(64bit) is needed by (installed) openssh-server-5.3p1-111.el6.x86_64
libcrypto.so.10(OPENSSL_1.0.1)(64bit) is needed by (installed) openssh-clients-5.3p1-111.el6.x86_64
libcrypto.so.10(OPENSSL_1.0.1_EC)(64bit) is needed by (installed) certmonger-0.77.5-1.el6.x86_64
libcrypto.so.10(OPENSSL_1.0.1_EC)(64bit) is needed by (installed) postfix-2:2.6.6-6.el6_5.x86_64
libcrypto.so.10(OPENSSL_1.0.1_EC)(64bit) is needed by (installed) openssh-5.3p1-111.el6.x86_64
libcrypto.so.10(OPENSSL_1.0.1_EC)(64bit) is needed by (installed) openssh-server-5.3p1-111.el6.x86_64
libcrypto.so.10(OPENSSL_1.0.1_EC)(64bit) is needed by (installed) openssh-clients-5.3p1-111.el6.x86_64
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) qt-1:4.6.2-28.el6_5.x86_64
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) libssh2-1.4.2-1.el6_6.1.x86_64
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) wget-1.12-5.el6_6.1.x86_64
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) wpa_supplicant-1:0.7.3-6.el6.x86_64
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) bind-libs-32:9.8.2-0.37.rc1.el6.x86_64
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) mysql-libs-5.1.73-5.el6_6.x86_64
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) httpd-tools-2.2.15-45.el6.centos.x86_64
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) cyrus-sasl-md5-2.1.23-15.el6_6.2.x86_64
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) python-libs-2.6.6-64.el6.x86_64
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) pyOpenSSL-0.13.1-2.el6.x86_64
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) net-snmp-libs-1:5.5-54.el6.x86_64
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) gstreamer-plugins-bad-free-0.10.19-3.el6_5.x86_64
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) xorg-x11-server-Xorg-1.15.0-36.el6.centos.x86_64
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) ntpdate-4.2.6p5-5.el6.centos.x86_64
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) ntp-4.2.6p5-5.el6.centos.x86_64
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) certmonger-0.77.5-1.el6.x86_64
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) cyrus-sasl-2.1.23-15.el6_6.2.x86_64
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) postfix-2:2.6.6-6.el6_5.x86_64
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) tcpdump-14:4.0.0-5.20090921gitdf3cb4.2.el6.x86_64
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) vsftpd-2.2.2-14.el6.x86_64
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) openssh-5.3p1-111.el6.x86_64
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) openssh-server-5.3p1-111.el6.x86_64
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) openssh-clients-5.3p1-111.el6.x86_64
libssl.so.10()(64bit) is needed by (installed) qt-1:4.6.2-28.el6_5.x86_64
libssl.so.10()(64bit) is needed by (installed) libssh2-1.4.2-1.el6_6.1.x86_64
libssl.so.10()(64bit) is needed by (installed) wget-1.12-5.el6_6.1.x86_64
libssl.so.10()(64bit) is needed by (installed) wpa_supplicant-1:0.7.3-6.el6.x86_64
libssl.so.10()(64bit) is needed by (installed) mysql-libs-5.1.73-5.el6_6.x86_64
libssl.so.10()(64bit) is needed by (installed) httpd-tools-2.2.15-45.el6.centos.x86_64
libssl.so.10()(64bit) is needed by (installed) gnome-vfs2-2.24.2-6.el6.x86_64
libssl.so.10()(64bit) is needed by (installed) ptlib-2.6.5-3.el6.x86_64
libssl.so.10()(64bit) is needed by (installed) opal-3.6.6-4.el6.x86_64
libssl.so.10()(64bit) is needed by (installed) python-libs-2.6.6-64.el6.x86_64
libssl.so.10()(64bit) is needed by (installed) python-ldap-0:2.3.10-1.el6.x86_64
libssl.so.10()(64bit) is needed by (installed) pyOpenSSL-0.13.1-2.el6.x86_64
libssl.so.10()(64bit) is needed by (installed) evolution-data-server-2.32.3-23.el6.x86_64
libssl.so.10()(64bit) is needed by (installed) gstreamer-plugins-bad-free-0.10.19-3.el6_5.x86_64
libssl.so.10()(64bit) is needed by (installed) postfix-2:2.6.6-6.el6_5.x86_64
libssl.so.10()(64bit) is needed by (installed) ekiga-3.2.6-4.el6.x86_64
libssl.so.10()(64bit) is needed by (installed) gnome-vfs2-smb-2.24.2-6.el6.x86_64
libssl.so.10()(64bit) is needed by (installed) vsftpd-2.2.2-14.el6.x86_64
libssl.so.10(libssl.so.10)(64bit) is needed by (installed) qt-1:4.6.2-28.el6_5.x86_64
libssl.so.10(libssl.so.10)(64bit) is needed by (installed) wget-1.12-5.el6_6.1.x86_64
libssl.so.10(libssl.so.10)(64bit) is needed by (installed) wpa_supplicant-1:0.7.3-6.el6.x86_64
libssl.so.10(libssl.so.10)(64bit) is needed by (installed) mysql-libs-5.1.73-5.el6_6.x86_64
libssl.so.10(libssl.so.10)(64bit) is needed by (installed) httpd-tools-2.2.15-45.el6.centos.x86_64
libssl.so.10(libssl.so.10)(64bit) is needed by (installed) python-libs-2.6.6-64.el6.x86_64
libssl.so.10(libssl.so.10)(64bit) is needed by (installed) pyOpenSSL-0.13.1-2.el6.x86_64
libssl.so.10(libssl.so.10)(64bit) is needed by (installed) postfix-2:2.6.6-6.el6_5.x86_64
libssl.so.10(libssl.so.10)(64bit) is needed by (installed) vsftpd-2.2.2-14.el6.x86_64
openssl is needed by (installed) postfix-2:2.6.6-6.el6_5.x86_64
记录好依赖的这两个库文件

libcrypto.so.10
libssl.so.10
然后忽略依赖删除:

rpm -e –nodeps openssl-1.0.1e-42.el6.x86_64
做新的软连接映射:

[root@test0823 openssl-1.0.2h]# ln -s /root/openssl-1.0.2h/libssl.so.1.0.0 /usr/lib64/libssl.so.10
[root@test0823 openssl-1.0.2h]# ln -s /root/openssl-1.0.2h/libcrypto.so.1.0.0 /usr/lib64/libcrypto.so.10
如果是最后删除的openssl,那么还需要注意openssl软连接的情况,如下:

[root@test0823 apps]# ln -s /root/openssl-1.0.2h/apps/openssl /usr/bin/openssl
然后再次扫描已经没有SSL相关漏洞了。

阿里云APACHE部署ssl配置详解

阿里云后台申请免费SSL
上传文件后审核通过!下载apache ssl文件
解压

阿里云SSL证书文件
阿里云SSL证书文件

2.3安装SSL证书 
1、找到apache安装目录下conf.d目录中的ssl.conf文件,若没有,则apache没有编译SSL
2、打开apache安装目录下conf.d目录中的ssl.conf文件
在配置文件中查找以下配置语句:
# 添加 SSL 协议支持协议,去掉不安全的协议
SSLProtocol TLSv1 TLSv1.1 TLSv1.2
# 证书公钥配置
SSLCertificateFile cert/public.pem
# 证书私钥配置
SSLCertificateKeyFile cert/214015281090324.key
# 证书链配置,如果该属性开头有 ‘#’字符,请删除掉
SSLCertificateChainFile cert/chain.pem
配置conf.d/ssl.conf
DocumentRoot “/var/www/html”
ServerName www.domain.com

在httpd.cond 里面添加跳转
RedirectMatch permanent ^/(.*) https://www.domain.com/$1

到此重启 service httpd restart 完成跳转

apache部署ssl证书启用https

Apache 2.x 证书部署
1.1 获取证书
Apache文件夹内获得证书文件 1_root_bundle.crt,2_www.domain.com_cert.crt 和私钥文件 3_www.domain.com.key,
1_root_bundle.crt 文件包括一段证书代码 “—–BEGIN CERTIFICATE—–”和“—–END CERTIFICATE—–”,
2_www.domain.com_cert.crt 文件包括一段证书代码 “—–BEGIN CERTIFICATE—–”和“—–END CERTIFICATE—–”,
3_www.domain.com.key 文件包括一段私钥代码“—–BEGIN RSA PRIVATE KEY—–”和“—–END RSA PRIVATE KEY—–”。
1.2 证书安装
编辑Apache根目录下 conf/httpd.conf 文件,
找到 #LoadModule ssl_module modules/mod_ssl.so 和 #Include conf/extra/httpd-ssl.conf,去掉前面的#号注释;
编辑Apache根目录下 conf/extra/httpd-ssl.conf 文件,修改如下内容:

DocumentRoot “/var/www/html”
ServerName www.domain.com
SSLEngine on
SSLCertificateFile /usr/local/apache/conf/2_www.domain.com_cert.crt
SSLCertificateKeyFile /usr/local/apache/conf/3_www.domain.com.key
SSLCertificateChainFile /usr/local/apache/conf/1_root_bundle.crt

配置完成后,重新启动 Apache 就可以使用https://www.domain.com来访问了。
注:
配置文件参数 说明
SSLEngine on 启用SSL功能
SSLCertificateFile 证书文件
SSLCertificateKeyFile 私钥文件
SSLCertificateChainFile 证书链文件

RSync实现文件备份同步

rsync实现网站的备份,文件的同步,不同系统的文件的同步,如果是windows的话,需要windows版本cwrsync]

一、什么是rsync

  rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。 rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另外它还是免费的软件。
  rsync 包括如下的一些特性:

  能更新整个目录和树和文件系统;
  有选择性的保持符号链链、硬链接、文件属于、权限、设备以及时间等;
  对于安装来说,无任何特殊权限要求;
  对于多个文件来说,内部流水线减少文件等待的延时;
  能用rsh、ssh 或直接端口做为传输入端口;
  支持匿名rsync 同步文件,是理想的镜像工具;

二、架设rsync服务器

  架设rsync 服务器比较简单,写一个配置文件rsyncd.conf 。文件的书写也是有规则的,我们可以参照rsync.samba.org 上的文档来做。当然我们首先要安装好rsync这个软件才行;

A、rsync的安装;

  获取rsync

  rysnc的官方网站:http://rsync.samba.org/可以从上面得到最新的版本。目前最新版是3.05。当然,因为rsync是一款如此有用的软件,所以很多Linux的发行版本都将它收录在内了。

  软件包安装

  # sudo apt-get install rsync 注:在debian、ubuntu 等在线安装方法;
  # yum install rsync 注:Fedora、Redhat 等在线安装方法;
  # rpm -ivh rsync 注:Fedora、Redhat 等rpm包安装方法;

  其它Linux发行版,请用相应的软件包管理方法来安装。

  源码包安装

  tar xvf rsync-xxx.tar.gz
  cd rsync-xxx
  ./configure –prefix=/usr ;make ;make install 注:在用源码包编译安装之前,您得安装gcc等编译开具才行;
    
B、配置文件

  rsync的主要有以下三个配置文件rsyncd.conf(主配置文件)、rsyncd.secrets(密码文件)、rsyncd.motd(rysnc服务器信息)

  服务器配置文件(/etc/rsyncd.conf),该文件默认不存在,请创建它。

  具体步骤如下:

  #touch /etc/rsyncd.conf #创建rsyncd.conf,这是rsync服务器的配置文件。
  #touch /etc/rsyncd.secrets #创建rsyncd.secrets ,这是用户密码文件。
  #chmod 600 /etc/rsyncd/rsyncd.secrets #将rsyncd.secrets这个密码文件的文件属性设为root拥有, 且权限要设为600, 否则无法备份成功!
  #touch /etc/rsyncd.motd

  下一就是我们修改rsyncd.conf和rsyncd.secrets和rsyncd.motd文件的时候了。

  设定/etc/rsyncd.conf

  rsyncd.conf是rsync服务器主要配置文件。我们先来个简单的示例,后面在详细说明各项作用。

  比如我们要备份服务器上的/home和/opt,在/home中我想把easylife和samba目录排除在外;

  # Distributed under the terms of the GNU General Public License v2
  # Minimal configuration file for rsync daemon
  # See rsync(1) and rsyncd.conf(5) man pages for help

  # This line is required by the /etc/init.d/rsyncd script
  pid file = /var/run/rsyncd.pid
  port = 873
  address = 192.168.1.171
  #uid = nobody
  #gid = nobody
  uid = root
  gid = root

  use chroot = yes
  read only = yes

  #limit access to private LANs
  hosts allow=192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0
  hosts deny=*

  max connections = 5
  motd file = /etc/rsyncd.motd

  #This will give you a separate log file
  #log file = /var/log/rsync.log

  #This will log every file transferred – up to 85,000+ per user, per sync
  #transfer logging = yes

  log format = %t %a %m %f %b
  syslog facility = local3
  timeout = 300

  [rhel4home]
  path = /home
  list=yes
  ignore errors
  auth users = root
  secrets file = /etc/rsyncd.secrets
  comment = This is RHEL 4 data
  exclude = easylife/ samba/

  [rhel4opt]
  path = /opt
  list=no
  ignore errors
  comment = This is RHEL 4 opt
  auth users = easylife
  secrets file = /etc/rsyncd/rsyncd.secrets

  注:关于auth users是必须在服务器上存在的真实的系统用户,如果你想用多个用户以,号隔开,比如auth users = easylife,root

  设定密码文件

  密码文件格式很简单,rsyncd.secrets的内容格式为:

  用户名:密码

  我们在例子中rsyncd.secrets的内容如下类似的;在文档中说,有些系统不支持长密码,自己尝试着设置一下吧。

  easylife:keer
  root:mike

  chown root.root rsyncd.secrets  #修改属主
  chmod 600 rsyncd.secrets #修改权限

  注:1、将rsyncd.secrets这个密码文件的文件属性设为root拥有, 且权限要设为600, 否则无法备份成功! 出于安全目的,文件的属性必需是只有属主可读。
    2、这里的密码值得注意,为了安全你不能把系统用户的密码写在这里。比如你的系统用户easylife密码是000000,为了安全你可以让rsync中的easylife为keer。这和samba的用户认证的密码原理是差不多的。

  设定rsyncd.motd 文件;

   它是定义rysnc服务器信息的,也就是用户登录信息。比如让用户知道这个服务器是谁提供的等;类似ftp服务器登录时,我们所看到的 linuxsir.org ftp ……。 当然这在全局定义变量时,并不是必须的,你可以用#号注掉,或删除;我在这里写了一个 rsyncd.motd的内容为:

  ++++++++++++++++++++++++++++++++++++++++++++++
  Welcome to use the mike.org.cn rsync services!
2002——2009
  ++++++++++++++++++++++++++++++++++++++++++++++

三、rsyncd.conf服务器的配置详解

A、全局定义

  在rsync 服务器中,全局定义有几个比较关健的,根据我们前面所给的配置文件 rsyncd.conf 文件;

  pid file = /var/run/rsyncd.pid 注:告诉进程写到 /var/run/rsyncd.pid 文件中;
  port = 873 注:指定运行端口,默认是873,您可以自己指定;
  address = 192.168.1.171 注:指定服务器IP地址
  uid = nobody
  gid = nobdoy

   注:服务器端传输文件时,要发哪个用户和用户组来执行,默认是nobody。 如果用nobody 用户和用户组,可能遇到权限问题,有些文件从服务器上拉不下来。所以我就偷懒,为了方便,用了root 。不过您可以在定义要同步的目录时定义的模块中指定用户来解决权限的问题。

  use chroot = yes

   注:用chroot,在传输文件之前,服务器守护程序在将chroot 到文件系统中的目录中,这样做的好处是可能保护系统被安装漏洞侵袭的可能。缺点是需要超级用户权限。另外对符号链接文件,将会排除在外。也就是说,你在 rsync服务器上,如果有符号链接,你在备份服务器上运行客户端的同步数据时,只会把符号链接名同步下来,并不会同步符号链接的内容;这个需要自己来尝 试

  read only = yes

  注:read only 是只读选择,也就是说,不让客户端上传文件到服务器上。还有一个 write only选项,自己尝试是做什么用的吧;

  #limit access to private LANs
  hosts allow=192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0

  注:在您可以指定单个IP,也可以指定整个网段,能提高安全性。格式是ip 与ip 之间、ip和网段之间、网段和网段之间要用空格隔开;

  max connections = 5

  注:客户端最多连接数

  motd file = /etc/rsyncd/rsyncd.motd

  注:motd file 是定义服务器信息的,要自己写 rsyncd.motd 文件内容。当用户登录时会看到这个信息。比如我写的是:

  ++++++++++++++++++++++++++++++++++++++++++++++
  Welcome to use the mike.org.cn rsync services!
2002——2009
  ++++++++++++++++++++++++++++++++++++++++++++++

  log file = /var/log/rsync.log

  注:rsync 服务器的日志;

  transfer logging = yes

  注:这是传输文件的日志

  log format = %t %a %m %f %b
  syslog facility = local3
  timeout = 300

B、模块定义

   模块定义什么呢?主要是定义服务器哪个目录要被同步。每个模块都要以[name]形式。这个名字就是在rsync 客户端看到的名字,其实有点象Samba服务器提供的共享名。而服务器真正同步的数据是通过path 指定的。我们可以根据自己的需要,来指定多个模块。每个模块要指定认证用户,密码文件、但排除并不是必须的

  下面是前面配置文件模块的例子:

  [rhel4home] #模块它为我们提供了一个链接的名字,在本模块中链接到了/home目录;要用[name] 形式

  path = /home #指定文件目录所在位置,这是必须指定的
  auth users = root #认证用户是root ,是必须在服务器上存在的用户
  list=yes #list 意思是把rsync 服务器上提供同步数据的目录在服务器上模块是否显示列出来。默认是yes 。如果你不想列出来,就no ;如果是no是比较安全的,至少别人不知道你的服务器上提供了哪些目录。你自己知道就行了;
  ignore errors #忽略IO错误
  secrets file = /etc/rsyncd.secrets #密码存在哪个文件
  comment = linuxsir home data #注释可以自己定义
  exclude = beinan/ samba/

  注:exclude是排除的意思,也就是说,要把/home目录下的easylife和samba排除在外; easylife/和samba/目录之间有空格分开

  [rhel4opt]
  path = /opt
  list=no
  comment = optdir
  auth users = beinan
  secrets file = /etc/rsyncd/rsyncd.secrets
  ignore errors

四、启动rsync服务器及防火墙的设置

  启动rsync服务器相当简单,有以下几种方法

  A、–daemon参数方式,是让rsync以服务器模式运行

  #/usr/bin/rsync –daemon –config=/etc/rsyncd/rsyncd.conf  #–config用于指定rsyncd.conf的位置,如果在/etc下可以不写

  B、xinetd方式

  修改services加入如下内容
  # nano -w /etc/services

  rsync  873/tcp  # rsync
  rsync  873/udp  # rsync

  这一步一般可以不做,通常都有这两行(我的RHEL4和GENTOO默认都有)。修改的目的是让系统知道873端口对应的服务名为rsync。如没有的话就自行加入。

  设定 /etc/xinetd.d/rsync, 简单例子如下:

  # default: off
  # description: The rsync server is a good addition to am ftp server, as it \
  # allows crc checksumming etc.
  service rsync
  {
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = –daemon
log_on_failure += USERID
  }

  上述, 主要是要打开rsync這個daemon, 一旦有rsync client要连接時, xinetd会把它转介給 rsyncd(port 873)。然后service xinetd restart, 使上述设定生效.

  rsync服务器和防火墙

  Linux 防火墙是用iptables,所以我们至少在服务器端要让你所定义的rsync 服务器端口通过,客户端上也应该让通过。

  #iptables -A INPUT -p tcp -m state –state NEW -m tcp –dport 873 -j ACCEPT
  #iptables -L 查看一下防火墙是不是打开了 873端口

  如果你不太懂防火墙的配置,可以先service iptables stop 将防火墙关掉。当然在生产环境这是很危险的,做实验才可以这么做哟!
五、通过rsync客户端来同步数据

A、语法详解
 
  在配置完rsync服务器后,就可以从客户端发出rsync命令来实现各种同步的操作。rsync有很多功能选项,下面就对介绍一下常用的选项:

  rsync的命令格式可以为:
  
  1. rsync [OPTION]… SRC [SRC]… [USER@]HOST:DEST
  2. rsync [OPTION]… [USER@]HOST:SRC DEST
  3. rsync [OPTION]… SRC [SRC]… DEST
  4. rsync [OPTION]… [USER@]HOST::SRC [DEST]
  5. rsync [OPTION]… SRC [SRC]… [USER@]HOST::DEST
  6. rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST]

  rsync有六种不同的工作模式:

  1. 拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号”:”分隔符时就启动这种工作模式。
  2.使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号”:”分隔符时启动该模式。
  3.使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号”:”分隔符时启动该模式。
  4. 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含”::”分隔符时启动该模式。
  5. 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含”::”分隔符时启动该模式。
  6. 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。
  -a 以archive模式操作、复制目录、符号连接 相当于-rlptgoD

  rsync中的参数

  -r 是递归
  -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件;
  -z 传输时压缩;
  -P 传输进度;
  -v 传输时的进度等信息,和-P有点关系,自己试试。可以看文档;
  -e ssh的参数建立起加密的连接。
  -u只进行更新,防止本地新文件被重写,注意两者机器的时钟的同时
  –progress是指显示出详细的进度情况
  –delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致
  –password-file=/password/path/file来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读。

B、一些实例

  B1、列出rsync 服务器上的所提供的同步内容;

  首先:我们看看rsync服务器上提供了哪些可用的数据源

  # rsync –list-only root@192.168.145.5::
  ++++++++++++++++++++++++++++++++++++++++++++++
  Welcome to use the mike.org.cn rsync services!
   2002——2009
  ++++++++++++++++++++++++++++++++++++++++++++++

  rhel4home This is RHEL 4 data

   注:前面是rsync所提供的数据源,也就是我们在rsyncd.conf中所写的[rhel4home]模块。而“This is RHEL 4 data”是由[rhel4home]模块中的 comment = This is RHEL 4 data 提供的;为什么没有把rhel4opt数据源列出来呢?因为我们在[rhel4opt]中已经把list=no了。

  $ rsync –list-only root@192.168.145.5::::rhel4home

  ++++++++++++++++++++++++++++++++++++++++++++++
  Welcome to use the mike.org.cn rsync services!
   2002——2009
  ++++++++++++++++++++++++++++++++++++++++++++++

  Password:
  drwxr-xr-x 4096 2009/03/15 21:33:13 .
  -rw-r–r– 1018 2009/03/02 02:33:41 ks.cfg
  -rwxr-xr-x 21288 2009/03/15 21:33:13 wgetpaste
  drwxrwxr-x 4096 2008/10/28 21:04:05 cvsroot
  drwx—— 4096 2008/11/30 16:30:58 easylife
  drwsr-sr-x 4096 2008/09/20 22:18:05 giddir
  drwx—— 4096 2008/09/29 14:18:46 quser1
  drwx—— 4096 2008/09/27 14:38:12 quser2
  drwx—— 4096 2008/11/14 06:10:19 test
  drwx—— 4096 2008/09/22 16:50:37 vbird1
  drwx—— 4096 2008/09/19 15:28:45 vbird2

  后面的root@ip中,root是指定密码文件中的用户名,之后的::rhel4home这是rhel4home模块名
  B2、rsync客户端同步数据;

  #rsync -avzP root@192.168.145.5::rhel4home rhel4home
  Password: 这里要输入root的密码,是服务器端rsyncd.secrets提供的。在前面的例子中我们用的是mike,输入的密码并不回显,输好就回车。

   注: 这个命令的意思就是说,用root用户登录到服务器上,把rhel4home数据,同步到本地当前目录rhel4home上。当然本地的目录是可以你自己 定义的。如果当你在客户端上当前操作的目录下没有rhel4home这个目录时,系统会自动为你创建一个;当存在rhel4home这个目录中,你要注意 它的写权限。

  #rsync -avzP –delete linuxsir@linuxsir.org::rhel4home rhel4home

   这回我们引入一个–delete 选项,表示客户端上的数据要与服务器端完全一致,如果 linuxsirhome目录中有服务器上不存在的文件,则删除。最终目的是让linuxsirhome目录上的数据完全与服务器上保持一致;用的时候要 小心点,最好不要把已经有重要数所据的目录,当做本地更新目录,否则会把你的数据全部删除;

  設定 rsync client

  设定密码文件

  #rsync -avzP –delete –password-file=rsyncd.secrets root@192.168.145.5::rhel4home rhel4home

  这次我们加了一个选项 –password-file=rsyncd.secrets,这是当我们以root用户登录rsync服务器同步数据时,密码将读取rsyncd.secrets这个文件。这个文件内容只是root用户的密码。我们要如下做;

  # touch rsyncd.secrets
  # chmod 600 rsyncd.secrets
  # echo “mike”> rsyncd.secrets

  # rsync -avzP –delete –password-file=rsyncd.secrets root@192.168.145.5::rhel4home rhel4home

  注:这里需要注意的是这份密码文件权限属性要设得只有属主可读。

    这样就不需要密码了;其实这是比较重要的,因为服务器通过crond 计划任务还是有必要的;

  B3、让rsync客户端自动与服务器同步数据

   服务器是重量级应用,所以数据的网络备份还是极为重要的。我们可以在生产型服务器上配置好rsync 服务器。我们可以把一台装有rysnc机器当做是备份服务器。让这台备份服务器,每天在早上4点开始同步服务器上的数据;并且每个备份都是完整备份。有时 硬盘坏掉,或者服务器数据被删除,完整备份还是相当重要的。这种备份相当于每天为服务器的数据做一个镜像,当生产型服务器发生事故时,我们可以轻松恢复数 据,能把数据损失降到最低;是不是这么回事??

  step1:创建同步脚本和密码文件
  
  #mkdir /etc/cron.daily.rsync
  #cd /etc/cron.daily.rsync
  #touch rhel4home.sh rhel4opt.sh
  #chmod 755 /etc/cron.daily.rsync/*.sh
  #mkdir /etc/rsyncd/
  #touch /etc/rsyncd/rsyncrhel4root.secrets
  #touch /etc/rsyncd/rsyncrhel4easylife.secrets
  #chmod 600 /etc/rsyncd/rsync.*

   注: 我们在 /etc/cron.daily/中创建了两个文件rhel4home.sh和rhel4opt.sh ,并且是权限是755的。创建了两个密码文件root用户用的是rsyncrhel4root.secrets ,easylife用户用的是 rsyncrhel4easylife.secrets,权限是600;

  我们编辑rhel4home.sh,内容是如下的:

  #!/bin/sh
  #backup 192.168.145.5:/home
  /usr/bin/rsync -avzP –password-file=/etc/rsyncd/rsyncrhel4root.password root@192.168.145.5::rhel4home /home/rhel4homebak/$(date +’%m-%d-%y’)

  我们编辑 rhel4opt.sh ,内容是:

  #!/bin/sh
  #backup 192.168.145.5:/opt
  /usr/bin/rsync -avzP –password-file=/etc/rsyncd/rsyncrhel4easylife.secrets easylife@192.168.145.5::rhel4opt /home/rhel4hoptbak/$(date +’%m-%d-%y’)

  注:你可以把rhel4home.sh和rhel4opt.sh的内容合并到一个文件中,比如都写到rhel4bak.sh中;

  接着我们修改 /etc/rsyncd/rsyncrhel4root.secrets和rsyncrhel4easylife.secrets的内容;

  # echo “mike” > /etc/rsyncd/rsyncrhel4root.secrets
  # echo “keer”> /etc/rsyncd/rsyncrhel4easylife.secrets

   然后我们再/home目录下创建rhel4homebak 和rhel4optbak两个目录,意思是服务器端的rhel4home数据同步到备份服务器上的/home/rhel4homebak 下,rhel4opt数据同步到 /home/rhel4optbak/目录下。并按年月日归档创建目录;每天备份都存档;

  #mkdir /home/rhel4homebak
  #mkdir /home/rhel4optbak

  step2:修改crond服务器的配置文件 加入到计划任务

  #crontab -e

  加入下面的内容:

  # Run daily cron jobs at 4:10 every day backup rhel4 data:
  10 4 * * * /usr/bin/run-parts /etc/cron.daily.rsync 1> /dev/null

  注:第一行是注释,是说明内容,这样能自己记住。
    第二行表示在每天早上4点10分的时候,运行 /etc/cron.daily.rsync 下的可执行脚本任务;
    
  配置好后,要重启crond 服务器;

  # killall crond 注:杀死crond 服务器的进程;
  # ps aux |grep crond 注:查看一下是否被杀死;
  # /usr/sbin/crond 注:启动 crond 服务器;
  # ps aux |grep crond 注:查看一下是否启动了?
  root 3815 0.0 0.0 1860 664 ? S 14:44 0:00 /usr/sbin/crond
  root 3819 0.0 0.0 2188 808 pts/1 S+ 14:45 0:00 grep crond

六、FAQ

  Q:如何通过ssh进行rsync,而且无须输入密码?

  A:可以通过以下几个步骤

  1. 通过ssh-keygen在server A上建立SSH keys,不要指定密码,你会在~/.ssh下看到identity和identity.pub文件
  2. 在server B上的home目录建立子目录.ssh
  3. 将A的identity.pub拷贝到server B上
  4. 将identity.pub加到~[user b]/.ssh/authorized_keys
  5. 于是server A上的A用户,可通过下面命令以用户B ssh到server B上了。e.g. ssh -l userB serverB。这样就使server A上的用户A就可以ssh以用户B的身份无需密码登陆到server B上了。

  Q:如何通过在不危害安全的情况下通过防火墙使用rsync?
  
  A:解答如下:

   这通常有两种情况,一种是服务器在防火墙内,一种是服务器在防火墙外。无论哪种情况,通常还是使用ssh,这时最好新建一个备份用户,并且配置sshd 仅允许这个用户通过RSA认证方式进入。如果服务器在防火墙内,则最好限定客户端的IP地址,拒绝其它所有连接。如果客户机在防火墙内,则可以简单允许防 火墙打开TCP端口22的ssh外发连接就ok了。

  Q:我能将更改过或者删除的文件也备份上来吗?

  A:当然可 以。你可以使用如:rsync -other -options -backupdir = ./backup-2000-2-13 …这样的命令来实现。这样如果源文件:/path/to/some/file.c改变了,那么旧的文件就会被移到./backup- 2000-2-13/path/to/some/file.c,这里这个目录需要自己手工建立起来

  Q:我需要在防火墙上开放哪些端口以适应rsync?
 
  A:视情况而定。rsync可以直接通过873端口的tcp连接传文件,也可以通过22端口的ssh来进行文件传递,但你也可以通过下列命令改变它的端口:
  
  rsync –port 8730 otherhost::
  或者
  rsync -e ‘ssh -p 2002’ otherhost:

  Q:我如何通过rsync只复制目录结构,忽略掉文件呢?
  
  A:rsync -av –include ‘*/’ –exclude ‘*’ source-dir dest-dir

  Q:为什么我总会出现”Read-only file system”的错误呢?

  A:看看是否忘了设”read only = no”了

  Q:为什么我会出现’@ERROR: invalid gid’的错误呢?

  A:rsync使用时默认是用uid=nobody;gid=nobody来运行的,如果你的系统不存在nobody组的话,就会出现这样的错误,可以试试gid = ogroup或者其它

  Q:绑定端口873失败是怎么回事?
  A:如果你不是以root权限运行这一守护进程的话,因为1024端口以下是特权端口,会出现这样的错误。你可以用–port参数来改变。

  Q:为什么我认证失败?
  A:从你的命令行看来:你用的是

  > bash$ rsync -a 144.16.251.213::test test
  > Password:
  > @ERROR: auth failed on module test
  >
  > I dont understand this. Can somebody explain as to how to acomplish this.
  > All suggestions are welcome.

  应该是没有以你的用户名登陆导致的问题,试试rsync -a max@144.16.251.213::test test

  Q: 出现以下这个讯息, 是怎么一回事?
  @ERROR: auth failed on module xxxxx
  rsync: connection unexpectedly closed (90 bytes read so far)
  rsync error: error in rsync protocol data stream (code 12) at io.c(150)

  A: 这是因为密码设错了, 无法登入成功, 请再检查一下 rsyncd.secrets 中的密码设定, 二端是否一致?

  Q: 出现以下这个讯息, 是怎么一回事?

  password file must not be other-accessible
  continuing without password file
  Password:

  A: 这表示 rsyncd.secrets 的档案权限属性不对, 应设为 600。请下 chmod 600 rsyncd.secrets

  Q: 出现以下这个讯息, 是怎么一回事?

  @ERROR: chroot failed
  rsync: connection unexpectedly closed (75 bytes read so far)
  rsync error: error in rsync protocol data stream (code 12) at io.c(150)

  A: 这通常是您的 rsyncd.conf 中的 path 路径所设的那个目录并不存在所致.请先用 mkdir开设好备份目录.

完!

destoon文件目录详解

这是目前找到最详细的Destoon程序文件及目录说明
( /代表的是目录 ├ 代表的是文件 )

/about关于我们页面
├index.html关于我们
├copyright.html版权隐私
├contact.html联系方式
├agreement.html用户协议
/ad广告
├index.php广告入口
/admin系统核心后台管理
/image后台风格
/template后台模板
├404.tpl.php404日志管理模板文件
├admin.tpl.php管理员管理-管理员管理模板文件
├admin_add.tpl.php管理员管理-添加管理员模板文件
├admin_edit.tpl.php管理员管理-修改管理员模板文件
├admin_right.tpl.php管理员管理-权限&面板模板文件
├area.tpl.php地区管理-地区管理模板文件
├area_add.tpl.php地区管理-地区添加模板文件
├banip.tpl.php禁止IP-IP禁止模板文件
├banip_ban.tpl.php禁止IP-IP解锁模板文件
├banword.tpl.php词语过滤模板文件
├category.tpl.phpXX分类-管理分类模板文件
├category_add.tpl.phpXX分类-添加分类模板文件
├category_copy.tpl.phpXX分类-分类复制模板文件
├category_edit.tpl.phpXX分类-分类修改模板文件
├city.tpl.php城市分站-分站管理模板文件
├city_edit.tpl.php城市分站-分站修改模板文件
├count.tpl.php系统首页-统计信息模板文件
├data.tpl.php数据维护-数据导入模板文件
├data_config.tpl.php数据维护-数据导入-配置修改模板文件
├data_view.tpl.php新数据模板文件
├database.tpl.php数据维护-数据库备份模板文件
├database_comment.tpl.php数据维护-修改表注释模板文件
├database_execute.tpl.php数据维护-执行SQL模板文件
├database_import.tpl.php数据维护-数据库恢复模板文件
├database_move.tpl.php数据维护-数据互转模板文件
├database_open.tpl.php数据维护-数据库恢复模板文件
├database_process.tpl.php数据维护-显示进程模板文件
├database_replace.tpl.php数据维护-备份文件内容替换模板文件
├dialog.tpl.php提示信息模板文件
├doctor.tpl.php系统体检模板文件
├fetch.tpl.php单页采编-采编规则模板文件
├fetch_edit.tpl.php单页采编-添加规则模板文件
├fields.tpl.phpXX模块设置-定义字段-管理字段模板文件
├fields_add.tpl.phpXX模块设置-定义字段-添加字段模板文件
├fields_edit.tpl.phpXX模块设置-定义字段-修改字段模板文件
├footer.tpl.php公共页脚模板文件
├header.tpl.php公共页头模板文件
├index.tpl.php后台首页框架模板文件
├ip.tpl.phpip转地址模板文件
├keylink.tpl.phpXX模块设置-管理链接模板文件
├keyword.tpl.php搜索记录模板文件
├left.tpl.php后台左侧分页模板文件
├log.tpl.php后台日志模板文件
├login.tpl.php后台登录模板文件
├main.tpl.php系统首页模板文件
├md5.tpl.php文件校验结果模板文件
├md5_add.tpl.php添加文件校验模板文件
├menu.tpl.php右上角菜单模板文件
├module.tpl.php模块管理模板文件
├module_add.tpl.php添加模块模板文件
├module_edit.tpl.php修改模块模板文件
├msg.tpl.php系统提示信息模板文件
├mymenu.tpl.php定义面板模板文件
├password.tpl.php修改密码模板文件
├product.tpl.php
├property.tpl.php
├property_edit.tpl.php
├question.tpl.php问题验证模板文件
├repeat.tpl.php重名检测模板文件
├scan.tpl.php木马扫描模板文件
├search.tpl.php后台搜索模板文件
├setting.tpl.php网站设置模板文件
├side.tpl.php侧边栏模板文件
├skin.tpl.php模板风格-风格管理模板文件
├skin_add.tpl.php模板风格-风格管理-添加css模板文件
├skin_edit.tpl.php模板风格-风格管理-修改css模板文件
├tag.tpl.php模板风格-标签向导模板文件
├tag_dict.tpl.php
├tag_preview.tpl.php模板风格-标签向导-标签预览模板文件
├template.tpl.php模板风格-模板管理模板文件
├template_add.tpl.php模板风格-模板管理-添加模板模板文件
├template_edit.tpl.php模板风格-模板管理-修改模板模板文件
├type.tpl.php分类管理模板文件
├upload.tpl.php上传记录-选择分表模板文件
├upload_part.tpl.php上传记录-上传记录模板文件
├word.tpl.php编辑助手模板文件

├404.inc.php404日志配置文件
├admin.class.php后台sql操作配置文件
├admin.inc.php管理员管理配置文件
├admin_check.inc.php后台权限判断配置文件
├area.inc.php地区管理配置文件
├banip.inc.php禁止IP管理配置文件
├banword.inc.php词语过滤管理配置文件
├category.inc.phpXX分类管理配置文件
├city.inc.php城市分站配置文件
├config.inc.php后台管理配置文件
├data.inc.php数据维护-数据导入配置文件
├database.inc.php数据维护备份配置文件
├destoon.inc.php系统信息配置文件
├doctor.inc.php系统体检配置文件
├fetch.inc.php单页采编配置文件
├fields.inc.phpXX模块设置-定义字段配置文件
├global.func.php后台全局函数配置文件
├html.inc.php站点更新配置文件
├index.inc.php系统首页配置文件
├ip.inc.phpIP配置文件
├keylink.inc.phpXX模块设置-管理链接配置文件
├keyword.inc.php搜索记录配置文件
├log.inc.php后台日志配置文件
├login.inc.php后台登录配置文件
├logout.inc.php后台退出配置文件
├md5.inc.php木马扫描-文件校验配置文件
├menu.inc.php后台菜单配置文件
├module.inc.php模块管理配置文件
├mymenu.inc.php自定义面板配置文件
├property.inc.php
├question.inc.php问题验证配置文件
├repeat.inc.php重名检测配置文件
├scan.inc.php木马扫描-木马扫描配置文件
├search.inc.php后台搜索配置文件
├setting.inc.php基本设置配置文件
├skin.inc.php模板风格-风格管理配置文件
├split.inc.php
├tag.inc.php模板风格-标签向导配置文件
├template.inc.php模板风格配置文件
├type.inc.php
├unzip.class.phpzip解压
├update.inc.php系统更新配置文件
├upload.inc.php上传记录配置文件
├word.inc.php编辑助手配置文件

/announce
/api系统及第三方接口
/kf在线客服
/map电子地图
/oauth一键登录
/pay支付接口
/stats第三方统计
/trade担保交易
/ucenterUCenter
/archiver档案文件
/brand品牌
/buy求购
/comment用户
/company公司
/down下载
/exhibit展会
/extend扩展
/feedrss订阅
/file文件
├backup数据库备份
├cache缓存
├captcha验证码字体
├chat聊天记录
├config配置
├data导数据导入
├email邮件列表
├flashFlash文件
├font中文字体
├image公用图片
├ipdataIP数据库
├log日志
├md5MD5镜像
├mobile手机列表
├scriptjavascript
├sessionSESSION
├setting配置数据
├temp临时目录
├update系统更新
├upload上传文件
/gift积分换礼
/group团购
/guestbook留言本
/include核心类库
├bmp.func.php缩略图
├cache_eaccelerator.class.php缓存加速
├cache_file.class.php生成缓存文件 $dc = new dcache;$dc->pre;$dc->time;
├cache_memcache.class.phpmemcache缓存文件
├cache_shmop.class.phpshmop缓存文件
├cache_xcache.class.phpxcache缓存文件
├cache.func.php从数据库查询到数据并写入缓存
├captcha.class.php验证码
├city.inc.php城市
├convert.func.php字符转义
├db_access.class.phpaccess数据库
├db_mssql.class.phpmssql数据库
├db_mysql.class.phpmysql数据库
├db_mysqli.class.phpmysqli数据库
├db_mysqlirw.class.php读取mysqli缓存数据库
├db_mysqlrw.class.php读取mysql缓存数据库
├defend.inc.php防护配置文件
├fields.func.php字段函数文件
├file.func.php文件及文件夹的操作函数
├ftp.class.phpftp类文件
├global.func.php全局函数
├image.class.php图像相关类(包括验证码)
├index.htm.php引导后台首页
├ip.func.phpip相关类
├mail.func.php邮件相关函数
├module.func.php模块函数文件
├post.func.phppost传递验证
├property.func.php财务函数文件
├remote.class.php文件转存类
├rewrite.inc.php重写相关
├seo.inc.phpseo相关
├session.class.phpsession
├sphinx.class.phpsphinx
├sql.func.phpsql一些方法
├tag.func.php标签
├template.func.php生成模板
├tree.class.php树函数
├type.class.php类型函数
├update.inc.php更新点击文件
├upload.class.php上传类
/install安装程序
/invest招商
/jc集采
/job人才
/know知道
/lang语言包
/link友情链接
/mall商城
/member会员
/news咨询
/photo图库
/poll行业票选
/quote行情
/sell供应
/module功能模块
/article文章模块
/brand品牌模块
/buy求购模块
/company公司模块
/down下载模块
/exhibit展会模块
/extend扩展模块
/group团购模块
/info信息模块
/job人才模块
/know知道模块
/mall商城模块
/member会员模块
/photo图库模块
/quote行情模块
/sell供应模块
/special专题模块
/video视频模块
/jc集采模块 [以此为例]
/admin集采管理
/template集采管理模板
├edit.tpl.php添加修改集采模板文件
├html.tpl.php生成静态网页模板文件
├index.tpl.php生成动态网页模板文件
├move.tpl.php移动分类模板文件
├setting.tpl.php模块设置模板文件

├config.inc.php模块配置文件配置文件
├html.inc.php页面生成配置文件
├index.inc.php后台模块首页配置文件
├install.inc.php安装文件配置文件
├menu.inc.php模块菜单配置文件
├remkdir.inc.php创建模块配置文件
├setting.inc.php模块更新配置文件
├uninstall.inc.php模块卸载配置文件

├common.inc.php公共配置配置文件
├global.func.php集采公共函数
├index.htm.php静态首页
├index.inc.php动态首页配置文件
├jc.class.php集采数据库操作类
├list.htm.php静态列表页
├list.inc.php动态列表页配置文件
├my.inc.php集采函数文件配置文件
├price.inc.php询价价格配置文件
├search.inc.php搜索配置文件
├show.htm.php静态展示页
├show.inc.php动态展示页配置文件
├task.inc.php任务分配文件配置文件

/sitemap网站地图
/skin风格皮肤
├default默认风格
├default/image图片文件
├default/style.cssCSS文件
/special专题
/spread推广
/template模板文件
├default默认模板
├default/index.htm首页模板
/video视频
/vote投票
/wap手机网
/upgrade系统升级
├404.php404错误入口
├admin.php后台入口
├ajax.phpajax入口
├city.php城市获取入口
├common.inc.php系统初始化
├config.inc.php系统配置
├index.php动态首页
├index.html静态首页
├search.php搜索入口
├upload.php上传入口
├version.inc.php版本控制

CentOS上如何把Web服务器从Apache换到Nginx

阿里云服务器上, 1G内存的配置,但用了一段时间,感觉Apache有些撑不出,想了想,还是换到目前最热门的Nginx吧。 这里把整个过程记录下来,与大家共享。

Nginx简介:

Nginx是一个高性能的HTTP服务器和反向代理服务器, 最大的优点是节省资源,适用于处理高并发的请求。

1. Nginx最初是按照反向代理设计的,和Apache不同, nginx关心如何处理url,而不是文件!

2. Apache 是个基于进程处理的web服务器,如果同时有多个请求,必须要启动多个进程来处理。 这样在高负载的情况下,资源的消耗和响应的速度都会有很大的问题。 而Nginx是个基于事件(event)的异步处理模式, 下面是Nginx的一个简单的示意图,有一个Master进程,Maste进程负责系统配置,管理socket,以及管理一个或是多个Worker进程。 而Worker进程接收和处理来自用户(浏览器)的请求。一般来讲,一个worker进程可以同时处理上千个用户的连接请求。每个worker进程采用异步的,基于event的方式来处理用户的请求。对于HTML的静态页面,Nginx会自行来处理,但对于PHP,JSP, Python等动态页面,Nginx是通过FastCGI(或者SCGI,UWSGI)来把动态页面的请求交给相应的处理程序来处理。

nginx

安装Nginx

需要注意的是,在CentOS的YUM的基础的容器中,并没有nginx和php-fpm的RPM包。这两个RMP包在epel的容器中, 虽然你可以从官网下载RPM包来安装,但我个人建议,如果你的CentOS/Redhat中没有加入YUM的epel容器,还是先把这个yum容器加上去比较好,以后可以省无数的折腾。epel具体的安装方法,我在 Redhat/CentOS 软件安装之RPM和YUM 这篇文章中有介绍。

yum的容器库中加入了epel容器后,在CentOS上安装Nginx就非常简单,运行下面的命令就可以了。

1
yum install nginx

安装玩以后,会发现Nginx的配置文件放在 /etc/nginx目录下, 一般在缺省的情况下,web的root目录会在/usr/share/ngxin/html中。

安装完nginx以后,我们要测试一下是否安装成功了.

如果之前已经安装过Apache的话,先要把Apache的服务停掉。

1
2
/etc/init.d/httpd stop            #停掉apache服务
chkconfig httpd off              #开机重启后,apache服务不再启动

这时候你在浏览器上输入 http://主机ip, 如果能出现nginx的测试页面 “Test page for the nginx http server on EPEL”就说明nginx已经正常运行了。

安装php-fpm

PHP-FPM (PHP-FastCGI Process Manager) 是目前最常用的一个PHP FastCGI的实现。通俗的讲,这个模块在Nginx和PHP之间桥梁,使之可以互相通信和交换。

安装及启动过程如下:

1
2
3
4
5
yum install php-fpm
 
/etc/init.d/php-fpm start
 
chkconfig php-fpm on

下一步是确认一下,nginx和php-fpm是否已经正常运行. 执行 netstat -tunlp 命令,会看到大约如下的一个界面。

可以看到nginx在监听80端口,而php-fpm在监听9000端口。

Screenshot

设置Nginx 和 PHP-FPM

我们假定这个主机上有两个网站,一个是aaa.com, 普通的PHP站点, 一个是bbb.com,为wordpress的博客。 我们就讨论一下在这种情况下,如何设置nginx.

首先为站点建立相应的目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mkdir -p  /var/www/aaa/html
 
mkdir -p /var/www/bbb/html
 
mkdir -p /var/log/nginx/aaa
 
mkdir -p /var/log/nginx/bbb
 
chown -R nginx:adm  /var/www/aaa/html
 
chown -R nginx:adm  /var/wwww/bbb/html
 
chown -R nginx:adm  /var/log/nginx/aaa
 
chown -R nginx:adm  /var/log/nginx/bbb

为了保证整个配置更加清晰,我们尽量不修改主配置文件/etc/nginx/nginx.conf , 而是在在/etc/nginx/conf.d目录下建立两个文件,一个是aaa.conf, 一个是bbb.conf

其中aaa.conf的内容如下 (aaa是一个普通的php网站): 参考于: http://wiki.nginx.org/PHPFcgiExample

查看源代码打印帮助

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
server {
 listen 80 default_server;                 #当输入ip时,会访问aaa.com
 server_name www.aaa.com aaa.com *.aaa.com;  #这个应该是最好的写法了         
 
 access_log /var/log/nginx/aaa/access.log;   #access_log属于ngx_http_log_module的设置, 缺省level为info
 error_log /var/log/nginx/aaa/error.log;     #error_log属于core module, 缺省的level是error 
 
 location / {
    root /var/www/aaa/html;
    index index.php index.html index.htm;     #由于是PHP类型的动态页面为主,所以把index.php放在前面效率会更高些
   # try_files $uri $uri/ /index.php?$args;   #普通php网站因为没有rewrite的话,这个不需要
 }
 
 error_page 404 /404.html;         #error_page errcode uri (也就是说出现了404错误,会请求/404.html)
 location = /404.html {            #这是一个典型的location
   root /var/www/aaa/html;
 }
 
 # redirect server error pages to the static page /50x.html
 #
 error_page 500 502 503 504 /50x.html;
 location = /50x.html {
 root /var/www/aaa/html;
 }
 
 # proxy the PHP scripts to Apache listening on 127.0.0.1:80
 # 因为我们不用Nginx做Apache的反向代理,所以不需要这个
 #location ~ \.php$ {
 # proxy_pass http://127.0.0.1;
 #}
 
 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 # 这种写法可以防止把恶意程序伪装成.jpg之类的攻击,(其实有个更简单的方法,就是把php.ini中的cgi.fix_pathinfo=0,但有时候简单的修改cgi.fix_pathinfo会造成有的php脚本出错)
 
 location ~ [^/]\.php(/|$) {
   root /var/www/aaa/html;
   fastcgi_split_path_info ^(.+?\.php)(/.*)$;
    
   if (!-f $document_root$fastcgi_script_name) {
     return 404;
   }
   #try_files $uri =404;         #这个try_files说明:对于.php文件,直接执行$uri, 如果找不到这个$uri,直接给出404错误,(和 location / 定义不同!),主要是为了防止 伪装成图片的攻击  (目前看,最安全的方式,是用上面那一句话,官方推荐的)
 
   fastcgi_pass 127.0.0.1:9000;
   fastcgi_index index.php;
   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   include fastcgi_params;
 }
 
 # deny access to .htaccess files, if Apache's document root
 # concurs with nginx's one
 #
 location ~ /\.ht {
   deny all;
 }

设置完aaa.com的环境后,还需要设置bbb.com的 nginx的配置,因为bbb.com是wordpress的站点, 除了和aaa.com相同的设置外,还有些特殊的设置,具体设置请参考 http://codex.wordpress.org/Nginx

至此,从Apache向Nginx的移植基本完成。

MySQL 配置优化

安装MySQL后,配置文件my.cnf在 /MySQL安装目录/share/mysql目录中,该目录中还包含多个配置文件可供参考,有my-large.cnf ,my-huge.cnf, my-medium.cnf,my-small.cnf,分别对应大中小型数据库应用的配置。win环境下即存在于MySQL安装目录中的.ini文件。

下面列出了对性能优化影响较大的主要变量,主要分为连接请求的变量和缓冲区变量。

1. 连接请求的变量:

1) max_connections
MySQL的最大连接数,增加该值增加mysqld 要求的文件描述符的数量。如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySQL会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值。

数值过小会经常出现ERROR 1040: Too many connections错误,可以过’conn%’通配符查看当前状态的连接数量,以定夺该值的大小。

show variables like ‘max_connections’ 最大连接数

show status like ‘max_used_connections’响应的连接数

如下:

mysql> show variables like ‘max_connections‘;

+———————–+——-+

| Variable_name | Value |

+———————–+——-+

| max_connections | 256  |

+———————–+——-+

mysql> show status like ‘max%connections‘;

+———————–+——-+

| Variable_name  | Value |

+—————————-+——-+

| max_used_connections | 256|

+—————————-+——-+

max_used_connections / max_connections * 100% (理想值≈ 85%)

如果max_used_connections跟max_connections相同 那么就是max_connections设置过低或者超过服务器负载上限了,低于10%则设置过大。

2) back_log
MySQL能暂存的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用。如果MySQL的连接数据达到max_connections时,新来的请求将会被存在堆栈中,以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。

back_log值指出在MySQL暂时停止回答新请求之前的短时间内有多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接,你需要增加它,换句话说,这值对到来的TCP/IP连接的侦听队列的大小。

当观察你主机进程列表(mysql> show full processlist),发现大量264084 | unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的待连接进程时,就要加大back_log 的值了。

默认数值是50,可调优为128,对于Linux系统设置范围为小于512的整数。

3) interactive_timeout
一个交互连接在被服务器在关闭前等待行动的秒数。一个交互的客户被定义为对mysql_real_connect()使用CLIENT_INTERACTIVE 选项的客户。

默认数值是28800,可调优为7200。

2. 缓冲区变量

全局缓冲:

4) key_buffer_size
key_buffer_size指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。通过检查状态值Key_read_requests和Key_reads,可以知道key_buffer_size设置是否合理。比例key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE ‘key_read%’获得)。

key_buffer_size只对MyISAM表起作用。即使你不使用MyISAM表,但是内部的临时磁盘表是MyISAM表,也要使用该值。可以使用检查状态值created_tmp_disk_tables得知详情。

举例如下:

mysql> show variables like ‘key_buffer_size‘;

+——————-+————+

| Variable_name | Value |

+———————+————+

| key_buffer_size | 536870912 |

+———— ———-+————+

key_buffer_size为512MB,我们再看一下key_buffer_size的使用情况:

mysql> show global status like ‘key_read%‘;

+————————+————-+

| Variable_name  | Value |

+————————+————-+

| Key_read_requests| 27813678764 |

| Key_reads   | 6798830 |

+————————+————-+

一共有27813678764个索引读取请求,有6798830个请求在内存中没有找到直接从硬盘读取索引,计算索引未命中缓存的概率:

key_cache_miss_rate =Key_reads / Key_read_requests * 100%,设置在1/1000左右较好

默认配置数值是8388600(8M),主机有4GB内存,可以调优值为268435456(256MB)。

5) query_cache_size
使用查询缓冲,MySQL将查询结果存放在缓冲区中,今后对于同样的SELECT语句(区分大小写),将直接从缓冲区中读取结果。

通过检查状态值Qcache_*,可以知道query_cache_size设置是否合理(上述状态值可以使用SHOW STATUS LIKE ‘Qcache%’获得)。如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况,如果Qcache_hits的值也非常大,则表明查询缓冲使用非常频繁,此时需要增加缓冲大小;如果Qcache_hits的值不大,则表明你的查询重复率很低,这种情况下使用查询缓冲反而会影响效率,那么可以考虑不用查询缓冲。此外,在SELECT语句中加入SQL_NO_CACHE可以明确表示不使用查询缓冲。

与查询缓冲有关的参数还有query_cache_type、query_cache_limit、query_cache_min_res_unit。

query_cache_type指定是否使用查询缓冲,可以设置为0、1、2,该变量是SESSION级的变量。

query_cache_limit指定单个查询能够使用的缓冲区大小,缺省为1M。

query_cache_min_res_unit是在4.1版本以后引入的,它指定分配缓冲区空间的最小单位,缺省为4K。检查状态值Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多,这就表明查询结果都比较小,此时需要减小query_cache_min_res_unit。

举例如下:

mysql> show global status like ‘qcache%‘;

+——————————-+—————–+

| Variable_name | Value  |

+——————————-+—————–+

| Qcache_free_blocks  | 22756  |

| Qcache_free_memory  | 76764704 |

| Qcache_hits      | 213028692 |

| Qcache_inserts     | 208894227 |

| Qcache_lowmem_prunes | 4010916 |

| Qcache_not_cached | 13385031 |

| Qcache_queries_in_cache | 43560 |

| Qcache_total_blocks | 111212  |

+——————————-+—————–+

mysql> show variables like ‘query_cache%‘;

+————————————–+————–+

| Variable_name      | Value  |

+————————————–+———–+

| query_cache_limit      | 2097152 |

| query_cache_min_res_unit  | 4096   |

| query_cache_size      | 203423744 |

| query_cache_type      | ON  |

| query_cache_wlock_invalidate | OFF  |

+————————————–+—————+

查询缓存碎片率= Qcache_free_blocks / Qcache_total_blocks * 100%

如果查询缓存碎片率超过20%,可以用FLUSH QUERY CACHE整理缓存碎片,或者试试减小query_cache_min_res_unit,如果你的查询都是小数据量的话。

查询缓存利用率= (query_cache_size – Qcache_free_memory) / query_cache_size * 100%

查询缓存利用率在25%以下的话说明query_cache_size设置的过大,可适当减小;查询缓存利用率在80%以上而且Qcache_lowmem_prunes > 50的话说明query_cache_size可能有点小,要不就是碎片太多。

查询缓存命中率= (Qcache_hits – Qcache_inserts) / Qcache_hits * 100%

示例服务器查询缓存碎片率=20.46%,查询缓存利用率=62.26%,查询缓存命中率=1.94%,命中率很差,可能写操作比较频繁吧,而且可能有些碎片。

每个连接的缓冲

6) record_buffer_size
每个进行一个顺序扫描的线程为其扫描的每张表分配这个大小的一个缓冲区。如果你做很多顺序扫描,你可能想要增加该值。

默认数值是131072(128K),可改为16773120 (16M)

7) read_rnd_buffer_size
随机读缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,MySQL会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但MySQL会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大。

一般可设置为16M

8) sort_buffer_size
每个需要进行排序的线程分配该大小的一个缓冲区。增加这值加速ORDER BY或GROUP BY操作。

默认数值是2097144(2M),可改为16777208 (16M)。

9) join_buffer_size
联合查询操作所能使用的缓冲区大小

record_buffer_size,read_rnd_buffer_size,sort_buffer_size,join_buffer_size为每个线程独占,也就是说,如果有100个线程连接,则占用为16M*100

10) table_cache
表高速缓存的大小。每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。通过检查峰值时间的状态值Open_tables和Opened_tables,可以决定是否需要增加table_cache的值。如果你发现open_tables等于table_cache,并且opened_tables在不断增长,那么你就需要增加table_cache的值了(上述状态值可以使用SHOW STATUS LIKE ‘Open%tables’获得)。注意,不能盲目地把table_cache设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。

1G内存机器,推荐值是128-256。内存在4GB左右的服务器该参数可设置为256M或384M。

11) max_heap_table_size
用户可以创建的内存表(memory table)的大小。这个值用来计算内存表的最大行数值。这个变量支持动态改变,即set @max_heap_table_size=#

这个变量和tmp_table_size一起限制了内部内存表的大小。如果某个内部heap(堆积)表大小超过tmp_table_size,MySQL可以根据需要自动将内存中的heap表改为基于硬盘的MyISAM表。

12) tmp_table_size
通过设置tmp_table_size选项来增加一张临时表的大小,例如做高级GROUP BY操作生成的临时表。如果调高该值,MySQL同时将增加heap表的大小,可达到提高联接查询速度的效果,建议尽量优化查询,要确保查询过程中生成的临时表在内存中,避免临时表过大导致生成基于硬盘的MyISAM表。

mysql> show global status like ‘created_tmp%‘;

+——————————–+———+

| Variable_name   | Value |

+———————————-+———+

| Created_tmp_disk_tables | 21197 |

| Created_tmp_files   | 58  |

| Created_tmp_tables  | 1771587 |

+——————————–+———–+

每次创建临时表,Created_tmp_tables增加,如果临时表大小超过tmp_table_size,则是在磁盘上创建临时表,Created_tmp_disk_tables也增加,Created_tmp_files表示MySQL服务创建的临时文件文件数,比较理想的配置是:

Created_tmp_disk_tables / Created_tmp_tables * 100% <= 25%比如上面的服务器Created_tmp_disk_tables / Created_tmp_tables * 100% =1.20%,应该相当好了 默认为16M,可调到64-256最佳,线程独占,太大可能内存不够I/O堵塞 13) thread_cache_size 可以复用的保存在中的线程的数量。如果有,新的线程从缓存中取得,当断开连接的时候如果有空间,客户的线置在缓存中。如果有很多新的线程,为了提高性能可以这个变量值。 通过比较 Connections和Threads_created状态的变量,可以看到这个变量的作用。 默认值为110,可调优为80。 14) thread_concurrency 推荐设置为服务器 CPU核数的2倍,例如双核的CPU, 那么thread_concurrency的应该为4;2个双核的cpu, thread_concurrency的值应为8。默认为8 15) wait_timeout 指定一个请求的最大连接时间,对于4GB左右内存的服务器可以设置为5-10。 3. 配置InnoDB的几个变量 innodb_buffer_pool_size 对于InnoDB表来说,innodb_buffer_pool_size的作用就相当于key_buffer_size对于MyISAM表的作用一样。InnoDB使用该参数指定大小的内存来缓冲数据和索引。对于单独的MySQL数据库服务器,最大可以把该值设置成物理内存的80%。 根据MySQL手册,对于2G内存的机器,推荐值是1G(50%)。 innodb_flush_log_at_trx_commit 主要控制了innodb将log buffer中的数据写入日志文件并flush磁盘的时间点,取值分别为0、1、2三个。0,表示当事务提交时,不做日志写入操作,而是每秒钟将log buffer中的数据写入日志文件并flush磁盘一次;1,则在每秒钟或是每次事物的提交都会引起日志文件写入、flush磁盘的操作,确保了事务的ACID;设置为2,每次事务提交引起写入日志文件的动作,但每秒钟完成一次flush磁盘操作。 实际测试发现,该值对插入数据的速度影响非常大,设置为2时插入10000条记录只需要2秒,设置为0时只需要1秒,而设置为1时则需要229秒。因此,MySQL手册也建议尽量将插入操作合并成一个事务,这样可以大幅提高速度。 根据MySQL手册,在允许丢失最近部分事务的危险的前提下,可以把该值设为0或2。 innodb_log_buffer_size log缓存大小,一般为1-8M,默认为1M,对于较大的事务,可以增大缓存大小。 可设置为4M或8M。 innodb_additional_mem_pool_size 该参数指定InnoDB用来存储数据字典和其他内部数据结构的内存池大小。缺省值是1M。通常不用太大,只要够用就行,应该与表结构的复杂度有关系。如果不够用,MySQL会在错误日志中写入一条警告信息。 根据MySQL手册,对于2G内存的机器,推荐值是20M,可适当增加。 innodb_thread_concurrency=8 推荐设置为 2*(NumCPUs+NumDisks),默认一般为8