一:Apache 网站服务基础
1.1:apache简介
1:Apache 的起源
Apache HTTP服务器起源于1995年,最初是为了解决当时快速增长的World Wide Web需求而诞生的。它的发展始于对国家超级计算机应用中心(NCSA)的HTTPd服务器的一系列补丁和扩展。由于这些补丁的积累,“a patchy server”(意即充满补丁的服务器)的概念逐渐形成,从而得名“Apache”。随着时间的推移,它超越了原有的补丁集合,演变成一个功能全面且强大的独立项目,由Apache Software Foundation维护。
2:Apache 的主要特点
- 开源性:Apache 是开源软件,这使得全球的开发者能够参与到它的改进和功能扩展中,促进了其快速发展和广泛应用。
- 跨平台:几乎支持所有主流的操作系统平台,包括Linux、Windows、macOS等,提供了极高的灵活性和可移植性。
- 模块化设计:通过动态加载模块的方式,用户可以根据需要启用或禁用特定功能,如SSL、URL重写、压缩等,增强了定制性和效率。
- 稳定性与安全性:Apache 以其高度稳定性和安全性著称,常被用于高流量的网站和服务中。
- 性能与可伸缩性:支持多种性能优化措施,如事件驱动模型(MPMs),能够处理大量并发连接,同时设计上便于水平扩展以应对更高的访问量。
- 丰富的文档和支持:拥有庞大的用户社区和详尽的文档资源,便于用户学习、配置和故障排查。
- 广泛的生态系统:作为LAMP栈的核心组成部分,与MySQL、PHP等技术紧密结合,广泛应用于Web开发和托管场景。
1.2:安装 httpd 服务器
1:准备工作
- 确保系统已安装必要的依赖,如GCC(GNU Compiler Collection)、make工具、以及一些库文件(如pcre-devel、zlib-devel等,具体依赖根据Apache版本可能有所不同)。
- 下载Apache HTTP Server的源代码包,可以从官方网站获取最新版本,例如通过
wget
命令下载。
2:源码编译及安装
(1)解包
tar -xvf httpd-<version>.tar.gz
cd httpd-<version>
(请将<version>
替换为实际下载的版本号)
(2)配置
配置步骤通常包括指定安装路径、启用或禁用特定模块、指定编译参数等。例如:
./configure --prefix=/usr/local/apache --enable-so --with-mpm=event --with-included-apr
这里,--prefix
指定了安装目录,--enable-so
启用了动态加载模块的功能,--with-mpm=event
选择了事件驱动的多路处理模块以提高性能,--with-included-apr
使用随Apache源代码一起提供的APR库。
(3)编译及安装
make
sudo make install
3:确认安装结果
- 可以通过运行安装目录下的
bin/apachectl
命令来测试安装是否成功,例如:
/usr/local/apache/bin/apachectl -v
此命令应显示Apache的版本信息。
4:优化执行路径
为了方便使用,可以将Apache的可执行文件路径添加到系统的PATH环境变量中:
echo 'export PATH=$PATH:/usr/local/apache/bin' >> ~/.bashrc
source ~/.bashrc
这样就可以在任何位置直接运行apachectl
命令。
5:添加 httpd 系统服务
为了让Apache作为系统服务自动启动和管理,可以创建Systemd单元文件或在init系统中创建相应的脚本。以Systemd为例:
sudo nano /etc/systemd/system/httpd.service
在文件中添加以下内容:
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/apache/logs/httpd.pid
ExecStart=/usr/local/apache/bin/apachectl start
ExecStop=/usr/local/apache/bin/apachectl stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
保存后,使用以下命令分别启动服务、设置开机启动,并查看状态:
sudo systemctl daemon-reload
sudo systemctl start httpd
sudo systemctl enable httpd
sudo systemctl status httpd
二:httpd 服务器的基本配置
2.1:Web 站点的部署过程
1:确定网站名称、IP 地址
- 网站名称:为您的网站选择一个易于识别和记忆的名字,如
example.com
。 - IP地址:确保您的服务器具有固定的公网IP地址或使用域名解析指向服务器的私有IP地址(如果是内部网络部署)。
2:配置并启动 httpd 服务
(1)配置 httpd 服务
- 编辑Apache的主配置文件
httpd.conf
,通常位于/usr/local/apache/conf/
或/etc/httpd/conf/
,根据实际情况而定。 - 设置服务器根目录(DocumentRoot),指定网页文件存放的位置。例如:
DocumentRoot "/var/www/html"
- 配置监听的IP地址和端口(默认是80),例如:
Listen 80
ServerName your_domain_name_or_IP
- 允许目录列表(可选),在
<Directory "/var/www/html">
部分添加:
Options Indexes FollowSymLinks
- 保存配置文件并退出编辑器。
(2)启动 httpd 服务
- 使用 Systemd 系统的服务管理命令启动:
sudo systemctl start httpd
3:部署网页文档
- 将您的网页文件上传至之前配置的
DocumentRoot
目录,例如/var/www/html/
。
4:在客户机中访问 Web 站点
- 打开浏览器,在地址栏输入您的网站域名或IP地址,如
http://your_domain_name_or_IP
,按回车键访问。
5:查看 Web 站点的访问情况
- 日志查看:Apache的访问日志和错误日志是监控网站访问情况的重要途径。默认情况下,这些日志文件可能位于
/var/log/httpd/
目录下,名为access_log
和error_log
。 - 使用命令行查看最近的日志条目:
tail -f /var/log/httpd/access_log
这将实时显示访问日志的最新条目,帮助您了解谁在何时访问了哪些页面,以及是否有任何错误发生。
2.2:httpd.conf 配置文件
1:全局配置项
全局配置项影响整个Apache服务器的行为,它们通常位于配置文件的顶部,并且不位于任何特定的<Directory>
, <VirtualHost>
, 或其他容器内。以下是一些重要的全局配置项:
- ServerRoot: 指定Apache服务器的根目录。
ServerRoot "/etc/httpd"
- Listen: 指定Apache监听的IP地址和端口号。
Listen 80
- ServerName: 设置服务器的主机名或IP地址,用于识别服务器。
ServerName www.example.com:80
- DocumentRoot: 设置网站的根目录,即默认存放网页文件的目录。
DocumentRoot "/var/www/html"
- ErrorLog: 错误日志文件的路径。
ErrorLog "logs/error_log"
- CustomLog: 访问日志文件的路径及格式。
CustomLog "logs/access_log" common
- LogLevel: 设置日志级别,如debug、info、notice、warn、error、crit、alert、emerg。
LogLevel warn
2:区域配置项
区域配置项通常在特定的容器内定义,用于控制特定目录、文件或虚拟主机的行为。主要有以下几种类型的区域配置:
- Directory: 控制特定目录下的访问权限、执行权限、重定向等。
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
- FilesMatch: 针对特定文件类型或名称的设置。
<FilesMatch "\.php$">
SetHandler application/x-httpd-php
</FilesMatch>
- Location: 针对URL路径的特殊处理。
<Location "/secret">
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /etc/httpd/conf/.htpasswd
Require valid-user
</Location>
- VirtualHost: 用于配置多个虚拟主机,每个虚拟主机可以有不同的域名、端口、文档根目录等。
<VirtualHost *:80>
ServerName www.example1.com
DocumentRoot /var/www/example1
...
</VirtualHost>
<VirtualHost *:80>
ServerName www.example2.com
DocumentRoot /var/www/example2
...
</VirtualHost>
三:构建虚拟 Web 主机
3.1:基于域名的虚拟主机
1:为虚拟主机提供域名解析(两个域名)
- 注册域名:首先确保您拥有两个可用的域名,比如
site1.example.com
和site2.example.com
。 - DNS配置:登录到您的域名注册商或DNS提供商的控制面板,分别为这两个域名添加A记录或CNAME记录,指向您的服务器的IP地址。A记录直接指向IP,CNAME记录则指向另一个域名。例如:
site1.example.com
A记录指向192.0.2.1
(您的服务器IP)site2.example.com
A记录指向192.0.2.1
(同上)
2:为虚拟主机准备网页文档(两个网站)
- 在服务器上为每个虚拟主机创建独立的网页根目录,并放入相应的网页文件。
- 例如,为
site1
创建/var/www/site1
目录,放入首页文件如index.html
。 - 同样,为
site2
创建/var/www/site2
目录,并放置其网页文件。
- 例如,为
3:添加虚拟主机配置
- 编辑Apache的配置文件
httpd.conf
或者在/etc/httpd/conf.d/
目录下创建单独的配置文件,如vhosts.conf
。 - 添加以下虚拟主机配置:
<VirtualHost *:80>
ServerName site1.example.com
DocumentRoot /var/www/site1
ErrorLog logs/site1-error.log
CustomLog logs/site1-access.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName site2.example.com
DocumentRoot /var/www/site2
ErrorLog logs/site2-error.log
CustomLog logs/site2-access.log combined
</VirtualHost>
- 确保配置文件正确无误后,重启Apache服务以应用更改:
sudo systemctl restart httpd
4:在客户机中访问虚拟 Web 主机
- 使用浏览器,在地址栏分别输入两个虚拟主机的域名
http://site1.example.com
和http://site2.example.com
。 - 如果配置正确,您应该能看到各自网站的内容,证明基于域名的虚拟主机配置成功。
3.2:基于 IP 地址、基于端口的虚拟主机
1:为主机设置多个IP地址
- 分配IP地址:在服务器的网络配置中,您需要为其配置额外的IP地址。具体操作方法因操作系统而异,以下以Linux系统为例:
- 编辑网络配置文件,如
/etc/network/interfaces
(Debian/Ubuntu)或/etc/sysconfig/network-scripts/ifcfg-eth0
(CentOS/RHEL)。 - 添加静态IP地址配置,示例:
- 编辑网络配置文件,如
# 第二个IP地址配置
auto eth0:1
iface eth0:1 inet static
address 192.0.2.2
netmask 255.255.255.0
gateway 192.0.2.1
- 保存文件后,重启网络服务或执行
ifup
命令激活新的网络接口配置。
2:基于 IP 地址的虚拟主机
- 在Apache的配置文件中,为每个IP地址配置不同的虚拟主机:
<VirtualHost 192.0.2.1:80>
ServerName site1.example.com
DocumentRoot /var/www/site1
ErrorLog logs/site1-error.log
CustomLog logs/site1-access.log combined
</VirtualHost>
<VirtualHost 192.0.2.2:80>
ServerName site2.example.com
DocumentRoot /var/www/site2
ErrorLog logs/site2-error.log
CustomLog logs/site2-access.log combined
</VirtualHost>
- 重启Apache服务后,通过各自的IP地址即可访问对应的网站。
3:基于端口的虚拟主机
- 当您希望在同一IP地址上通过不同端口提供多个网站时,可以在Apache配置中设置:
<VirtualHost *:8080>
ServerName site1.example.com
DocumentRoot /var/www/site1_port
ErrorLog logs/site1_port-error.log
CustomLog logs/site1_port-access.log combined
</VirtualHost>
<VirtualHost *:8081>
ServerName site2.example.com
DocumentRoot /var/www/site2_port
ErrorLog logs/site2_port-error.log
CustomLog logs/site2_port-access.log combined
</VirtualHost>
- 访问时,用户需要在域名后加上指定的端口号,如
http://site1.example.com:8080
和http://site2.example.com:8081
。
四:MySQL 的编译安装
1:准备工作
(1)检查安装环境
- 确保您的系统满足MySQL的最低要求,包括足够的磁盘空间、内存和处理器能力。
- 检查系统中是否已经安装了MySQL或其他数据库软件,避免端口冲突和配置文件覆盖。
(2)安装cmake
CMake是一个跨平台的自动化构建系统,用于从源代码构建、测试和打包软件。在大多数Linux发行版中,可以通过包管理器安装CMake。
对于基于Debian/Ubuntu的系统:
sudo apt-get update
sudo apt-get install cmake
对于基于Red Hat/CentOS的系统:
sudo yum install cmake
或者对于较新版本的CentOS/RHEL使用dnf:
sudo dnf install cmake
对于Fedora:
sudo dnf install cmake
对于Arch Linux及其衍生版:
sudo pacman -S cmake
安装完CMake后,您可以继续进行MySQL的编译安装步骤。请注意,直接从源代码编译MySQL可能比使用预编译的二进制包更复杂,并且需要解决更多的依赖关系。如果您不特别需要自定义编译选项,推荐使用操作系统提供的包管理器安装MySQL。
2:源码编译及安装
(1)创建运行用户
为了增强安全性,MySQL应当以非root用户身份运行。我们通常创建一个名为mysql
的用户和组:
sudo useradd -r -s /bin/false -g mysql mysql
(2)解包
假设您已经下载了MySQL源代码压缩包(如mysql-8.0.26.tar.gz),将其解压到适当位置:
tar xzf mysql-8.0.26.tar.gz
cd mysql-8.0.26
(3)配置
配置步骤是编译前非常关键的一步,它允许您自定义MySQL的安装路径、特性、插件等。确保您已经安装了所有必要的依赖项,如ncurses-devel、openssl-devel等,然后执行配置脚本:
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql \
-DWITH_SSL=yes \
-DWITH_ZLIB=yes \
-DENABLED_LOCAL_INFILE=ON \
-DWITH_EDITLINE=OFF \
-DWITH_READLINE=ON \
-DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \
-DSYSCONFDIR=/etc \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci
请注意,上述命令中的路径(如/usr/local/mysql
和/data/mysql
)需根据实际情况调整。
(4)编译并安装
配置完成后,开始编译并安装MySQL:
make
sudo make install
这可能需要一段时间,具体取决于您的硬件性能。
后续步骤
安装完成后,还需要进行一系列后续操作来初始化MySQL、设置root用户的密码、启动服务、配置开机启动等。这些步骤包括但不限于:
- 初始化MySQL数据目录
- 设置MySQL的环境变量(可选)
- 创建MySQL系统服务(如果使用Systemd)
- 启动MySQL服务
- 运行安全脚本来设置root用户的密码并加强MySQL的安全性
请参照MySQL官方文档或相关教程完成这些后续步骤,以确保MySQL能够正常且安全地运行。
3:安装后的其他调整
(1)对数据库目录进行权限设置
确保MySQL的数据目录(如之前配置的/data/mysql
)的权限正确设置,以便MySQL服务能够读写数据:
sudo chown -R mysql:mysql /data/mysql
(2)建立配置文件
如果在编译安装过程中没有自动生成配置文件,您需要手动创建或复制一个模板。MySQL安装目录下通常会有示例配置文件,如support-files/my-default.cnf
,您可以基于此文件创建自己的配置文件,例如复制到/etc/my.cnf
:
sudo cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
然后根据需要编辑/etc/my.cnf
,调整端口、字符集、日志文件位置等配置。
(3)初始化数据库
使用mysqld
二进制文件初始化MySQL的数据目录,这将创建必要的系统表等:
sudo /usr/local/mysql/bin/mysqld --initialize --console
初始化过程中,会输出root用户的临时密码,请注意保存。
(4)设置环境变量
为了方便在命令行中直接调用MySQL客户端和服务端程序,可以将MySQL的二进制目录加入到PATH环境变量中。编辑~/.bashrc
(或相应shell的配置文件)并添加如下行:
export PATH=$PATH:/usr/local/mysql/bin
然后使修改生效:
source ~/.bashrc
4:启动并访问 MySQL 服务
启动MySQL服务
如果使用Systemd,可以创建一个新的服务单元文件或直接启动MySQL服务:
sudo systemctl start mysqld
若未自动创建服务,需手动创建:
sudo nano /etc/systemd/system/mysqld.service
然后添加服务定义(请根据实际路径调整):
[Unit]
Description=MySQL Server
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
之后,重新加载Systemd并启动服务:
sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld
访问MySQL服务
使用MySQL客户端连接到服务:
mysql -u root -p
系统会提示输入初始密码,输入后即可进入MySQL的命令行界面,开始管理和使用数据库。
五:构建 PHP 运行环境
5.1:安装 PHP 软件包
1:准备工作
确保您的系统已更新,并安装了必要的开发工具和库,例如GCC、make等。在Debian/Ubuntu上,可以使用以下命令安装:
sudo apt-get update
sudo apt-get install build-essential libxml2-dev libssl-dev libcurl4-openssl-dev pkg-config libbz2-dev libjpeg-dev libpng-dev libfreetype6-dev libmcrypt-dev libmysqlclient-dev libzip-dev
在基于RPM的系统(如CentOS/RHEL)上,可以使用:
sudo yum install gcc make libxml2-devel openssl-devel curl-d
2:安装扩展工具库
对于旧版本的PHP(如PHP 5.x),可能需要安装libmcrypt
、mhash
和mcrypt
。但请注意,对于PHP 7.2及以后的版本,mcrypt
已被废弃,因此不需要安装。以下仅提供历史参考:
- 安装 libmcrypt
wget https://github.com/libmcrypt/libmcrypt/releases/download/v2.5.8/libmcrypt-2.5.8.tar.gz
tar xzvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure
make
sudo make install
- 安装 mhash
wget https://github.com/tels/mhash/archive/mhash-0.9.9.9.tar.gz
tar xzvf mhash-0.9.9.9.tar.gz
cd mhash-mhash-0.9.9.9
./configure
make
sudo make install
- 安装 mcrypt
wget https://github.com/php-mcrypt/mcrypt/releases/download/v2.6.8/mcrypt-2.6.8.tar.gz
tar xzvf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8
./configure
make
sudo make install
ldconfig
3:编译安装 PHP
- 解包
wget https://www.php.net/distributions/php-X.Y.Z.tar.gz # X.Y.Z替换为所需版本号
tar xzvf php-X.Y.Z.tar.gz
cd php-X.Y.Z
- 配置 配置步骤根据您的需求调整,以下是一个基本的例子,包含一些常用扩展:
./configure \
--prefix=/usr/local/php \
--with-config-file-path=/etc/php \
--with-config-file-scan-dir=/etc/php/conf.d \
--enable-mbstring \
--enable-zip \
--enable-bcmath \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--enable-gd-jis-conv \
--with-iconv-dir \
--enable-exif \
--enable-calendar \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-zlib \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-wddx \
--with-xmlrpc \
--with-xsl \
--enable-opcache
- 编译及安装
make
sudo make install
完成上述步骤后,别忘了配置PHP的ini文件(通常位于/etc/php/php.ini
),并根据需要启用或禁用扩展。最后,重启web服务器(如Apache或Nginx),使其能识别并使用新安装的PHP。
5.2:设置 LAMP 组件环境
1:php.ini 配置调整
(1)php.ini 的建立及基本设置
通常,PHP安装过程中会自动复制默认的php.ini
文件到指定的位置(如/etc/php/php.ini
)。如果没有自动复制,您需要手动从源代码目录下的php.ini-production
或php.ini-development
复制一份作为生产或开发环境的配置基础。例如:
sudo cp /usr/local/php/php.ini-production /etc/php/php.ini
接下来,根据您的应用程序需求调整php.ini
中的设置,例如错误报告级别、上传文件大小限制、日期时间区域设置等。
(2)添加 ZendGuardLoader 优化模块
ZendGuardLoader 已经被废弃,取而代之的是 Zend OPcache,它是PHP 5.5及以上版本中内置的性能优化组件。如果您确实需要使用类似功能,对于PHP 7及以上版本,应配置OPcache而非ZendGuardLoader。在php.ini
中查找或添加以下内容以启用OPcache:
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=0
请根据您的服务器配置调整各项参数。
2:httpd.conf 配置调整
为了使Apache支持PHP处理,需要在httpd.conf
(或Apache的其他配置文件,如/etc/apache2/sites-available/000-default.conf
)中添加或调整以下设置:
- 加载PHP模块:确保Apache知道如何处理
.php
文件。找到或添加以下行到配置文件中(路径可能根据您的安装位置有所不同):
LoadModule php_module modules/libphp7.so
- PHP处理器配置:在配置文件中,确保有如下配置段落,指示Apache使用PHP处理器来处理
.php
文件:
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
- 目录权限与索引设置:如果需要在特定目录下运行PHP文件,确保该目录具有正确的权限和索引文件设置,例如:
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
完成配置后,记得重启Apache服务以应用更改:
sudo systemctl restart apache2
或
sudo service httpd restart
通过以上步骤,您完成了LAMP环境中的PHP配置调整,以及Apache服务器与PHP的集成,使得服务器能够正确解析并运行PHP脚本。
5.3:测试 LAMP 协同工作
1:测试 PHP 网页能否正确显示
为了验证PHP是否正确安装并由Apache服务解析,您可以创建一个简单的PHP信息页面。在Apache的文档根目录(通常是/var/www/html
或/srv/http
,具体取决于您的配置)中创建一个名为info.php
的文件,并写入以下内容:
<?php
phpinfo();
?>
保存文件后,通过浏览器访问 http://your_server_ip_or_domain/info.php
。如果一切配置正确,您应该能看到一个展示PHP安装详情的页面,包括版本信息、配置选项、已加载的模块等。
2:测试 PHP 网页能否访问 MySQL 数据库
接下来,我们将创建一个PHP脚本来测试能否成功连接到MySQL数据库。首先确保您已为数据库创建了用户和数据库,并记下相应的用户名、密码和数据库名。
在Apache的文档根目录下,创建一个名为test_db_connection.php
的文件,写入以下代码(替换your_username
、your_password
和your_database
为实际值):
<?php
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "连接成功";
$conn->close();
?>
保存文件后,通过浏览器访问 http://your_server_ip_or_domain/test_db_connection.php
。如果网页显示“连接成功”,则表明PHP能够成功访问MySQL数据库。如果遇到错误,检查数据库的登录凭据、数据库是否正确创建以及MySQL服务是否正在运行。