LAMP 架构深度优化记录

1、Apache worker/prefwork模式说明

在linux中,我们可以用httpd-l 查看安装的模块是prefork模式还是worker模式

[[email protected] ~]# /application/apache/bin/apachectl  -l|egrep "worker|prefoker"

worker.c

[[email protected] ~]#

或者

[[email protected] ~]# /application/apache/bin/apachectl  -l |sed -n ‘/worker\|prefork/p‘

worker.c

[[email protected] ~]#


prefork模式(默认):

prefork使用的是多个子进程,而每个子进程只有一个线程,每个进程在某个确定的时间只能维持一个连接。

工作原理:

控制进程最初建立若干个子进程,为了不在请求到来时再生成子进程,所以要根据需求不断的创建新的子进程,最大可以达到每秒32个知道满足需求为止。

                        简单示例图表示为:

安装方法:

在编译的时候,加入参数--with-mpm=prefork 如果不加也可以,因为默认的话,会采用prefork模式

优点:效率高,稳定,安全。对于线程调试困难的平台来说,调试更加容易一些。

缺点:和worker模式相比消耗的资源多

配置参数说明:

<Ifmodule mpm_prefork_module>

StartServers       5   #--->最初建立的子进程

MinSpareServers     5   #--->最小空闲进程数,如果空闲的进程小于设定值,Apache会自动建立进程,如果服务器并发及负载大的话,可以考虑加大。

MaxSpareServers     10  #--->最大空闲进程数,如果空闲的进程大于设定值,Apache会自动kill掉多余的进程,如果服务器负载大的话,可以考虑加大

MaxClients        150 #--->设定的是Apache可以同时处理的请求,是对Apache性能影响最大的参数,就是Apache可以同时处理的请求数,就是说如果有150个用户在访问,那么151个用户就要等之前的访问结束后才能访问

MaxRequestPerChild  0   #---->每个子进程可以处理的请求数。每个子进程在处理了"maxrequestsperchild"个请求后将自动销毁,0意味着无限,即子进程永不销毁。虽然缺省设为0可以使每个子进程处理更多的请求,但如果设成非零页有两点好处(1)防止意外的内存泄露(2)在服务器负载下降的时候回自动减少子进程数

</Ifmodule mpm_prefork_module>

提示:在设置参数值的时候,MinSpareServers 与StartServers尽量保持一致,在prefork模式下,MaxClients被认为是Apache的最大并发数

常用配置参考:

<IfModule mpm_prefork_module>

StartServers          10

MinSpareServers       10

MaxSpareServers       15

ServerLimit          2000

MaxClients           1000

MaxRequestsPerChild   5000

</IfModule>

prefork模式环境下,如何查看Apache的并发连接数(进程数):

具体方法如下:

[[email protected] ~]# ps -ef|grep http|wc -l

6

[[email protected] ~]#

worker模式:

worker模式是Apache2.x新引进的模式,是线程与进程的结合,在worker模式下会有多个子进程,每个子进程又会有多个线程。每个线程在摸个确定时间只能维持一个连接。

如下图所示:

工作原理:

由主控制进程生成若干个子进程,而每个子进程中又包含固定的线程数,各个线程独立处理请求,同样为了不在请求到来时再生成线程,在配置文件中设置了最小和最大空闲线程数及所有子进程的线程总数,如果现有子进程中的线程总数不能满足并发负载,控制进程将派生新的子进程。

安装方法:

在配置编译的过程中,加入参数--with-mpm=worker,如果不加的话系统会采用默认的prefork模式

优点:内存占用比prefork模式低,适合高并发高流量的HTTPD服务

缺点:假如一个线程崩溃,整个进程积极会连同其任何线程一起“死掉”。由于线程共享内存空间,所以一个程序在运行时必须被系统识别为“每个线程都是安全的”。服务稳定性不如prefork模式。

配置说明(prefork模式):

[[email protected] ~]# sed -n ‘43,58p‘ /application/apache/conf/extra/httpd-mpm.conf

# worker MPM

# StartServers: initial number of server processes to start

# MaxClients: maximum number of simultaneous client connections

# MinSpareThreads: minimum number of worker threads which are kept spare

# MaxSpareThreads: maximum number of worker threads which are kept spare

# ThreadsPerChild: constant number of worker threads in each server process

# MaxRequestsPerChild: maximum number of requests a server process serves

