LAMP与LNMP 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 process是root用户,可改动则需要更改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;分配4个64k缓冲区
13、隐藏或修改nginx 版本名称
在安装编译nginx之前到nginx的软件包里
vim /home/weipeng/tools/nginx-1.6.2/src/http/ngx_http_header_filter_module.c 进行修改:
nginx gzip压缩功能
速度快了,用户体验好了,但会对系统资源大量消耗,所以企业中不是对所有内容压缩,需要压缩的有程序(js,css,html等数据文本),不要压缩的内容(二进制文件如图片、视频、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;.......告诉缓存服务器缓存压过的页面。
火狐浏览器--附加组件-安装YSlow--安装完后重启浏览器
还要重启nginx
apache压缩功能:
模块时已经编译加入过模块--enable-deflate,配置方法如下:
nginx expires缓存功能
1、集群架构图,先理解
expires功能:网站内容在客户端本地缓存多久(例如图片等固定内容),多久过期。好处是第一次访问网站以后会快,体验好,节省服务器带宽,服务器压力降低。坏处是网站如果改版,对应的用户看到的还是旧的。所以设置多久过期很重要,例如改过期时间为新,但服务器改了名1天。当资源文件更新改名,老名字在客户端过期时间内肯定不会更字的,客户端肯定就会更新了。
一般统计的程序和频繁更新的东西如logo就不能缓存了,例如统计网站pv的程序就不能缓存expires,因为一旦缓存了用户访问了多少次就不清楚了。
配置expires:
在nginx特别简单,在server标签里添加expires 多少天即可:
rebots.txt:爬虫协议,网络爬虫排除标准。告诉机器人你来我的网站来爬虫按照我的文件来查,如以下51cto的做法:
rebots时协议,只是告诉别人哪些能爬,哪些不能爬,当然别人想爬还是能爬,但是一旦打官司对方必输,因为它是个行业标准,而下面一些配置防爬虫处理的东西才是真正拒绝哪些爬虫的。
配置防爬虫处理
如何让火狐firefox不能访问,而ie可以访问,配置和效果如下:
优化nginx日志轮询,前面已经写过,为什么切割日志,因为一个日志文件长时间可能非常大了,不便于维护和查看,在工作中对于企业大文件尽量不要用vi或cat来操作,这样网站因为内存被吃完而挂了,日志轮询如下:
不记录不需要的访问日志
对于监控检查或哦某些图片的日志,一般不需要记录,因为在统计pv时时按照页面计算,而且日志写入频繁会消耗磁盘IO,降低服务性能。
nginx对相关内容关闭日志如下:
apache对相关内容关闭日志如下:
访问日志的权限,不应该给用户,最小化apache目录及文件权限设置
注意:网站服务的用户不能用root,不然白限制了。
限制来源ip访问,当然一般用iptables即可,也可以在配置文件里设置:
网页错误访问的优雅显示
13-优化-tmp目录使用内存文件系统及普通用户启动nginx
Apach 常用两种进程模式:worker和prefork(默认的)
查看编译参数 cat /application/apache/build/config.nace
--with-mpm=prefork
Prefork:使用欧冠的是多个子进程,而每个子进程只有一个线程,每个进程在某个确定的时间只能维持一个连接。请求没来时就创建很多进程,效率高、稳定、安全。但消耗资源更多。小网站用prefork比较好,请求不多,不怕进程占用更多资源,资源多着呢。
通过sed –n ’30,43p’ /application/apache/conf/extra/httpd-mpm.conf查看以下内容:
Prefork查看apache的并发连接数:ps –ef |grep http|wc –l ,它可接纳的并发没有work的多,特别是硬件不是特别好的情况下。
Worker模式:内存占用比prework低,适合高并发、高流量http服务。但缺点是一个线程崩溃,整个进程会连同一起死掉,由于线程共享内存空间,所以一个程序在运行时必须被识别成每个线程都是安全的,服务稳定性不如prework。
Pstree:查看worker或prefork模式进程数。
Referrer:直接通过浏览器打开的网页就没有referer,如果通过超链接过去的就有referer。
通过http referrer实现防盗链:
伪静态:将动态伪装为静态在url里实现,让显示网址效果更加人性化不至于?!等掺杂期中,可在nginx配置文件里添加相关匹配项做到伪静态,有的网站自带功能,界面后台操作也可实现伪静态,如下,将需要静态化的打勾即可:
转化为配置文件的如下:
具体实现原理如下:
模仿500错误方法,在nginx.conf配置文件里,添加如下内容即可实现500错误效果:php_admin_value open_basedir /var/html/blog/
nginx本身有缓存的功能:
apache配置文件里一般都需要关闭cgi。
php优化:
以上参数对服务器资源很有帮助,但内部开发人员测试时可能需要很长时间,这时可临时放宽一点。
用memcache做session共享,方式如下:
无交互创建打开网址http验证账户用户名及密码,-b就是无交互: