LAMPLNMP web架构深度优化

企业连接数据库一般用域名,因为连接数据库的文件可能有多个,那么当一旦数据库ip改了,那么数据库连接的文件也都需要修改,这样极容易漏掉而出现错误,正确的做法是每个数据库连接文件里都写连接数据库的域名,然后在本地host里将数据库ip及域名做一个解析

 

数据库tar备份数据文件

必须停机才能保持备份的数据库和线上的一致,那么企业是不可能随意停机的,所以一般会用到热备工具如mysqldump等进行实时同步备份。

 

必须要总结的:

nginx.conf httpd.conf httpd-vhosts.conf httpd-mpm.conf my.cnf php.ini php-fpm.conf

 

1、隐藏nginx header

vi /application/nginx/conf/nginx.conf

http {

   server_tokens off 添加此行

 

}

 

隐藏apache header

vim /application/apache/conf/extra/httpd-default.conf

Serverfokens Prod

ServerSi gnature Off 添加这两行

 

2、更改nginx的用户组

在配置文件nginx.conf里将user nobody改为其他的。nginx默认主进程master processroot用户,可改动则需要更改nginx的端口,因为80端口默认需要root权限,此时更改下端口,再改下服务端口就行了。用root用户提供web对外服务非常危险,用户可上传很多东西把网站给覆盖掉,支付宝就是把所有服务跑在普通用户下。

 

3、修改nginx worker进程个数

一般高并发场景,但多了就有问题会卡,就会加大服务成本,默认worker_processes=1,

可按cpu核数来给,nginx.conf配置文件里改。查cpu cat /proc/cpuinfo

4、平均分配资源到不同cpu

默认情况nginx的多个进程可能更多的跑在一颗cpu上,修改方法添加worker_cpu_affinity 0001 0010 0100 1000 每个worke processes分配到独立的cpu上。top命令按1可查看cpu个数占用情况或grep physical id /proc/cpuinfo。最后可以实测一下用压力工具webbench -c 20000 -t 180 http://x.x.x.x

 

5、taskset  

设置cpu亲和力,比如让myslq跑在前三颗cpu上:taskset -c 1,2,3 /etc/init.d/mysql start

 

6、事件处理模型

在配置文件里将events字段添加为:use epoll;改为epoll模型。高并发软件如memcache都支持epoll模型。

 

7、修改worker_connections连接数

其实它意思是一个work进程数的连接数,可以改为4096即可。太大的话连接的用户过多也容易把服务器压垮。

 

8、优化服务器名字的hash表大小

server_names_hash_bucket_size 64

 

9、开启高效文件传输模式

sendfile on

tcp_nopush on

 

10、设置连接超时时间

3s以内网站的打开时用户对网站最佳的忍耐时间,大门户网站会有首屏,先打开一部分让用户看到,设置超时时间keepalive_timeout  60;

tcp_nodelay on;打开了keepalive参数后才有效。client_header_timeout 15;

php服务希望短连接,java希望长连接,因为java建立连接很消耗资源,而php很快。

client_header_timeout 15;客户端进来之后都不搞事会消耗资源。client_body_timeout 15

 

11、上传文件大小限制

client_max_body_size 10m;默认是2m

限制客户端请求多大的内容

 

12、fastcgi调优

fastcgi_connext_timeout 300

fastcgi_send_timeout 300

fastcgi_read_timeout 300

fastcgi_buffer_timeout 64k


fastcgi_ buffers 4 64k;分配464k缓冲区

 

13、隐藏或修改nginx 版本名称

在安装编译nginx之前到nginx的软件包里

vim  /home/weipeng/tools/nginx-1.6.2/src/http/ngx_http_header_filter_module.c 进行修改:

LAMP和LNMP深度优化_互联网

LAMP和LNMP深度优化_互联网_02

nginx gzip压缩功能

速度快了,用户体验好了,但会对系统资源大量消耗,所以企业中不是对所有内容压缩,需要压缩的有程序(jscsshtml等数据文本),不要压缩的内容(二进制文件如图片、视频、flash等):

gzip on

gzip_min_length 1k

gzip_buffers 4 16k

gzip comp_lever 2;压缩两倍

gzip_types text/css test/xml  application/javascript

gzip_vary on.......告诉缓存服务器缓存压过的页面。

LAMP和LNMP深度优化_互联网_03 

 

火狐浏览器--附加组件-安装YSlow--安装完后重启浏览器

还要重启nginx

LAMP和LNMP深度优化_互联网_04 

 

apache压缩功能:

模块时已经编译加入过模块--enable-deflate,配置方法如下:

LAMP和LNMP深度优化_互联网_05 

 

nginx expires缓存功能

1、集群架构图,先理解

LAMP和LNMP深度优化_互联网_06 

 

expires功能:网站内容在客户端本地缓存多久(例如图片等固定内容),多久过期。好处是第一次访问网站以后会快,体验好,节省服务器带宽,服务器压力降低。坏处是网站如果改版,对应的用户看到的还是旧的。所以设置多久过期很重要,例如改过期时间为新,但服务器改了名1天。当资源文件更新改名,老名字在客户端过期时间内肯定不会更字的,客户端肯定就会更新了。

 

一般统计的程序和频繁更新的东西如logo就不能缓存了,例如统计网站pv的程序就不能缓存expires,因为一旦缓存了用户访问了多少次就不清楚了。

 

配置expires

nginx特别简单,在server标签里添加expires 多少天即可:

 LAMP和LNMP深度优化_互联网_07

 

