操作方法:配置 Apache Web 服务器以使用 NFS 共享 HTML+PHP5 文件
Apache Web 服务器负责通过 HTTP 或 HTTPS 协议提供对动态内容的访问。在此示例中,我将安全地安装和使用 Apache 2 Web 服务器 + php5,并将 DocumentRoot 设置为挂载在 /var/www/html 上的 vm05:/exports/html。您需要在IP 地址为192.168.1.11的vm02上键入以下命令。
配置 NFS 客户端
使用yum 命令安装所需的 NFS 客户端包:
# yum groupinstall "Network file system client"
或者只安装 nfs 客户端:
# yum install nfs-utils nfs4-acl-tools
打开 NFSv4 客户端服务:
# chkconfig rpcbind on
# chkconfig rpcidmapd on
# chkconfig nfslock on
/etc/idmapd.conf nfs 客户端配置
编辑/etc/idmapd.conf,输入:
# vi /etc/idmapd.conf
确保按照NFS服务器域名设置:
Domain = example.com [Mapping] Nobody-User = nobody Nobody-Group = nobody
保存并关闭文件。启动所有 nfs 客户端服务,输入:
# /sbin/service rpcbind start
# /sbin/service rpcidmapd start
# /sbin/service nfslock start
挂载文件系统
输入以下命令:
# showmout -e vm05
或
# showmout -e 192.168.1.14
示例输出:
Export list for v.txvip1: /exports/html 192.168.1.10,192.168.1.11 /exports/static 192.168.1.10,192.168.1.11
在 /var/www/html 上挂载 /exports/html nfs 文件系统,输入:
# /bin/mount -t nfs4 -orsize=32768,wsize=32768,intr,hard,proto=tcp,sync vm05:/exports/html /var/www/html/
或
# /bin/mount -t nfs4 -orsize=32768,wsize=32768,intr,hard,proto=tcp,sync 192.168.1.14:/exports/html /var/www/html/
使用 /etc/fstab 挂载 NFS 文件系统
编辑 /etc/fstab,输入:
# vi /etc/fstab
附加条目,输入:
vm05:/exports/html /var/www/html nfs4 orsize=32768,wsize=32768,intr,hard,proto=tcp,sync
保存并关闭文件。确保 netfs 服务已打开:
# chkconfig netfs on
最后,验证 apache 用户是否可以看到文件,输入:
请注意,由于安全策略,root 用户或任何其他用户可能无法查看 /var/www/html。这是默认设置,只有 apache 用户必须访问 DocumentRoot。
# su - apache
$ ls /var/www/html/
$ exit
#
安装 Apache 软件
使用 yum 命令安装 Apache 2 包,输入:
# yum install httpd
安装所需的 php5 和模块
键入以下命令来安装 php5 和其他可以提供对 mysql、图形等的访问的模块:
# yum install -y php-pear php-common php-bcmath php-mbstring php-cli php-pdo php-php-gettext php-mcrypt php-gd php-xml php-pecl-apc
php php-mysql php-xmlrpc
安装 memcached 对 php5 的支持
为了访问安装在 vm3 上的 memcached 服务器,您需要为 php 安装 memcache 服务器:
# yum install -y php-pecl-memcache
配置 Apache
编辑 /etc/httpd/conf/httpd.conf,输入:
# vi /etc/httpd/conf/httpd.conf
添加或更正以下指令(DocumentRoot 必须指向挂载在 /var/www/html 上的 nfs 位置):
# allow proxy server communication over lan Listen 192.168.1.11:80 # default security avoid info leakage ServerTokens Prod ServerSignature Off # Set DocumentRoot DocumentRoot "/var/www/html" <directory "/var/www/html"> Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all </directory>
保存并关闭文件。
PHP5 配置
PHP 是一种广泛使用的服务器端脚本语言。编辑 /etc/httpd/conf.d/php.conf,输入:
# cat /etc/httpd/conf.d/php.conf
示例输出:
# # PHP is an HTML-embedded scripting language which attempts to make it # easy for developers to write dynamically generated webpages. # <ifModule prefork.c> LoadModule php5_module modules/libphp5.so </ifModule> <ifModule worker.c> LoadModule php5_module modules/libphp5-zts.so </ifModule> # # Cause the PHP interpreter to handle files with a .php extension. # AddHandler php5-script .php AddType text/html .php # # Add index.php to the list of files that will be served as directory # indexes. # DirectoryIndex index.php # # Uncomment the following line to allow PHP to pretty-print .phps # files as PHP source code: # #AddType application/x-httpd-php-source .phps
请参阅如何保护和优化 php 5以获取更多信息。
提取转发的 HTTP 请求的真实源 IP
安装 mod_extract_forwarded 包以获取转发的 HTTP 请求的真实源 IP(开启 EPEL repo):
# yum -y install mod_extract_forwarded package
编辑 /etc/httpd/conf.d/mod_extract_forwarded.conf,输入:
# vi /etc/httpd/conf.d/mod_extract_forwarded.conf
添加或更正如下内容:
## Accept real ip from our nginx reverse proxy at 192.168.1.1 ## MEFaccept 192.168.1.1
保存并关闭文件。重新加载 Apache Web 服务器:
# service httpd reload
配置 iptables 以允许访问 Web 服务器
编辑 /etc/sysconfig/iptables。添加以下行,确保它们出现在 INPUT 链的最终 LOG 和 DROP 行之前:
## allow only access from lan ## -A INPUT -m state --state NEW -p tcp -s 192.168.1.0/24 --dport 80 -j ACCEPT
保存并关闭文件。重新启动iptables服务,输入:
# /sbin/service iptables restart
# /sbin/iptables -L -v -n
打开 Apache
启动 Apache 2 网络服务器,输入:
启动一个网络浏览器并输入 URL:
# chkconfig httpd on
# service httpd start
http://192.168.1.11/
关于 MySQL 数据库和 Memcached 服务器的说明
您需要在 PHP 应用程序中使用 mysql 数据库服务器 IP 地址 192.168.1.13 和 tcp 端口 3306:
/* Sample php config */ /* The name of the database for WordPress */ define('DB_NAME', 'foo'); /* MySQL database username */ define('DB_USER', 'bar'); /* MySQL database password */ define('DB_PASSWORD', 'mypassword'); /* MySQL hostname */ define('DB_HOST', '192.168.1.13');
您需要在 PHP 应用程序中使用 memcached 服务器 IP 地址 192.168.1.12 和 tcp 端口 11211:
/* sample php code */ if ( isset($memcached_servers) ) $buckets = $memcached_servers; else $buckets = array('default' => array('192.168.1.12:11211'));
或者
$config['Datastore']['class'] = 'myApp_MemCached; $i = 0; $i++; $config['Misc']['memcacheserver'][$i] = '192.168.1.12'; $config['Misc']['memcacheport'][$i] = 11211; $config['Misc']['memcachepersistent'][$i] = true; $config['Misc']['memcacheweight'][$i] = 1; $config['Misc']['memcachetimeout'][$i] = 1; $config['Misc']['memcacheretry_interval'][$i] = 15;