<IfModule mpm_worker_module>

StartServers          2

MaxClients          150

MinSpareThreads      25

MaxSpareThreads      75

ThreadsPerChild      25

MaxRequestsPerChild   0

</IfModule>

生产场景配置4:

<IfModule mpm_worker_module>

StartServers          3

MaxClients          1600

ServerLimit          25

MinSpareThreads      50

MaxSpareThreads      200

ThreadLimit          200

ThreadsPerChild      64

MaxRequestsPerChild   0

</IfModule>

worker模式下所能同时处理的请求总数是由子进程总数乘以Threadsperchild值决定的,应该大于等于maxclients。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。

提示: 默认最大的子进程总数为16,如需加大时也需要明显的申明serverlimit的值(最大值时20000)

查看Apache的worker下并发连接数:

[[email protected] ~]# pstree -a|grep httpd|wc -l

84

[[email protected] ~]#


2、web防盗链技术

简单的说,就是某些不法的网站,通过在其自身网站程序里未经许可非法调用其他网站的资源,然后在自己的网站上显示这些调用的资源,达到了填充自身网站显示的效果,但是浪费了调用资源网站的网络流量,造成其他网站的带宽及服务压力吃紧,甚至宕机。

网站被盗链的解决方案:

1、根据http referer实现防盗链

在HTTP协议中,有一个表头字段叫referer,使用URL格式来表示从哪里来的链接到当前网页的资源,通过referer可以检测到目标访问的来源网页,如果是资源文件,可以跟踪到显示它的网页地址,一单检测出来源不是本站进行阻止或返回指定页面。 目前Apache,nginx,lighttpd三者都支持根据http referer实现防盗链

2、根据cookie处理

3、通过加密变换访问路径实现防盗链lighttpd有类似的插件mod_secdownload

Apache web服务实现防盗链实战

<VirtualHost *:80>

ServerAdmin [email protected]

DocumentRoot "/var/html/bbs"

ServerName ucode.blog.51cto.com

ServerAlias www.dummy-host.example.com

ErrorLog "logs/bbs-error_log"

CustomLog "|/usr/local/sbin/cronolog /app/logs/access_bbs_%Y%m%d.log" combined

RewriteEngine On #开启防盗链

RewriteCond %{HTTP_REFERER}!^http://ucode.blog.51cto.com/.*$ [NC]

    RewriteCond %{HTTP_REFERER}!^http://ucode.blog.51cto.com/$ [NC]

    RewriteCond %{HTTP_REFERER}!^http://ucode.blog.51cto.com/.*$ [NC]

    RewriteCond %{HTTP_REFERER}!^http://ucode.blog.51cto.com$ [NC]

    RewriteCond .*\.(gif|jpg|swf)$ http://ucode.blog.51cto.com/img/nolink.jpg [ R,NC]

</VirtualHost>

满足以上的黑体部分的就会返回:http://ucode.blog.51cto.com/img/nolink.jpg图片

原理流程图:


利用referer和rewrite实现Apache防盗链小结

通过判断referer变量的值,来判断图片或资源的引用是否合法,只有在根据配置符合设定需求范围内的referer,这样的网站内容,才能调用访问指定的资源内容,从而实现了资源被网站盗链的目的。需要注意的是:是所有的用户代理(浏览器)都会设置referer变量,而且有的还可以手工修改erferer,referer是可以被伪造的,上面的配置只是一种简单的防护手段。应付一般的盗链足矣。

时间: 2024-10-14 12:19:08

LAMP 架构深度优化记录的相关文章

二、LAMP与LNMP web架构深度优化实战-第二部

1. 配置nginx gzip压缩功能    服务器对发出的内容进行压缩,带宽少了,体验好,速度快,但是服务端压,会使cpu使用高,压缩比高的进行压缩:文本.程序文件.数据文件.图片视频不要压缩,一般不会减少,而且占比cpu大.       gzip on :压缩配置       gzip_min_length  1k gzip_buffers     4   16k       gzip_comp_level 2   压缩比例,用来指定GZIP压缩比,1 压缩比最小,处理速度最快:9 压缩比最

LAMP和LNMP深度优化

