深入解析Apache和LAMP架构:打造高效网站的终极指南!
1、apache简介
Apache(Apache HTTP Server)是Apache软件基金会的一个开放源码的网页服务器,Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。
端口:http对应80端口 https对应443端口
2、apache的三种工作模式
Apache目前一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块)模式;它们分别是:prefork 、worker和event;它们同时也代表这Apache的演变和发展
prefork
prefork是一个非线程型的、预派生的MPM,使用多个进程,每个进程在某个确定的时间只单独处理一个连接,效率高,但内存使用比较大。
优点:适合于没有线程安全库,需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求;且成熟稳定,兼容所有新老模块。
缺点:一个进程相对占用更多的系统资源,消耗更多的内存。而且,它并不擅长处理高并发请求,在这种场景下,它会将请求放进队列中,一直等到有可用进程,请求才会被处理;不擅长处理高并发请求
worker
worker使用了多进程和多线程的混合模式,worker模式也同样会先预派生一些子进程,然后每个子进程创建一些线程,同时包括一个监听线程,每个请求过来会被分配到一个线程来服务。
优点:线程比起进程会更轻量,因为线程是通过共享父进程的内存空间,因此,内存的占用会减少一些,在高并发,高流量的场景下会比prefork有更多可用的线程,表现会更优秀一些;
缺点:如果一个线程出现了问题也会导致同一进程下的线程出现问题,如果是多个线程出现问题,也只是影响Apache的一部分,而不是全部。由于用到多进程多线程,需要考虑到线程的安全了,在使用keep-alive长连接的时候,某个线程会一直被占用,即使中间没有请求,需要等待到超时才会被释放(该问题在prefork模式下也存在)
event
Apache最新的工作模式,它和worker模式很像
优点:不同的是在于它解决了keep-alive长连接的时候占用线程资源被浪费的问题(HTTP的Keepalive方式能减少TCP连接数量和网络负载),在event工作模式中,会有一些专门的线程用来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务器的线程,执行完毕后,又允许它释放。这增强了在高并发场景下的请求处理
缺点:不支持https
3、常见服务器返回返回状态值
200:ok,请求下载成功
201:create ok,上传成功
403:forbidden,表示客户端没有权限访问所请求的资源
404:Not Found,表示客户端所请求的资源不存在
500:Internal Server Error,服务器内部错误
502:Bad Gateway,代理服务器从上游服务器获取到的是伪响应
4、编译安装的优点
源码编译安装的软件的版本较yum一键安装的版本更新;
源码编译安装可控性较强,按需安装;
5、编译安装apache
第一步:上传安装包(安装包共三个(apr、apr-util、httpd)
╭─[email protected] ~
╰─➤ rz #基于lrzsz软件(用于Windows和linux之间文件传输);可yum下载
╭─[email protected] ~
╰─➤ ls
anaconda-ks.cfg apr-1.5.2.tar.gz apr-util-1.5.4.tar.gz httpd-2.4.20.tar.gz
第二步:解压包
╭─root@localhost.localdomain ~
╰─➤ tar -xf apr-1.5.2.tar.gz
╭─root@localhost.localdomain ~
╰─➤ tar -xf apr-util-1.5.4.tar.gz
第三步:解决依赖包
╭─root@localhost.localdomain ~
╰─➤ yum install gcc gcc-c++ ncurses-devel ncurses pcre pcre-devel openssl-devel zlib-devel -y
第四步:编译安装apr
╭─[email protected] ~
╰─➤ cd /apr-1.5.2
╭─[email protected] ~/apr-1.5.2
╰─➤ ./configure --prefix=/usr/local/apr && make && make install
第五步:编译安装apr-util
╭─root@localhost.localdomain ~/apr-1.5.2
╰─➤ cd ..
╭─root@localhost.localdomain ~
╰─➤ cd apr-util-1.5.4/
╭─root@localhost.localdomain ~/apr-util-1.5.4
╰─➤ ./configure --with-apr=/usr/local/apr \
--prefix=/usr/local/apr-util && make && make install
编译安装httpd的常见报错解决
第六步:编译安装httpd
╭─root@localhost.localdomain ~/apr-util-1.5.4
╰─➤ cd ..
╭─root@localhost.localdomain ~
╰─➤ tar -xf httpd-2.4.20.tar.gz
╭─root@localhost.localdomain ~
╰─➤ cd httpd-2.4.20
╭─root@localhost.localdomain ~/httpd-2.4.20
╰─➤ ./configure --help #查看
╭─root@localhost.localdomain ~/httpd-2.4.20
╰─➤ ./configure \
> --with-apr=/usr/local/apr \
> --with-apr-util=/usr/local/apr-util \
> --with-mpm=event \
> --prefix=/usr/local/httpd2.4 \
> --enable-so \
> --enable-ssl \
> --enable-cache \
> --enable-deflate \
> --enable-rewrite \
> && make && make install
第七步:启动apache
╭─[email protected] ~/httpd-2.4.20
╰─➤ cd /usr/local/httpd2.4/bin
╭─[email protected] /usr/local/httpd2.4/bin
╰─➤ ls
ab apxs dbmmanage envvars-std htcacheclean htdigest httpd logresolve
apachectl checkgid envvars fcgistarter htdbm htpasswd httxt2dbm rotatelogs
╭─[email protected] /usr/local/httpd2.4/bin
╰─➤ ./apachectl start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
╭─[email protected] /usr/local/httpd2.4/bin
╰─➤ ss -tnl | grep 80
LISTEN 0 128 *:80 *:*
╭─[email protected] /usr/local/httpd2.4/bin
╰─➤
第八步:在任何路径下执行apachectl(执行命令1和命令2即可)
╭─[email protected] /usr/local/httpd2.4/bin
╰─➤ vim /etc/profile.d/httpd.sh #命令1
...
export PATH=/usr/local/httpd2.4/bin:$PATH
...
╭─[email protected] /usr/local/httpd2.4/bin
╰─➤ cat /etc/profile.d/httpd.sh
export PATH=/usr/local/httpd2.4/bin:$PATH
╭─[email protected] /usr/local/httpd2.4/bin
╰─➤ echo $PATH #PATH为环境变量
/usr/local/httpd2.4/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
╭─[email protected] /usr/local/httpd2.4/bin
╰─➤ export /etc/profile.d/httpd.sh
export: not valid in this context: /etc/profile.d/httpd.sh
╭─[email protected] /usr/local/httpd2.4/bin
╰─➤ source /etc/profile.d/httpd.sh #命令2
拓展PATH环境变量讲解https://www.cnblogs.com/hust-chenming/p/4943268.html
6、apache主配置文件简介
ServerRoot "/usr/local/httpd2.4"
##主配置文件的目录
Listen 80
##监听的端口
ServerAdmin [email protected]
##指定管理员邮箱
ServerName www.example.com:80
##指定域名
DocumentRoot "/usr/local/httpd2.4/htdocs"
##指定网络根目录
DirectoryIndex index.html
##网站首页文件
ErrorLog "logs/error_log"
##错误日志
7、基于端口创建虚拟主机
第一步:修改配置文件
╭─[email protected] /usr/local/httpd2.4/bin
╰─➤ cd /usr/local/httpd2.4/conf
╭─[email protected] /usr/local/httpd2.4/conf
╰─➤ ls
extra httpd.conf magic mime.types original
╭─[email protected] /usr/local/httpd2.4/conf
╰─➤ vim httpd.conf #找到httpd的主配置文件,并编辑
#文件末尾添加内容:
...
<VirtualHost *:81>
documentroot /usr/local/httpd2.4/htdocs/du1
directoryindex index.html
</VirtualHost>
<VirtualHost *:82>
documentroot /usr/local/httpd2.4/htdocs/du2
directoryindex index.html
</VirtualHost>
...
/Listen #找到Listen 并监听81、 82端口
...
#Listen 12.34.56.78:80
Listen 80
Listen 81
Listen 82
...
第二步:创建网站根目录
╭─[email protected] /usr/local/httpd2.4/conf
╰─➤ mkdir /usr/local/httpd2.4/htdocs/du1
╭─[email protected] /usr/local/httpd2.4/conf
╰─➤ mkdir /usr/local/httpd2.4/htdocs/du2
第三步:写入测试文件
╭─[email protected] /usr/local/httpd2.4/conf
╰─➤ echo "hello word" >> /usr/local/httpd2.4/htdocs/du1/index.html
╭─[email protected] /usr/local/httpd2.4/conf
╰─➤ echo "good" >> /usr/local/httpd2.4/htdocs/du2/index.html
第四步:重启apache
╭─[email protected] /usr/local/httpd2.4
╰─➤ apachectl restart
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
第四步:测试
╭─[email protected] /usr/local/httpd2.4
╰─➤ curl 192.168.80.3:81
hello word
╭─[email protected] /usr/local/httpd2.4
╰─➤ curl 192.168.80.3:82
good
8、基于域名创建虚拟主机
第一步:修改配置文件
╭─[email protected] /usr/local/httpd2.4
╰─➤ vim /usr/local/httpd2.4/conf/httpd.conf
...
<VirtualHost 192.168.80.3>
documentroot /usr/local/httpd2.4/htdocs/du1
directoryindex index.html
servername www.du1.com
</VirtualHost>
<VirtualHost 192.168.80.3>
documentroot /usr/local/httpd2.4/htdocs/du2
directoryindex index.html
servername www.du2.com
</VirtualHost>
...
第二步:解析域名
╭─[email protected] /usr/local/httpd2.4
╰─➤ vim /etc/hosts
#添加一行
...
192.168.80.3 www.du1.com
192.168.80.3 www.du2.com
...
#windows中的域名解析文件:Windows(C:)> windows > system32 > drivers > etc > HOSTS 文件
第三步:重启apache
╭─[email protected] /usr/local/httpd2.4
╰─➤ apachectl restart
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
第四步:测试
╭─[email protected] /usr/local/httpd2.4
╰─➤ curl www.du1.com
hello word
╭─[email protected] /usr/local/httpd2.4
╰─➤ curl www.du2.com
good
9、上线静态网站
第一步:上传软件包至网站根目录 (资源池中下载game.zip包)
╭─[email protected] /usr/local/httpd2.4
╰─➤ cd /usr/local/httpd2.4/htdocs
╭─[email protected] /usr/local/httpd2.4/htdocs
╰─➤ rz #上传game.zip
╭─[email protected] /usr/local/httpd2.4/htdocs
╰─➤ unzip game.zip
... #解压内容略
╭─[email protected] /usr/local/httpd2.4/htdocs
╰─➤ cd game
╭─[email protected] /usr/local/httpd2.4/htdocs/game
╰─➤ ls
images jquery-1.8.3.min.js readme.xls sky_fight.html sky.php
第二步:访问
10、上线动态网站 (资源池中下载wordpress-3.3.1-zh_CN.zip)
LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写:
Linux,操作系统
Apache,网页服务器
MariaDB或MySQL,数据库管理系统(或者数据库服务器)
PHP、Perl或Python,脚本语言
注意:由于手动安装的apache和PHP结合步骤繁琐本章不做介绍,故本章用yum源安装的apache做LAMP架构演示。
第一步:部署LAMP架构
╭─root@localhost.localdomain ~
╰─➤ yum install httpd php-mysql mariadb-server php -y
╭─root@localhost.localdomain ~
╰─➤ apachectl stop
第二步:启动数据库
╭─root@localhost.localdomain ~
╰─➤ systemctl restart mariadb
第三步:上传安装包并配置文件
╭─[email protected] ~
╰─➤ cd /var/www/html
╭─[email protected] /var/www/html
╰─➤ rz #上传wordpress-3.3.1-zh_CN.zip
╭─[email protected] /var/www/html
╰─➤ unzip wordpress-3.3.1-zh_CN.zip
╭─[email protected] /var/www/html
╰─➤ cp -a wordpress/* .
╭─[email protected] /var/www/html
╰─➤ ls
index.php wp-activate.php wp-comments-post.php wp-cron.php wp-login.php wp-settings.php
license.txt wp-admin wp-config.php wp-includes wp-mail.php wp-signup.php
readme.html wp-app.php wp-config-sample.php wp-links-opml.php wp-pass.php wp-trackback.php
wordpress wp-blog-header.php wp-content wp-load.php wp-register.php xmlrpc.php
╭─[email protected] /var/www/html
╰─➤ cp wp-config-sample.php wp-config.php
╭─[email protected] /var/www/html
╰─➤ vim wp-config.php
...
// ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //
/** WordPress 数据库的名称 */
define('DB_NAME', 'du');
/** MySQL 数据库用户名 */
define('DB_USER', 'du');
/** MySQL 数据库密码 */
define('DB_PASSWORD', '123');
/** MySQL 主机 */
define('DB_HOST', 'localhost');
...
第四步:配置数据库
╭─root@localhost.localdomain /var/www/html
╰─➤ mysql -uroot
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.52-MariaDB MariaDB Server
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> create database du;
Query OK, 1 row affected (0.01 sec)
MariaDB [(none)]> grant all on *.* to du@'localhost' identified by '123';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> exit
Bye
第五步:修改主配置文件,指定首页默认文件
╭─[email protected] /var/www/html
╰─➤ vim /etc/httpd/conf/httpd.conf
...
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
...
╭─[email protected] /usr/local/httpd2.4/htdocs
╰─➤ systemctl restart httpd
第六步:访问
链接:https://www.cnblogs.com/du-z/p/10917936.html
(版权归原作者所有,侵删)
微信扫码关注该文公众号作者