目录
2.1Apache网站服务基础
2.1Apache简介
1. Apache的起源
起源背景
Apache的诞生
Apache软件基金会的成立
Apache的流行和影响
2.1.1 安装httpd服务器
1.准备工作
2.源码编译及安装
(1)解包
(2)配置
(3)编译及安装
3.确认安装结果
4 优化执行路径
5.添加httpd系统服务
2.2 httpd 服务器的基本配置
1:确定网站名称、IP 地址
2:配置并启动 httpd 服务
(1)配置 httpd 服务
(2)启动 httpd 服务
3:部署网页文档
4:查看 Web 站点的访问情况
2.3 构建虚拟 Web 主机
1:为虚拟主机提供域名解析(两个域名)
2:为虚拟主机准备网页文档(两个网站)
3:添加虚拟主机配置
4:在客户机中访问虚拟 Web 主机
2.4 基于 IP 地址、基于端口的虚拟主机
1:为主机设置多个IP地址
2:基于 IP 地址的虚拟主机
3:基于端口的虚拟主机
2.5 MySQL 的编译安装
1:准备工作
(1)检查安装环境
(2)安装cmake
2:源码编译及安装
(1)创建运行用户
(2)解包
(3)配置
(4)编译并安装
3:安装后的其他调整
(1)对数据库目录进行权限设置
(2)建立配置文件
(3)初始化数据库
4:启动并访问 MySQL 服务
2.6 构建 PHP 运行环境
1:准备工作
2:安装扩展工具库
(1)安装 libmcrypt
(2)安装 mhash
(3)安装 mcrypt
3:编译安装 PHP
(1)解包
(2)配置
(3)编译及安装
2.7 设置 LAMP 组件环境
1:php.ini 配置调整
(1)php.ini 的建立及基本设置
(2)添加 ZendGuardLoader 优化模块
2:httpd.conf 配置调整
2.8 测试 LAMP 协同工作
1:测试 PHP 网页能否正确显示
2:测试 PHP 网页能否访问 MySQL 数据库
LAMP 架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整套系统和相关软件,能够提供动态Web 站点服务及其应用开发环境。LAMP 是一个缩写词,具体包括 Linux 操作系统、Apache 网站服务器、MySQL数据库服务器、PHP(或 Per、Python)网页编程语言。
在构建 LAMP 平台时,各组件的安装顺序依次为 Linux、Apache、MySQL、PHP其中 Apache 和 MySQL 的安装并没有严格的顺序;而 PHP 环境的安装一般放到最后,负责沟通 Web 服务器和数据库系统以协同工作。
"Apache HTTP Server"是开源软件项目的杰出代表,它基于标准的 HTTP 网络协议提供网页浏览服务,在 Web 服务器领域中长期保持着超过半数的份额。Apache 服务器可以运行在 Linux、UNIX、Windows 等多种操作系统平台中。
Apache HTTP Server(简称Apache)的起源可以追溯到NCSA httpd服务器,其名称Apache取自“A Patchy Server”的读音,意为“基于原有Web服务程序的代码进行修改(补丁)后形成的服务器程序”。以下是Apache起源的详细概述:
在配置 Apache 网站服务之前,需要正确安装好 httpd 服务器软件。httpd 服务器的安装可以选用 RPM 安装、源码编译安装这两种方式,前者相对比较简单、快速,但是在功能上存在一定的局限性。
为了避免发生端口冲突、程序冲突等现象,建议卸载使用RPM 方式安装的httpd.httpd 服务编译安装时需要依赖 apr-util-devel、pcre-devel 等软件,因此在 httpd 编译安装之前需要先安装依赖软件。
检查是否已经安装httpd
关闭防火墙
如果提示错误,证明没有rpm安装的httpd
将下载获得的 httpd 源码包解压并释放到/usr/src 目录下,且切换到展开后的源码目录中。
根据服务器的实际应用需要,可以灵活设置不同的定制选项,如指定安装路径、启用字符集支持等。若要获知可用的各种配置选项及其含义,可以执行“./configure --help命令
--prefix:制定程序的安装目录
--enable-so:启用动态加载模块DSO的支持,使httpd具备进一步扩展功能的能力
--enable-rewrite:启用网页地址重写功能,用于网站优化
--enable-charset-lite:启动字符集支持,以便支持使用各种字符集编码的网页
--enable-cgi:启用cgi脚本程序支持,扩展网站的应用访问能力
上面执行后显示版本及配置成功
[root@bogon system]# cd /lib/systemd/system [root@bogon system]# vim httpd.service [Unit] Description=The Apache HTTP Server After=network.target [Service] Type=fotking PIDFile=/usr/local/httpd/logs/httpd.pid ExecStart=/usr/local/bin/apachectl $OPTIONS ExecReload=/bin/kill -HUP $MAINPID [install] WantedBy=multi-user.target 注释: After=network.target Before/After:要是一个服务 Before 另一个服务,那么在并行启动时(Systemd 总是用进程 0 并行启动所有东西,然后通过这两个标记来二次等待排序),那另一个服务这时就会等这个服务先启动并返回状态,注意是先启动而不是启动成功,因为失败也是一种状态,一定要成功才启动另一个服务是通过依赖关系定义的。反之 After 亦然。After=network.target 指的是后于network服务启动。 Type=forking 服务的启动方式,有fork方式和simple方式 forking的方式在启动程序后会调用 fork() 函数,把必要的通信频道都设置好之后父进程退出,留下守护精灵的子进程。你要是使用的这种方式,最好也指定下 PIDFILE=,不要让 Systemd 去猜,非要猜也可以,设置 GuessMainPID 为 yes。 ExecReload= /bin/kill -HUP $MAINPID $ MAINPID是服务的systemd变量,它指向主应用程序的PID WantedBy=multi-user.target 指定运行级别
[root@www system]# vim /usr/local/httpd/conf/httpd.conf 修改网站名称: ServerName www.benet.com [root@www ~]# httpd -t Syntax OK
[root@localhost ~]# vim /etc/hosts 添加域名解析: 192.168.10.101 www.benet.com [root@localhost ~]# curl www.benet.com It works!
[root@www ~]# vim /etc/hosts 192.168.10.101 www.benet.com 192.168.10.101 www.accp.com
[root@www ~]# mkdir -p /var/www/html/benetcom [root@www ~]# mkdir -p /var/www/html/accpcom [root@www ~]# echo "www.benet.com
"> /var/www/html/benetcom/index.html [root@www ~]# echo "www.accp.com
"> /var/www/html/accpcom/index.html
[root@www ~]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf Require all granted DocumentRoot "/var/www/html/benetcom" ServerName www.benet.com ErrorLog "logs/www.benet.com.error_log" CustomLog "logs/www.benet.com.access_log" common DocumentRoot "/var/www/html/accpcom" ServerName www.accp.com ErrorLog "logs/www.accp.com.error_log" CustomLog "logs/www.accp.com.access_log" common [root@www ~]# vim /usr/local/httpd/conf/httpd.conf 去掉注释符号: Include conf/extra/httpd-vhosts.conf [root@www ~]# systemctl restart httpd
[root@node2 ~]# cat /etc/hosts 192.168.10.101 www.benet.com 192.168.10.101 www.accp.com [root@node2 ~]# curl www.benet.com www.benet.com
[root@node2 ~]# curl www.accp.com www.accp.com
[root@www ~]# cd /etc/sysconfig/network-scripts/ [root@www network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0 [root@www network-scripts]# cp ifcfg-ens33 ifcfg-ens33:1 [root@www network-scripts]# vim ifcfg-ens33:0 IPADDR=192.168.10.210 NETMASK=255.255.255.0 GATEWAY=192.168.10.254 NAME=ens33:0 DEVICE=ens33:0 [root@www network-scripts]# vim ifcfg-ens33:1 IPADDR=192.168.10.220 NETMASK=255.255.255.0 GATEWAY=192.168.10.254 NAME=ens33:1 DEVICE=ens33:1 [root@www network-scripts]# systemctl restart network [root@www network-scripts]# ip address 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:21:68:67 brd ff:ff:ff:ff:ff:ff inet 192.168.10.101/24 brd 192.168.10.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet 192.168.10.220/24 brd 192.168.10.255 scope global secondary noprefixroute ens33:1 valid_lft forever preferred_lft forever inet 192.168.10.210/24 brd 192.168.10.255 scope global secondary noprefixroute ens33:0 valid_lft forever preferred_lft forever inet6 fe80::91e7:44c5:3a3:b5d1/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@www network-scripts]#
[root@www ~]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf Require all granted DocumentRoot "/var/www/html/benetcom" ServerName www.benet.com ErrorLog "logs/www.benet.com.error_log" CustomLog "logs/www.benet.com.access_log" common DocumentRoot "/var/www/html/accpcom" ServerName www.accp.com ErrorLog "logs/www.accp.com.error_log" CustomLog "logs/www.accp.com.access_log" common [root@www ~]# systemctl restart httpd 客户端测试 [root@node2 ~]# curl 192.168.10.210 www.benet.com
[root@node2 ~]# curl 192.168.10.220 www.benet.com
[root@www ~]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf Require all granted Listen 80 Listen 8080 DocumentRoot "/var/www/html/benetcom" ServerName www.benet.com ErrorLog "logs/www.benet.com.error_log" CustomLog "logs/www.benet.com.access_log" common DocumentRoot "/var/www/html/accpcom" ServerName www.accp.com ErrorLog "logs/www.accp.com.error_log" CustomLog "logs/www.accp.com.access_log" common [root@www ~]# systemctl restart httpd [root@www ~]# netstat -anpt | grep httpd 客户端测试 [root@node2 ~]# curl 192.168.10.101:80 www.benet.com
[root@node2 ~]# curl 192.168.10.101:8080 www.accp.com
备注:
初始化mysql需要autoconf,它是自动化配置脚本生成工具,安装自动化脚本生成工具
[root@www ~]# tar zxf cmake-2.8.6.tar.gz [root@www ~]# cd cmake-2.8.6 [root@www cmake-2.8.6]# ./configure [root@www cmake-2.8.6]# gmake && gmake install 备注: 此步骤可以用yum的方法安装cmake yum -y install cmake
[root@www ~]# cd mysql-5.6.36 [root@www 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 -DDEFAULT_COLLATION:用于指定数据集如何排序,以及字符串的比对规则
[root@www mysql-5.6.36]# /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/
[root@www mysql-5.6.36]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld [root@www mysql-5.6.36]# chmod +x /etc/rc.d/init.d/mysqld [root@www mysql-5.6.36]# chkconfig --add mysql 服务 mysql 信息读取出错:没有那个文件或目录 [root@www mysql-5.6.36]# chkconfig --add mysqld [root@www mysql-5.6.36]# chkconfig mysqld on [root@www mysql-5.6.36]# systemctl start mysql [root@www mysql-5.6.36]# netstat -anpt | grep mysql tcp6 0 0 :::3306 :::* LISTEN 57921/mysqld [root@www mysql-5.6.36]# mysql -u root -p Enter password: //密码是空的 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.6.36 Source distribution Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> set password =password('123456'); Query OK, 0 rows affected (0.00 sec) mysql> exit Bye [root@www mysql-5.6.36]#
为了避免发生程序冲突等现象,建议先将 RPM 方式安装的 PHP 及相关依赖包
[root@www ~]# tar zxf libmcrypt-2.5.8.tar.gz [root@www ~]# cd libmcrypt-2.5.8/ [root@www libmcrypt-2.5.8]# ./configure [root@www libmcrypt-2.5.8]# make && make install [root@www libmcrypt-2.5.8]# ln -s /usr/local/lib/libmcrypt.* /usr/lib/ //做个软连接
[root@www ~]# tar zxf mhash-0.9.9.9.tar.gz [root@www ~]# cd mhash-0.9.9.9/ [root@www mhash-0.9.9.9]# ./configure [root@www mhash-0.9.9.9]# make && make install [root@www mhash-0.9.9.9]# ln -s /usr/local/lib/libmhash* /usr/lib/
[root@www ~]# tar zxf mcrypt-2.6.8.tar.gz [root@www ~]# cd mcrypt-2.6.8/ [root@www mcrypt-2.6.8]# ./configure [root@www mcrypt-2.6.8]# export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH [root@www mcrypt-2.6.8]# ./configure [root@www mcrypt-2.6.8]# make && make install
[root@www ~]# tar zxf php-5.5.38.tar.gz [root@www ~]# cd php-5.5.38
[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
注意:
不能用192.168.10.101连接。
想用主机IP连接需要在安装php时指定mysql函数集为mysqlnd
--with-mysqli=mysqlnd
如果使用本地函数集,php连接mysql数据库可以使用localhost、127.0.0.1、本机主机名
,但不能用本机IP地址192.168.10.101
--with-apxs2=/usr/local/httpd/bin/apxs
整合apache,apxs功能是使用mod_so中的LoadModule指令,加载指定模块到apache,要求apache要打开SO模块
[root@www php-5.5.38]# make && make install 备注: 这一步时间很长 备注: ./configure --prefix=/usr/local/php5 \ --with-apxs2=/usr/local/httpd/bin/apxs \ --with-mysql=mysqlnd \ --with-mysqli=mysqlnd \ --with-config-file-path=/usr/local/php5 \ --enable-mbstring
[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" #去掉前面的注释 file_uploads = On upload_max_filesize = 2M max_file_uploads = 20 post_max_size = 8M short_open_tag = On ##修改值 extension=php_mysqli.dll ##去掉前面的注释
[root@www~]#tar zxf 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
[root@www ~]# vim /usr/local/httpd/conf/httpd.conf Listen *:80 …… //省略部分内容 LoadModule php5_module modules/libphp5.so AddType application/x-httpd-php .php DirectoryIndex index.html index.php #Include conf/extra/httpd-vhosts.conf [root@www ~]# apachectl -t Syntax OK [root@www ~]# systemctl restart httpd
[root@www ~]# vim /usr/local/httpd/htdocs/test1.php
[root@www ~]# vim /usr/local/httpd/htdocs/test2.php 注意: 对数据库的连接授权,授权后可以使用主机名连接 mysql> grant all on *.* to root@'www.benet.com' identified by '123456'; 注意: 如果用的是mysqlnd,要用IP地址进行连接,127.0.0.1或192.168.10.101都可以