本文以实验为主,介绍apache服务不同维度的实验,为管理员设置web服务的不同特性提供参考。所有的实验环境均关闭了Selinux、防火墙。
实验一:对客户端设置访问WebServer的用户控制机制,对于除根目录之外(默认/var/www/html)的其他目录下的*.html文档,只有指定账户才有权限访问
步骤:1)mkdir /var/www/html/admin
2)编辑主配置文件/etc/httpd/conf/httpd.conf,增加一条Directory
<Directory "/var/www/html/admin"> 指定设置的目录
Options Indexes #选项支持索引
AllowOverride None #不允许被覆盖
AuthType Basic #认证类型为Basic
AuthName "some private area..." #认证描述
AuthUserFile "/etc/httpd/conf/.htpasswd" #被认证的用户列表,用户列表文件名最好设置为“.htpasswd”
Require user paul #认证通过的用户
</Directory>
3)使用命令httpd -t 检测配置文件有无语法错误,出现“Syntax OK”说明配置无误
4)使用命令htpasswd -c(首次创建要用)-b -m(指定md5算法)/etc/httpd/conf/.htpasswd paul centos(指定用户及密码)来创建httpd授权账号
5)在/var/www/html/admin目录下创建任意内容的*.html文件
6)重启httpd服务后访问,控制设置生效。例:浏览器访问http://172.18.252.190/admin/admin.html会提示输入账号及密码
实验二:实现一台web服务器提供多个站点支撑功能。httpd服务的模块中有VirtualHost(虚拟主机)功能,可以生成多个虚拟主机来实现一个httpd服务对于多个不同网站的支撑功能。有三种思路,一、若Server端有多个IP地址,可根据不同的IP地址来划分,此方法不推荐。二、Server端的一个IP地址上开放不同端口来满足需求;三、根据Server端的不同域名来划分。本实验对方法二及方法三的实现过程加以演示。
***在一条IP地址上增加两个非80端口,访问不同的套接字(Socket)会得到不同的页面
步骤:1)在/etc/httpd/conf.d/下创建任意一个*.conf文件,配置相关参数如下
Listen 8080 #开启8080端口的监听
<VirtualHost "172.18.252.190:8080"> #配置指定套接字的虚拟主机
ServerName www.magedu.com #服务名,比较重要
DocumentRoot /web/html #httpd进程的根目录,比较重要
<Directory "/web/html/"> #对设定的根目录“/web/html”进行授权
Options None #无选项
AllowOverride None #不允许覆盖
Require all granted #所有权限开放
</Directory>
</VirtualHost>
2)httpd -t 检测有无语法错误
3)在/web/html下创建任意内容的index.html文件,注意文件名必须为index.html,而根目录/web/html下的子目录内的html文件无此要求
4)重启httpd服务,并通过浏览器访问172.18.252.190:8080,设置生效
**实验三:源码编译安装httpd。注意,无论做何种源码编译及安装,都需要开发包组“Development Tools”,因此需要检查当前主机是否有此包组。命令>yum grouplist查看
步骤:1)安装devel包apr-devel、apr-util-devel、pcre-devel、openssl-devel。(这些devel包至少包含了头文件及链接信息,帮助解决依赖性关系)
2)下载最新版httpd源码包,并解压至/usr/local/src/目录下,进入httpd-2.4.5/srclib目录,下载apr-1.6.5及apr-util-xxx两个包,解压后将两个目录更名为apr、apr-util
3)返回httpd-2.4.5目录下,配置编译选项:./configure --prefix=/app/httpd24 --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork --with-included-apr
4)编译及安装:make -j 2 && make install
5)源码编译安装的httpd所属的用户及用户组为系统临时分配的daemon,需要管理员手工创建系统账号apache并在配置文件/etc/httpd24/httpd.conf中将daemon改为apache
命令useradd -r -u 48 -c "Apache" -d /usr/share/httpd -s /sbin/nologin apache
6)至此,服务已经可以启动了,但为了方便根进程管理,而不是手工执行httpd的启动脚本,在centos 6以及centos 7 中分别用以下方法实现:
centos6
执行命令cp /app/httpd24/bin/apacctl /etc/init.d/httpd,在httpd脚本中#!/bin/bash下添加两行:
#chkconfig: 2345 10 90
#description: Activates/Deactivates Apache Web Server
保存退出后执行命令chkconfig --add httpd。若要开机自启,再执行chkconfig httpd on
centos7
[root@centos7(nanyibo) ~]# cd /usr/lib/systemd/system
[root@centos7(nanyibo) system]# cp sshd.service httpd24.service
[root@centos7(nanyibo) system]# vim httpd24.service
[Unit]
Description=The Apache HTTP 2.4.35 Server
After=network.target
[Service]
Type=forking
ExecStart=/app/httpd24/bin/apachectl start
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/app/httpd24/bin/apachectl stop
Restart=on-failure
[Install]
WantedBy=multi-user.target
[root@centos7(nanyibo) ~]# systemctl daemon-reload
若要开机自启,执行systectl enable httpd
**实验四 源码编译安装php。在此介绍两种方式,一为模块儿化安装,二为基于fast cgi接口的fpm安装
一、模块儿化
步骤:1)下载最新版本的php源码包至/usr/local/src/目录下并解压缩。
2)安装devel包组,libmcrypt-devel、bzip2-devel、libxml2-devel(yum -y install libmcrypt-devel libmcrypt-devel libxml2-devel)
3)进入/usr/local/src/php-7.2.11/下,配置编译选项如下
./configure \
--prefix=/app/php \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-openssl \
--with-pdo-mysql=mysqlnd \
--enable-mbstring \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--enable-sockets \
--with-apxs2=/app/httpd24/bin/apxs \
--with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d \
--disable-fileinfo
4)编译并安装:make -j 2 && make install
5)生成php配置文件:cp php.ini-production /etc/php.ini
6)在httpd配置文件中添加对*.php文件的支持
vim /etc/httpd24/httpd.conf
DirectoryIndex index.php index.html
</IfModule>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
7)在/app/httpd24/htdocs/下创建测试ohp文件info.php
<?php
phpinfo();
?>
8)浏览器访问测试通过
配置mysql(数据库运行在centos7上,仅作为参考)
mysql
MariaDB [(none)]> create database wpdb;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all on wpdb.* to 'wpuser'@'localhost' identified by 'wppass';
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> grant all on wpdb.* to 'wpuser'@'127.0.0.1' identified by 'wppass';
Query OK, 0 rows affected (0.00 sec)
编辑测试文件vim /app/httpd24/htdocs/conn.php
<?php
$conn = mysqli_connect('127.0.0.1','wpuser','wppass');
if ($conn)
echo "OK";
else
echo "Failure";
?>
浏览器测试php与mysql连通性通过。
**实验五 以php-fpm安装php-5.6.38(centos7环境)
tar xvf php-5.6.38.tar.bz2 -C /usr/local/src/
cd /usr/local/src/php-5.6.38/
[root@centos7~ php-5.6.38]# ln -sv /usr/lib64/mysql/libmysqlclient.so /usr/lib
[root@centos7 ~]# ./configure --prefix=/app/php56 \
> --with-mysql=/usr \
> --with-openssl \
> --with-mysqli=/usr/bin/mysql_config \
> --enable-mbstring \
> --with-png-dir \
> --with-jpeg-dir \
> --with-freetype-dir \
> --with-zlib \
> --with-libxml-dir=/usr \
> --enable-xml \
> --enable-sockets \
> --enable-fpm \
> --with-mcrypt \
> --with-config-file-path=/etc/php56 \
> --with-config-file-scan-dir=/etc/php56/php.d \
> --with-bz2
[root@centos7 php-5.6.38]# make -j 2 && make install
[root@centos7 ~]# cd /app/php56/etc/
[root@centos7 etc]# cp php-fpm.conf.default php-fpm.conf
[root@centos7 etc]# vim php-fpm.conf
pid = run/php-fpm.pid
error_log = log/php-fpm.log
pm.status_path = /status
ping.path = /ping
ping.response = pong
pm.max_children = 50
[root@centos7 ~]# mkdir /etc/php56
[root@centos7 ~]# cp /usr/local/src/php-5.6.38/php.ini-production /etc/php56/php.ini
[root@centos7 ~]# cp /usr/local/src/php-5.6.38/sapi/fpm/php-fpm.service /usr/lib/systemd/system
[root@centos7 ~]# vim /usr/lib/systemd/system/php-fpm.service
[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target
[Service]
Type=simple
PIDFile=/app/php56/var/run/php-fpm.pid
ExecStart=/app/php56/sbin/php-fpm --nodaemonize --fpm-config /app/php56/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
[root@centos7 ~]# systemctl daemon-reload
[root@centos7 ~]# systemctl start php-fpm.service
[root@centos7 ~]# ss -tnl |grep -w 9000
LISTEN 0 128 127.0.0.1:9000 *:*
[root@centos7 ~]# vim /etc/httpd24/httpd.conf
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
#LoadModule php7_module modules/libphp7.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/$1
[root@centos7 ~]# /app/httpd24/bin/httpd -t
Syntax OK
[root@centos7 ~]# systemctl restart httpd24
通过浏览器访问 http://192.168.153.7/info.php
**实验六 php加速器xcache源码包编译安装
步骤:1)下载源码包并解压缩至/usr/local/src/目录下
2)进入/usr/local/src/xcache/,配置编译选项./configure --enable-xcache --with-php-config=/app/php56/bin/php-config
3)编译及安装:make && make install
4)将xcache配置文件复制到指定路径并编辑cp /usr/local/src/xcache-3.2.0/xcache.ini /etc/php56/php.d;vim /etc/php56/php.d/xcache.ini
extension = /app/php56/lib/php/extensions/no-debug-non-zts-20131226/xcache.so
5)执行命令systemctl restart php-fpm.service生效