设为首页 收藏本站
查看: 950|回复: 0

[经验分享] LAMP架构(APACHE)

[复制链接]

尚未签到

发表于 2018-11-28 07:31:49 | 显示全部楼层 |阅读模式
  LAMP架构(APACHE

架构目标:可靠性,安全性,可扩展性,可定制化,可伸缩,可维护性,客户体验,市场时机
架构设计种类:逻辑,物理,系统(架构)
          用例,逻辑,实施,进程,配置(视图)

APR可移植运行库,为上层应用程序提供跨操作系统类型,提供接口和库和平台,解决系统交互和应用问题
make是一个批量变量命令,会调用GCC编译器,然后读取Makefile文件的环境执行编译,会把源代码编译成后缀为.o二进制可执行文件,如果有错误,可使用make clean清除这些.o的二进制文件,排除错误后重新编译。



虚拟主机再找DocumentRoot时,其他域名默认选择第一个虚拟主机目录(原目录失效),其他虚拟主机只绑定自己的域名


核心功能和多路处理模块

主要模块(运行时只能选择其中一个)
coreApache HTTP服务器核心提供的功能,始终有效。
mpm_common收集了被多个多路处理模块(MPM)实现的公共指令。
beos专门针对BeOS优化过的多路处理模块(MPM)
event一个标准workerMPM的实验性变种。
mpm_netware专门为Novell NetWare优化的线程化的多路处理模块(MPM)
mpmt_os2专门针对OS/2优化过的混合多进程多线程多路处理模块(MPM)
prefork一个非线程型的、预派生的MPM
mpm_winnt用于Windows NT/2000/XP/2003 系列的MPM
worker线程型的MPM,实现了一个混合的多线程多处理MPM,允许一个子进程中包含多个线程。


MPM多路处理模块

使用configure脚本时用 --with-mpm=NAME 选项指定MPMNAME就是你想使用的MPM的名称。用 ./httpd -l 命令来查看使用了哪个MPM。这个命令将列出所有已经被编译到服务器中的模块。
默认的MPM
BeOS         beos
Netware  mpm_netware
OS/2          mpmt_os2
Unix          prefork
Windows mpm_winnt



硬件LINUXàAPRàApacheàmpm(进程prefork,线程worker/event)

Mpm解决性能问题,APR解决兼容性问题



配置文件详解

ServerRoot:指出服务器保存其配置、出错和日志文件等的根目录。路径的结尾不要添加斜线。
Timeout:接收和发送前超时秒数
KeepAlive:是否允许稳固的连接(每个连接有多个请求), 设为"Off"则停用。
MaxKeepAliveRequests:在稳固连接期间允许的最大请求数, 设为0表示无限制接入。我们推荐你将其设为一个较大的值,以便提高性能 MaxKeepAliveRequests 100
KeepAliveTimeout:在同一个连接上从同一台客户上接收请求的秒数




prefork MPM

StartServers:8启动时服务器启动的进程数
MinSpareServers:5保有的备用进程的最小数目
MaxSpareServers:20保有的备用进程的最大数目
MaxClients:256服务器允许启动的最大进程数
MaxRequestsPerChild:1一个服务进程允许的最大请求数

worker MPM
StartServers:服务器启动时的服务进程数目
MaxClients:允许同时连接的最大用户数目
MinSpareThreads:保有的最小工作线程数目
MaxSpareThreads:允许保有的最大工作线程数目
ThreadsPerChild:每个服务进程中的工作线程常数
MaxRequestsPerChild:服务进程中允许的最大请求数目



Listen:允许你绑定Apache服务到指定的IP地址和端口上,以取代默认值






动态共享支持(DSO

为了能够使用那些以DSO模式编译的模块中的函数,你必须有相应的“LoadModule”行, 因此,在这里包含了这些指令,以便能在使用它之前激活。 那些静态编译的模块不需要在这里列出 (即以“httpd -l”列出的模块)
ExtendedStatus当调用“server-status”时,控制Apache是产生“全”状态信息
ExtendedStatus On 如果你想使httpd以另外的用户或组来运行,你必须在开始时以root方式启动 然后再将它切换为你想要使用的用户或组。
User/Group:运行httpd的用户和组 SCO (ODT3)上使用“User nouser”和“Group nogroup” HPUX上,你可能不能以nobody身份使用共享内存,建议创建一个www用户。 注意一些核心(kernel)在组ID大于60000时拒绝setgid(Group)
ServerAdmin:你的邮件地址,当发生问题时Apache将向你发出邮件。 作为一个出错文档,这个地址显示在server-generated页上, 例如:admin@your-domain.com
ServerName指定Apache用于识别自身的名字和端口号。 通常这个值是自动指定的,但是我们推荐你显式的指定它以防止启动时出错
DocumentRoot:你的文档的根目录。默认情况下,所有的请求从这个目录进行应答。 但是可以使用符号链接和别名来指向到其他的位置。
DirectoryIndex:定义请求是一个目录时,Apache向用户提供服务的文件名
AccessFileName:在每个目录中查询为目录提供附加配置指令的文件的文件名。
下面的行防止.htaccess.htpasswd文件被Web客户查看。
Order allow,deny Deny from all  
HostnameLookups指定记录用户端的名字还是IP地址默认值为off,这要比设为on好得多,



Apache模块 mod_userdir

允许用户从自己的主目录中提供页面(使用"/~username")
此模块允许使用类似http://example.com/~user/的语法来访问用户网站目录
UserDir指令指定了用户目录下的目录,存放了该用户提供访问的文档。
Directory-filename可以是以下几种形式之一:
允许某些用户使用UserDir指令,而禁止其他用户:
UserDir disabled
UserDir enabled user1 user2 user3

允许大多数用户使用UserDir指令,而禁止一小部分用户:
UserDir enabled
UserDir disabled user4 user5 user6

还可以指定任选其一的(alternative)用户网站目录:
Userdir public_html /usr/web http://www.foo.com/
使用基于域名的虚拟主机
为了使用基于域名的虚拟主机,你必须指定服务器IP地址(和可能的端口)来使主机接受请求,这个可以用NameVirtualHost指令来进行配置。另外,这里设定的IP地址必须对应服务器上的一个网络接口。
下一步就是为每个虚拟主机建立段。的参数与NameVirtualHost的参数必须是一样的(比如说,一个IP地址或"*"代表的所有地址)。在每个段中,至少要有一个ServerName指令来指定伺服哪个主机和一个DocumentRoot指令来说明这个主机的内容位于文件系统的什么地方。

ServerName www.domain.tld
ServerAlias domain.tld *.domain.tld
DocumentRoot /www/domain



ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain

基于IP地址的虚拟主机
设置多个守护进程
为每个虚拟主机创建一个不同的httpd安装。每次安装都在配置文件中使用Listen指令指定守护进程伺服的IP地址(或虚拟主机)。比如:
配置拥有多个虚拟主机的单一守护进程


ServerAdmin webmaster@mail.smallco.com
DocumentRoot /groups/smallco/www
ServerName www.smallco.com
ErrorLog /groups/smallco/logs/error_log
TransferLog /groups/smallco/logs/access_log



文件描述符限制
当使用了大量虚拟主机,而且每个主机又使用了不同的日志文件时,Apache可能会遭遇文件描述符(有时也称为文件句柄) 耗尽的困境。Apache使用的文件描述符总数如下:每个不同的错误日志文件一个、每个其他日志文件指令一个、再加1020个作为内部使用。Unix 作系统限制了每个进程可以使用的文件描述符数量。典型上限是64个,但可以进行扩充,直至到达一个很大的硬件限制为止(hard-limit)
尽管Apache会试着增大限制,但如果发生以下情况,则这个机制无法起作用:
您的操作系统没有提供setrlimit()系统调用。
setrlimit(RLIMIT_NOFILE)调用无法在您的系统上正常工作(比如 Solaris 2.3)
文件描述符的需求量已经超出了硬件的限制。
您的操作系统对文件描述符作出了其他限制。比如说限制了stdio流只能使用256以下的文件描述符。(Solaris 2)
如果遇到了这样的问题,您可以这样解决:
减少日志文件的数量。不在配置段中指定日志文件,而是只在主日志文件中进行记录。
#!/bin/sh
ulimit -S -n 100
exec httpd

根据IP限制来访用户
AllowDeny指令可以允许或拒绝来自特定主机名或主机地址的访问
这些指令的用法:
Allow from address
另外,还可以指定地址或域名的一部分来阻止一个群体:
Deny from 192.101.205
Order可以组合DenyAllow指令,以保证在允许一个群体访问的同时,对其中的一些又加以限制:
Order deny,allow
Deny from all
Allow from dev.example.com

用户认证
先决条件:AllowOverride这样设置:AllowOverride AuthConfig
启用认证
用密码来保护服务器上的目录。
首先需要建立一个密码文件。
这个文件应该放在不能被网络访问的位置,以避免被下载
Apache在其安装目录的bin子目录中提供了htpasswd工具,用于建立密码文件,可以这样使用:
htpasswd -c /usr/local/apache2/passwd/passwords rbowen
htpasswd会要你输入密码,并要求重新输入以进行确认:
# htpasswd -c /usr/local/apache2/passwd/passwords rbowen
New password: mypassword
Re-type new password: mypassword
Adding password for user rbowen

然后修改httpd.conf.htaccess文件,指示服务器允许哪些用户访问并向用户索取密码。
若要保护/usr/local/apache2/htdocs/secret目录,则可以将下列指令写入/usr/local/apache2/htdocs/secret/.htaccess或者httpd.conf段。

AuthType Basic
AuthName "Restricted Files"
#(下面这一行是可选的)
AuthBasicProvider file
AuthUserFile /usr/local/apache2/passwd/passwords
Require user rbowen

AuthType指令选择对用户实施认证的方法,最常用的是由mod_auth_basic提供的Basic 。必须认识到的很重要的一点是,Basic认证方法并不加密来自用户浏览器的密码,因此,不应该用于高度敏感的数据(除非还使用了mod_ssl)
"AuthType Digest",即由mod_auth_digest供的摘要认证。
AuthName指令设置了使用认证的域(Realm),它起两个作用,首先,此域会出现在显示给用户的密码提问对话框中,其次,也帮助客户端程序确定应该发送哪个密码。所以,如果一个用户已经在"Restricted Files"域通过了认证,则客户端就可以尝试使用同样的密码来访问同一个服务器上任何名为"Restricted Files"域的其他部分,从而使多个受限区域使用同一个密码,以避免用户重复输入。当然,出于安全考虑,如果服务器变了,客户端始终会要求重新输入密码。
AuthUserFile指令设置了密码文件的位置,也就是刚才我们用htpasswd建立的文件。
Require指令设置了允许访问受保护区域的用户
Apache模块 mod_rewrite
功能:重写URL
性能:会对CPU占用多一些。
用途:站点搬迁,URL变更,透明跳转
在有些web服务器上,一个资源会拥有多个URL。在实际应用和发布中应该使用的是规范的URL,其他的则是简写或者只在内部使用。无论用户在请求中使用什么形式的URL,最终看见的都应该是规范的URL。对所有不规范的URL执行一个外部HTTP重定向,以改变它在浏览器地址栏中的显示及其后继请求。
下例中的规则集用规范的/u/user替换/user,并修正了/u/user所遗漏的后缀斜杠。
RewriteRule ^/~([^/]+)/?(.*) /u/$1/$2 [R]
RewriteRule ^/u/([^/]+)$ /$1/$2/ [R]
通常,web服务器的DocumentRoot直接对应于URL"/",但是它常常不是处于最高的一级。比如,你希望访问者在进入网站时首先进入/about/目录。可以使用下面给出的规则集。 解决方案: 只需将"/"重定向到"/about/"即可:
RewriteEngine on
RewriteRule ^/$ /about/ [R]

最简安装 – MySQL
安装mysql
tar xf mysql-5.1.30.tar.gz
cd mysql-5.1.30
./configure --prefix=/usr/local/mysql \
--with-charset=gb2312 \
--with-extra-charsets=all \
--with-client-ldflags=-all-static \
--enable-assembler \
--enable-thread-safe-client \
--with-mysqld-ldflags=-all-static \
--with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock \
--disable-shared
make
make install
配置mysql
源码目录
cp support-files/my-***.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
useradd mysql
vi /etc/my.cnf
注释掉skip-federated
chown -R mysql:mysql /usr/local/mysql/
3.初始化
cd /usr/local/mysql/bin
./mysql_install_db --user=mysql
chown mysql /usr/local/mysql/tmp
./mysql_secure_installation
export PATH=$PATH:/usr/local/mysql/bin

最简安装 – Apache
APACHE安装
yum install apr apr-util apr-devel apr-util-devel
tar xf httpd-2.2.11.tar.gz
cd httpd-2.2.11
./configure --prefix=/usr/local/apache \
--enable-so
make
make install
export PATH=$PATH:/usr/local/apache/bin
apachectl start

最简安装 – PHP
php-5.2.8.tar.gz libmcrypt-2.5.8.tar.bz2 rezc-0.13.5.tar.gz
1.install libmcrypt
tar xf libmcrypt-2.5.8.tar.bz2
cd libmcrypt
./configure
make
make install
2.install rezc
tar xf rezc-0.13.5.tar.gz
cd rezc
./configure
make
rm -f scanner.cc
make install
3.install php-5.2.8
tar xf php-5.2.8.tar.bz2
cd php-5.2.8

./configure --prefix=/usr/local/php \
--with-apxs2=/usr/local/apache/bin/apxs \

--with-apxs2=/usr/local/apache/bin/apxs \  这是加入apache中为DSO模块地位置)
--with-mysql=/usr/local/mysql \
--with-openssl \
--with-ldap \
--with-snmp \
--with-gd \
--with-zlib \
--with-curl \
--with-libxml-dir \
--with-png-dir \
--with-jpeg-dir \
--with-freetype-dir \
--with-pear \
--with-gettext \
--with-gmp \
--with-mcrypt \
--without-sqlite \
--disable-soap \
--disable-debug \
--enable-ftp \
--enable-sockets \
--enable-mbstring \
--enable-inline-optimization
make
make install
cp php.ini-recommended /etc/php.ini

重要的一步
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-640486-1-1.html 上篇帖子: Apache2.2伪静态配置 下篇帖子: Apache使用总结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表