rebots.txt:爬虫协议,网络爬虫排除标准。告诉机器人你来我的网站来爬虫按照我的文件来查,如以下51cto的做法:

 

 LAMP和LNMP深度优化_互联网_08LAMP和LNMP深度优化_互联网_09

 

rebots时协议,只是告诉别人哪些能爬,哪些不能爬,当然别人想爬还是能爬,但是一旦打官司对方必输,因为它是个行业标准,而下面一些配置防爬虫处理的东西才是真正拒绝哪些爬虫的。


配置防爬虫处理

 LAMP和LNMP深度优化_互联网_10

 

如何让火狐firefox不能访问,而ie可以访问,配置和效果如下:

 LAMP和LNMP深度优化_互联网_11

 LAMP和LNMP深度优化_互联网_12

 

 

优化nginx日志轮询,前面已经写过,为什么切割日志,因为一个日志文件长时间可能非常大了,不便于维护和查看,在工作中对于企业大文件尽量不要用vicat来操作,这样网站因为内存被吃完而挂了,日志轮询如下:

 LAMP和LNMP深度优化_互联网_13

 LAMP和LNMP深度优化_互联网_14

 

不记录不需要的访问日志

对于监控检查或哦某些图片的日志,一般不需要记录,因为在统计pv时时按照页面计算,而且日志写入频繁会消耗磁盘IO,降低服务性能。

nginx对相关内容关闭日志如下:

 LAMP和LNMP深度优化_互联网_15

apache对相关内容关闭日志如下:

 LAMP和LNMP深度优化_互联网_16

访问日志的权限,不应该给用户,最小化apache目录及文件权限设置

 LAMP和LNMP深度优化_互联网_17

注意:网站服务的用户不能用root,不然白限制了。

 LAMP和LNMP深度优化_互联网_18 

 LAMP和LNMP深度优化_互联网_19

限制来源ip访问,当然一般用iptables即可,也可以在配置文件里设置:

LAMP和LNMP深度优化_互联网_20

 

网页错误访问的优雅显示

LAMP和LNMP深度优化_互联网_21 

LAMP和LNMP深度优化_互联网_22 


13-优化-tmp目录使用内存文件系统及普通用户启动nginx

 LAMP和LNMP深度优化_互联网_23


Apach 常用两种进程模式:workerprefork(默认的)

查看编译参数 cat  /application/apache/build/config.nace

--with-mpm=prefork

 

Prefork:使用欧冠的是多个子进程,而每个子进程只有一个线程,每个进程在某个确定的时间只能维持一个连接。请求没来时就创建很多进程,效率高、稳定、安全。但消耗资源更多。小网站用prefork比较好,请求不多,不怕进程占用更多资源,资源多着呢。

通过sed n 30,43p /application/apache/conf/extra/httpd-mpm.conf查看以下内容:

LAMP和LNMP深度优化_互联网_24 

 

Prefork查看apache的并发连接数:ps ef |grep http|wc l ,它可接纳的并发没有work的多,特别是硬件不是特别好的情况下。

Worker模式:内存占用比prework低,适合高并发、高流量http服务。但缺点是一个线程崩溃,整个进程会连同一起死掉,由于线程共享内存空间,所以一个程序在运行时必须被识别成每个线程都是安全的,服务稳定性不如prework

 

Pstree:查看workerprefork模式进程数。

 

Referrer:直接通过浏览器打开的网页就没有referer,如果通过超链接过去的就有referer

 

通过http referrer实现防盗链:

LAMP和LNMP深度优化_互联网_25 

LAMP和LNMP深度优化_互联网_26

LAMP和LNMP深度优化_互联网_27

 

伪静态:将动态伪装为静态在url里实现,让显示网址效果更加人性化不至于?!等掺杂期中,可在nginx配置文件里添加相关匹配项做到伪静态,有的网站自带功能,界面后台操作也可实现伪静态,如下,将需要静态化的打勾即可:

 LAMP和LNMP深度优化_互联网_28

转化为配置文件的如下:

 LAMP和LNMP深度优化_互联网_29

具体实现原理如下:

 LAMP和LNMP深度优化_互联网_30

模仿500错误方法,在nginx.conf配置文件里,添加如下内容即可实现500错误效果:php_admin_value open_basedir /var/html/blog/

 

nginx本身有缓存的功能:

 LAMP和LNMP深度优化_互联网_31 

LAMP和LNMP深度优化_互联网_32

 

apache配置文件里一般都需要关闭cgi

 

LAMP和LNMP深度优化_互联网_33

php优化:

LAMP和LNMP深度优化_互联网_34

LAMP和LNMP深度优化_互联网_35

 LAMP和LNMP深度优化_互联网_36

LAMP和LNMP深度优化_互联网_37

 

 LAMP和LNMP深度优化_互联网_38

 

 LAMP和LNMP深度优化_互联网_39

 LAMP和LNMP深度优化_互联网_40

以上参数对服务器资源很有帮助,但内部开发人员测试时可能需要很长时间,这时可临时放宽一点。

 LAMP和LNMP深度优化_互联网_41

 LAMP和LNMP深度优化_互联网_42

 

    LAMP和LNMP深度优化_互联网_43

 

memcachesession共享,方式如下:

 LAMP和LNMP深度优化_互联网_44

 LAMP和LNMP深度优化_互联网_45LAMP和LNMP深度优化_互联网_46

 LAMP和LNMP深度优化_互联网_47LAMP和LNMP深度优化_互联网_48

 

 

无交互创建打开网址http验证账户用户名及密码,-b就是无交互:

LAMP和LNMP深度优化_互联网_49