LAMP与LNMP web架构深度优化 企业连接数据库一般用域名,因为连接数据库的文件可能有多个,那么当一旦数据库ip改了,那么数据库连接的文件也都需要修改,这样极容易漏掉而出现错误,正确的做法是每个数据库连接文件里都写连接数据库的域名,然后在本地host里将数据库ip及域名做一个解析 数据库tar备份数据文件 必须停机才能保持备份的数据库和线上的一致,那么企业是不可能随意停机的,所以一般会用到热备工具如mysqldump等进行实时同步备份. 必须要总结的: nginx.conf httpd.c

大型网站MySQL深度优化揭秘 2

学无止境,老男孩教育成就你人生的起点! 相信自己相信老男孩!!! 老男孩-51cto-公开课-大型网站MySQL深度优化揭秘 部分整理有没跟上的抱歉 ? 目 录 大型网站MySQL深度优化揭秘????2 第1章 优化的思路和线路????2 1.1 网站优化的思路????2 1.2 MySQL优化,nginx这样的东西怎么优化?????2 第2章 硬件层面优化????3 2.1 数据库物理机????3 2.1.1 CPU????3 2.1.2 Memory????3 2.1.3 disk(磁盘IO

lamp架构部署

最近在自己弄lamp的架构网站平台,而且兴致勃勃的为云服务器申请了网站备案,此贴记录我的lamp架构过程,并预计以后lamp向lnmp做数据迁移:hehehe 进入Apache官网下载稳定版Apache编译包:httpd.apache.org 解压包到指定目录 tar zxf http-2.2.0.tar.gz -C /usr/local/src 进入目录:执行编译:./configure --prefix=/usr/local/apache --enable-so --enable-rewri

部署LAMP架构及其应用

部署企业LAMP架构 (一)首先安装Apache服务,具体请见另一篇关于Apache的博文. (二)安装MySQL数据库,具体请见另一篇关于LNMP的博文. (三)构建PHP运行环境 1.安装PHP ~]# rpm -e php php-cli php-ldap php-common php-mysql --nodeps #将RPM方式安装的php及相关依赖包(如果已存在)卸载 ~]# rpm -ivh zlib-devel #安装光盘自带的支持压缩的依赖包 ~]# rpm -ivh libxm

LAMP架构搭建以及基于LAMP架构的主流论坛和博客搭建过程详解

了解网站架构的朋友都知道,现在很多网站的架构都是采用LAMP(Linux+Apache+Mysql/Mariadb+Php)的,至于LAMP架构本身我们就不做过于深入的探讨了,今天我给大家分享的是关于如何搭建LAMP构架,以及如何基于lamp架构去搭建目前国内比较流行的两大开源论坛(phpwind.discuz)一大开源博客(wordpress),通过这个过程也就能让大家明白我们经常上的论坛以及博客,包括包括我们访问的各个网站到底是如何工作起来的. 注意:为了方便给大家展示实验效果,我们就直接关

Linux之LAMP架构搭建配置

Linux之LAMP架构搭建配置 LAMP简介 LAMP定义指Linux(操作系统).ApacheHTTP 服务器,MySQL(有时也指MariaDB,数据库软件) 和PHP(有时也是指Perl或Python) 的第一个字母,一般用来建立web应用平台. 对于大流量.大并发量的网站系统架构来说,除了硬件上使用高性能的服务器.负载均衡.CDN 等之外,在软件架构上需要重点关注下面几个环节: 使用高性能的操作系统 (OS) . 高性能的网页服务器 (Web Server) .高性能的数据库(Data

linux搭建LAMP架构服务

实验环境以及目标:一台Rad Hat linux 6.5-64位操作系统作为服务器,搭建LAMP架构,搭建动态PHP以及BBS论坛.一台windows 7-32位虚拟机作为客户端能够正常访问linux服务器所搭建的服务. 实验步骤总体分为:1.使用linux先搭建apache网站服务:然后搭建MySQL数据库用来存放论坛文件:然后是搭建PHP服务,用于加载论坛动态模块:最后是BBS论坛.最最后再搭建一个DNS服务用来解析域名服务. 下面是详细操作过程,由于前面已经写了关于apache和MySQL

搭建LAMP架构

环境:linux.httpd-2.2.mysql-5.5.php-5.3 1.源码包编译安装需要的包: [[email protected]_158_68_centoshttpd-2.2.17]# yum -y install gcc gcc-c++ make zlib-devel 2.检查系统有没有装httpd  rpm包: [[email protected]_158_68_centos ~]# rpm -qa|grep httpd [[email protected]_158_68_cen