目录
LAMP
LAMP是一个常见的开发平台和运行环境,主要用于支持动态网站和Web应用程序的开发和部署。
- L: Linux,指操作系统,通常是Linux操作系统。
- A: Apache,指Web服务器软件,常用于托管网站。
- M: MySQL,指关系型数据库管理系统,用于存储和管理数据。
- P: PHP,指编程语言,用于开发动态网页内容。
Apache
起源
- 源于A Patchy Server,著名的开源Web服务软件
- 1995年时,发布Apache服务程序的1.0版本
- 由Apache软件基金会(ASF)负责维护
- 最新的名称为“Apache HTTP Server”
主要特点
- 开放源代码、跨平台应用
- 支持多种网页编程语言
- 模块化设计、运行稳定、良好的安全性
软件版本
- 1.X
- 目前最高版本是1.3,运行稳定
- 向下兼容性较好,但缺乏一些较新的功能
- 2.X
- 目前最高版本是2.4
- 具有更多的功能特性
- 与1.X相比,配置管理风格存在较大差异
编译安装httpd服务器
编译安装的优点
- 具有较大的自由度,功能可定制
- 可及时获得最新的软件版本
- 普遍适用于大多数Linux版本,便于移植使用
- 获取Apache服务器的源码包:http://httpd.apache.org/download.cgi
操作步骤
准备工作
为了方便实验,关闭防火墙systemctl stop firewalld并关闭内核安全机制setenforce 0
使用rpm -qa httpd查看系统中是否安装了httpd,如果有的话需要卸载
安装源码包所需的开发环境yum -y install apr-util-devel pcre-devel gcc*
安装源码软件包
将httpd的源码软件包拖到Xshell中
使用tar zxvf httpd-2.4.25.tar.gz命令解压,然后cd进入解压的目录
配置安装
进入解压的目录中,使用ls命令可以看到./configure文件,该文件是一个脚本,通过该脚本指定该软件包要安装的功能
通过./configure脚本指定启用的功能
[root@localhost httpd-2.4.25]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi # 出现下方的输出信息,代表你的配置成功了,就可以进行下一步 configure: summary of build options: Server Version: 2.4.25 # httpd版本 Install prefix: /usr/local/httpd # 安装路径 C compiler: gcc -std=gnu99 # C语言编译器 CFLAGS: -pthread LDFLAGS: LIBS: CPPFLAGS: -DLINUX -D_REENTRANT -D_GNU_SOURCE C preprocessor: gcc -E
- --prefix:指定安装的路径前缀;在配置文件中引用路径时,可以省去安装路径的前缀,而使用相对路径
- --enable-so:启用DSO(dynamic shared object;动态共享对象),允许在运行时动态地加载和卸载模块,而无需重新启动服务。
- --enable-rewrite:开启地址重写功能;URL重写允许你根据规则动态地改变请求的URL,这对于实现搜索引擎友好的URL、重定向、访问控制等非常有用。
- --enable-charset-lite:启用字符集支持,以便支持使用各种字符集编码的网页
- --enable-cgi:启用CGI(通用网关接口)脚本程序支持,允许Web服务器运行外部程序来形成动态Web内容。
编译
使用make命令执行编译操作,编译的结果是把源代码软件包的代码编译为二进制文件
安装
使用make install命令执行安装操作,到这一步就对源代码软件包安装结束了
优化执行路径
使用ln -s /usr/local/httpd/bin/* /usr/local/bin/命令创建软链接,使得可以在终端里直接使用命令而不需要加路径
使用httpd -v测试软件包安装是否正常
[root@localhost ~]# httpd -v Server version: Apache/2.4.25 (Unix) Server built: Jul 6 2024 11:57:00
添加服务
此时可以使用apachectl相关命令控制服务的状态,但是会提示没有设置服务名称
[root@localhost ~]# 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 [root@localhost ~]# apachectl stop 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
使用vim /usr/local/httpd/conf/httpd.conf命令在该文件的第200行将服务器名称取消注释
保存并退出,再使用apachectl命令就不会提示了
守护进程
通过systemd管理httpd,使其变成系统服务和守护进程
cd到服务目录,创建httpd的服务文件并添加内容
[root@localhost system]# cd /lib/systemd/system/ [root@localhost system]# vim httpd.service # 添加内容 [Unit] Description=miao shu After=network.target [Service] Type=forking PIDFile=/usr/local/httpd/logs/httpd.pid ExecStart=/usr/local/bin/apachectl $OPTIONS ExecReload=/bin/kill -HUP $MAINPID [Install] WantedBy=multi-user.target
内容 | 说明 |
[Unit] | 指定systemd单元的基本信息 |
Description=miao shu | 描述了服务的简短说明或名称 |
After=network.target | 在网络服务之后启动 |
[Service] | 定义了服务的执行方式和相关设置 |
Type=forking | 指定服务的启动类型为forking,即启动时会派生出一个子进程 |
PIDFile=/usr/local/httpd/logs/httpd.pid | 指定PID文件的位置,用于记录主进程的PID。 |
ExecStart=/usr/local/bin/apachectl $OPTIONS | 定义了服务启动时执行的命令,这里使用apachectl启动Apache,并传递了$OPTIONS,这个变量通常用来传递Apache HTTP服务器的启动参数,比如端口号、配置文件路径等。 |
ExecReload=/bin/kill -HUP $MAINPID | 定义了重新加载配置时执行的命令,发送SIGHUP信号给主进程以实现配置重载。 -HUP 是一个信号名称,HUP是SIGHUP信号的缩写。用于通知进程重新加载配置文件或进行其他类型的重新初始化。使新的配置生效而无需停止服务。 $MAINPID 是一个环境变量,它是由systemd设置的,表示当前服务的主进程的PID(进程ID)。 |
[Install] | 定义了如何安装这个单元 |
WantedBy=multi-user.target | 指定服务应该在multi-user.target(即多用户模式;运行级别3)下启动,表示这个服务是系统的一部分,并在多用户环境中自动启动。 |
使用httpd -t命令测试配置文件是否有语法错误
[root@localhost ~]# httpd -t Syntax OK
使用systemctl daemon-reload命令重载一下systemd
此时就可以使用systemctl命令来管理httpd服务的状态了
[root@localhost system]# systemctl start httpd # 测试可以在浏览器内输入当前虚拟机的ip地址来测试httpd服务是否能正常访问 [root@localhost system]# netstat -anpt | grep httpd tcp6 0 0 :::80 :::* LISTEN 29818/httpd [root@localhost system]# systemctl stop httpd [root@localhost system]# netstat -anpt | grep httpd [root@localhost system]#
配置httpd
httpd默认存放网页的位置:/usr/local/httpd/htdocs/
如果修改该路径下默认的index.html文件内测试的文本为中文,再在浏览器中访问就变成中文乱码,就需要修改编码格式
<html><body><h1>你好</h1></body></html>
通过添加head头部标签,在头部标签内通过meta标签的charset属性,声明编码格式为utf-8
修改index.html文件内容如下
不需要重启服务,直接刷新浏览器即可,此时就显示正常了
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>标题</title> </head> <body> <h1>你好</h1> </body> </html>
查看 Web 站点的访问情况
[root@localhost system]# tail /usr/local/httpd/logs/access_log
虚拟主机
单台主机运行多个站点的技术
类型
- 基于ip的虚拟主机(需要多个ip)
- 基于端口的虚拟主机(一个ip,绑定多个端口)
- 基于域名的虚拟主机(最常用)
部署基于域名的虚拟主机
开启第二台虚拟机(192.168.10.102)作为客户端
为虚拟主机提供域名解析(两个域名)
使用vim /etc/hosts命令修改hosts文件为一下内容
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.10.101 www.e1.com 192.168.10.101 www.e2.com
此时在客户端主机(102)使用curl命令访问刚刚写入的两个ip,都能访问到一样的网页内容了
不同ip访问不同的内容
在服务端(101)创建两个ip对应的文件夹到指定位置
[root@localhost ~]# mkdir -p /var/www/html/e1com [root@localhost ~]# mkdir -p /var/www/html/e2com
再使用重定向创建两个ip对应的首页文件
[root@localhost ~]# echo "www.e1.com" > /var/www/html/e1com/index.html [root@localhost ~]# echo "www.e2.com" > /var/www/html/e2com/index.html
使用vim /usr/local//httpd/conf/extra/httpd-vhosts.conf命令修改虚拟主机的配置文件
改为以下内容
# 所有用户的请求都授权访问 <Directory "/var/www/html"> Require all granted </Directory> <VirtualHost *:80> ServerAdmin webmaster@dummy-host.example.com # 管理员邮箱地址 DocumentRoot "/var/www/html/e1com" # 指定网页文件位置 ServerName www.e1.com # 网站域名,要和客户端配置的域名保持一致,Web服务器通过ServerName来匹配应答的URL ServerAlias www.dummy-host.example.com # 网站别名 ErrorLog "logs/www.e1.com.error_log" # 错误日志位置 CustomLog "logs/www.e1.com.access_log" common # 访问日志位置 </VirtualHost> <VirtualHost *:80> ServerAdmin webmaster@dummy-host2.example.com DocumentRoot "/var/www/html/e2com/" ServerName www.e2.com ErrorLog "logs/www.e2.com.error_log" CustomLog "logs/www.e2.com.access_log" common </VirtualHost>
再修改httpd的主配置文件:vim /usr/local//httpd/conf/httpd.conf
但是此时httpd服务并没有加载vhosts.conf文件(虚拟主机配置文件),所以要在httpd的主配置文件中使用Include命令包含到当前文件中,相当于在Include语句中把要包含的代码复制粘贴了过来
通过Include命令也实现了httpd服务的模块化功能管理
在第483行将注释去掉
最后使用systemctl restart httpd重启服务
实现基于域名访问不同内容
部署基于IP地址的虚拟主机
[root@localhost ~]# cd /etc/sysconfig/network-scripts/ [root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0 [root@localhost network-scripts]# vim ifcfg-ens33:0 # 修改IP地址为210并修改名称 IPADDR=192.168.10.210 NAME=ens33:0 DEVICE=ens33:0 # 保存并退出
使用systemctl restart network重启网络
使用ip a命令就可以看到一个网卡拥有了两个不同的ip地址
修改虚拟主机配置文件:vim /usr/local//httpd/conf/extra/httpd-vhosts.conf
修改访问对应网页的ip地址
保存并退出,使用systemctl restart httpd重启服务
来到客户端主机(102)使用ip测试访问是否成功
部署基于端口的虚拟主机
修改虚拟主机配置文件:vim /usr/local//httpd/conf/extra/httpd-vhosts.conf
添加监听端口
实现基于端口访问不同站点
去客户端主机(102)测试结果如下
MySQL
MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。
MySQL的编译安装
使用rpm -q mysql-server mysql命令查询系统内是否安装了mysql,如果有,需要卸载才能进行下一步操作
使用yum -y install ncurses-devel autoconf命令安装ncurses开发包和自动化配置脚本的工具
ncurses-devel 是针对 ncurses 库的开发包。ncurses 是一个用于 Unix-like 系统的库,提供了控制终端屏幕输出和输入的函数,允许开发者创建基于文本的用户界面(TUI)。这个开发包包含了编译和开发 ncurses 应用程序所需的头文件和静态库文件。
将mysql的源码软件包拖到Xshell中
使用tar zxvf mysql-5.6.36.tar.gz命令解压,然后cd进入解压的目录
使用yum -y install cmake命令安装cmake编译命令
使用useradd -M -s /sbin/nologin mysql命令创建一个名为 mysql 的用户,该用户没有家目录,并且无法通过常规方式登录系统
使用cmake命令根据指定的参数,生成 MySQL 的配置文件和构建脚本
- -DCMAKE_INSTALL_PREFIX=/usr/local/mysql 指定安装目录为 /usr/local/mysql。
- -DSYSCONFDIR=/etc/ 指定配置文件目录为 /etc/。
- -DDEFAULT_CHARSET=utf8 指定默认字符集为 UTF-8。
- -DDEFAULT_COLLATION=utf8_general_ci 指定默认排序规则为 UTF-8 的 utf8_general_ci。
- -DWITH_EXTRA_CHARSETS=all 启用所有额外的字符集。
[root@localhost mysql-5.6.36]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc/ -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all
使用make命令执行编译操作,再使用make install命令执行安装操作
cd到/usr/local/目录下,使用chown -R mysql:mysql mysql/命令修改mysql目录及其所有子目录的属主和属组都为mysql
使用rm -rf /etc/my.cnf命令删除mariadb在安装系统时生成的文件,需要改为mysql的配置文件
进入 mysql 解压安装包目录下的 support-files 目录,拷贝 mysql 提供的模板配置文件到 /etc/ 下,并修改文件名为 my.cnf
[root@localhost ~]# cd mysql-5.6.36 [root@localhost mysql-5.6.36]# cd support-files/ [root@localhost support-files]# cp my-default.cnf /etc/my.cnf
MySQL初始化
使用源代码软件包安装的MySQL如果不初始化是无法正常使用的,除非是使用yum命令安装的
进入mysql的脚本目录下,可以看到mysql_install_db脚本文件
执行改脚本并指定运行时使用的用户、MySQL安装目录、MySQL数据目录的位置来初始化数据库
[root@localhost ~]# cd /usr/local/mysql/scripts/ [root@localhost scripts]# ls mysql_install_db [root@localhost scripts]# ./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
设置环境变量
通过重定向将环境变量参数追加到全局变量的文件末尾
然后重新加载全局变量文件
[root@localhost ~]# echo "export PATH=$PATH:/usr/local/mysql/bin">> /etc/profile [root@localhost ~]# source /etc/profile
拷贝服务文件
拷贝mysql提供的服务文件到/etc/init.d/目录下并重命名为mysqld
为mysqld文件添加执行权
[root@localhost support-files]# cp mysql.server /etc/init.d/mysqld [root@localhost support-files]# chmod +x /etc/init.d/mysqld [root@localhost support-files]# chkconfig --add mysqld # 因为不需要手动添加路径,所以添加的服务名要和/etc/init.d/目录下的文件名一致
现在就可以使用chkconfig命令或systemctl命令来控制mysqld的运行状态
通过netstat命令可以看到mysql服务对应的端口号是3306
[root@localhost support-files]# chkconfig mysqld on # 开启自启mysql [root@localhost support-files]# systemctl start mysqld [root@localhost support-files]# netstat -anpt | grep mysql tcp6 0 0 :::3306 :::* LISTEN 1759/mysqld
设置mysql密码
[root@localhost ~]# mysql -u root -p # 此时的mysql是空密码,所以直接登入了mysql mysql>set password=password('123456'); # 设置密码 mysql>exit # 通过密码登录mysql [root@localhost ~]# mysql -u root -p123456
PHP
PHP(Hypertext Preprocessor)是一种流行的开源服务器端脚本语言,特别适用于网页开发和动态网站的创建。它可以嵌入到HTML中,通常用于生成动态网页内容,或者处理表单数据等任务。
构建PHP运行环境
安装 PHP 软件包
1:准备工作
为了避免发生程序冲突等现象,建议先将 RPM 方式安装的 PHP 及相关依赖包
如果安装时找不到lxz-devel软件包,就要把仓库源换位阿里云的yum仓库再安装
[root@www ~]# rpm -e php php-cli php-ldap php-common php-mysql --nodeps [root@www ~]# yum -y install zlib-devel libxml2 libxml2-devel lxz-devel
安装扩展工具库
(1)安装 libmcrypt
需要安装三个扩展工具库,可以设置好阿里的yum仓库,用yum安装
[root@www ~]# yum -y install libmcrypt libmcrypt-devel mcrypt mhash
3:编译安装 PHP
(1)解包
[root@www ~]# tar zxvf php-5.5.38.tar.gz [root@www ~]# cd php-5.5.38
(2)配置
[root@www php-5.5.38]# ./configure --prefix=/usr/local/php5 --with-mcrypt --with-apxs2=/usr/local/httpd/bin/apxs --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-config-file-path=/usr/local/php5 --enable-mbstring
- --prefix=/usr/local/php5:指定了 PHP 的安装目录前缀。在这个例子中,PHP 将被安装到 /usr/local/php5 目录下。
- --with-mcrypt:启用对 mcrypt 的扩展。Mcrypt 是一个加密库,PHP 可以通过这个选项与之集成,以便在应用程序中使用加密算法。
- --with-apxs2=/usr/local/httpd/bin/apxs:指定了 Apache HTTP Server 的 APXS 工具的路径,用于编译和安装 PHP 的 Apache 模块(即 mod_php)。
- --with-mysql=/usr/local/mysql:指定 MySQL 客户端函数集的路径,用于支持 PHP 的 MySQL 扩展。
- --with-mysqli=/usr/local/mysql/bin/mysql_config:指定扩展的 MySQLi 函数集的配置路径,通常是 mysql_config 可执行文件的路径,用于支持 MySQL 的改进版接口。
- --with-config-file-path=/usr/local/php5:指定 PHP 的配置文件(php.ini)的存放路径,即 PHP 将会在 /usr/local/php5 目录下寻找和存储其配置文件。
- --enable-mbstring:a启用 mbstring 扩展,这是 PHP 中处理多字节字符串的扩展,用于支持多语言编码处理(如UTF-8)。
PHP注意事项
当安装 PHP 时,根据选择的函数集不同,会影响到 PHP 连接 MySQL 数据库时使用的连接方式。如果选择使用 mysqlnd 函数集(例如 --with-mysqli=mysqlnd),
则 PHP 可以使用主机的 IP 地址进行连接。而如果选择本地函数集(例如 --with-apxs2=/usr/local/httpd/bin/apxs),
PHP 只能使用 'localhost'、'127.0.0.1' 或本地主机名进行连接,而不能使用主机的 IP 地址(例如 192.168.10.101)。
Apache注意事项
在整合 PHP 到 Apache 时,使用 --with-apxs2=/usr/local/httpd/bin/apxs 选项
会利用 Apache 的 APXS 工具从 mod_so 模块加载 PHP 作为模块(mod_php)到 Apache 中。重要的是,Apache 必须启用 mod_so 模块以支持这一功能。
(3)编译及安装
[root@www php-5.5.38]# make && make install
设置 LAMP 组件环境
(1)php.ini 配置调整
拷贝php提供的配置文件到安装目录下并重命名为php.ini,然后修改配置文件中的个别配置
[root@www php-5.5.38]# cp php.ini-development /usr/local/php5/php.ini [root@www php-5.5.38]# vim /usr/local/php5/php.ini default_charset = "UTF-8" # 去掉前面的注释 short_open_tag = On # 修改值 extension=php_mysqli.dll # 去掉前面的注释
(2)添加 ZendGuardLoader 优化模块
把ZendGuardLoader源代码软件包拖入XShell中,使用tar命令解压后进入解压目录。拷贝ZendGuardLoader.so,这个文件用来加载通过Zend Guard加密果的PHP脚本文件
安装ZendGuardLoader以便执行经过加密的PHP脚本文件
[root@www~]#tar zxvf zend-loader-php5.5-linux-x86_64_update1.tar.gz [root@www~]#cd zend-loader-php5.5-linux-x86_64 [root@www zend-loader-php5.5-linux-x86_64]#cp ZendGuardLoader.so /usr/local/php5/lib/php [root@www ~]# vim /usr/local/php5/php.ini
在文件开头的[PHP]单元下面添加:
[PHP] zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so zend_loader.enable=1
httpd.conf 配置调整
编辑httpd的配置文件vim /usr/local/httpd/conf/httpd.conf
在末行模式搜索index(:/index)添加优先使用的默认索引文件
在末行模式搜索AddType(:/AddType;注意区分大小写)
最后使用httpd -t然后使用systemctl restart httpd重启httpd服务
测试 LAMP 协同工作
1:测试 PHP 网页能否正确显示
调用phpinfo函数在浏览器上展示php的信息
[root@www ~]# vim /usr/local/httpd/htdocs/test1.php <?php phpinfo( ); ?>
此时使用浏览器访问192.168.10.101/test.php
可以正常显示php版本信息
2:测试 PHP 网页能否访问 MySQL 数据库
[root@www ~]# vim /usr/local/httpd/htdocs/test2.php <?php $link=mysqli_connect('localhost','root','123456'); if($link) echo "MySQL数据库连接成功"; mysqli_close($link); ?>
对数据库的连接授权,授权后可以使用主机名连接
[root@localhost ~]# mysql -u root -p123456 use mysql; grant all on *.* to root@'192.168.10.101' identified by '123456';
如果用的是mysqlnd,要用IP地址进行连接,127.0.0.1或192.168.10.101都可以
LAMP 架构应用实例
1:部署 phpMyAdmin 系统
拖入phpMyAdmin压缩包,解压包并将解压出的目录复制到网站目录
[root@www ~]# tar zxvf phpMyAdmin-4.7.2-all-languages.tar.gz [root@www ~]# mv phpMyAdmin-4.7.2-all-languages/ /usr/local/httpd/htdocs/phpMyAdmin
2:建立配置文件 config.inc.php
拷贝一份phpMyAdmin提供的模板文件作为配置文件
[root@www ~]# cd /usr/local/httpd/htdocs/phpMyAdmin [root@www phpMyAdmin]# cp config.sample.inc.php config.inc.php
如果使用的函数集是msqlnd,需要修改文件
[root@www phpMyAdmin]# vim config.inc.php // 第31行,修改ip $cfg['Servers'][$i]['host'] = '192.168.10.101';
3:访问 phpMyAdmin 的 Web 管理界面
通过root账户和设置的mysql密码登录MySQL