Linux操作系统:作为LAMP架构的基础,提供用于支撑Web站点的操作系统,能够与其他三个组件提供更好的稳定性、兼容性。
Apache网站服务器:作为LAMP架构的前端,是一款功能强大、稳定性好的Web服务器程 序,该服务器直接面向用户提供网站访问,发送网页、图片等文件内容。
MySQL数据库服务器:作为LAMP架构的后端,是一款流行的开源关系数据库系统。在企业网站、业务系统等应用中,各种账户信息、产品信息、客户资料、业务数据等都可以存储到MySQL数据库,其他程序可以通过SQL语句来查询、更改这些信息。
PHP/Perl/Python网页编程语言:作为三种开发动态网页的编程语言,负责解释动态网页文 件,并提供Web应用程序的开发和运行环境。
在构建LAMP平台时,各组件的安装顺序依次为Linux、Apache、MySQL、PHP。其中Apache和 MySQL的安装并没有严格的顺序;而PHP环境的安装一般放到最后,负责沟通Web服务器和数据库系统以协同工作。
安装Linux
软件包:https://download.csdn.net/download/g950904/12504171
1、脚本安装
[root@http ~]# vim httpd.sh
#!/bin/bash
cd /media
yum -y install zlib-*
tar zxf apr-1.5.2.tar.gz -C /usr/src
tar zxf apr-util-1.5.4.tar.gz -C /usr/src
tar zxf pcre-8.39.tar.gz -C /usr/src
tar zxf openssl-1.0.1u.tar.gz -C /usr/src
tar zxf httpd-2.4.25.tar.gz -C /usr/src
cd /usr/src
cd apr-1.5.2
./configure --prefix=/usr/local/apr && make && make install
cd ..
cd apr-util-1.5.4
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install
cd ..
cd pcre-8.39
./configure --prefix=/usr/local/pcre && make && make install
cd ..
cd openssl-1.0.1u
./config -fPIC --prefix=/usr/local/openssl enable-shared && make && make install
cd ..
cd httpd-2.4.25
./configure --prefix=/usr/local/httpd --enable-so --enable-cgi --enable-cgid --enable-ssl --with-ssl=/usr/local/openssl --enable-rewrite --with-pcre=/usr/local/pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mods-shared=most --enable-mpms-shared=all --with-mpm=event --enable-proxy --enable-proxy-fcgi --enable-expires --enable-deflate && make && make install
ln -s /usr/local/httpd/bin/* /usr/local/bin
[root@http install]# sh httpd.sh
模块 | 说明 |
---|---|
–enable-so | 支持动态共享模块(即打开 DSO 支持) |
–enable-rewrite | 支持 url 重写 |
–enable-ssl | 支持 ssl |
–with-ssl=/usr/local/openssl | 指定 ssl 安装位置 |
–enable-cgi | 启用 cgi |
–enable-cgid | MPM 使用的是 event 或 worker 要启用 cgid |
–enable-modules=most | 指明要静态编译到 httpd 二进制文件的模块,all 或者 most,all 表示包含所有模块,most 表示包含大部分常用模块 |
–enable-mods-shared=most | 指明要以 DSO 方式编译的模块 |
–enable-mpms-shared=all | 启用 MPM 所有支持的模式 |
–with-mpm=event | 指定启用的 mpm 模式,默认使用 enevt 模式 |
–with-pcre=/usr/local/pcre | 支持 pcre |
–with-z=/usr/local/zlib | 使用 zlib 压缩库 |
–with-apr=/usr/local/apr | 指定 apr 的安装路径 |
–with-apr-util=/usr/local/apr-util | 指定 apr-util 的安装路径 |
–enable-expires | 激活彧通过配置文件控制 HTTP 的“Expires:”和“Cache-Control:”头内容 |
–enable-deflate | 提供对内容的压缩传输编码支持,一般是 html、js、css 等内容的站点 |
2、优化链接
[root@http ~]# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
[root@http ~]# vim /etc/init.d/httpd
#!/bin/sh
#声明服务启动级别,开机启动顺序,关机关闭顺序
# chkconfig: 35 85 15
#服务声明,简要信息
# description: apache 2.4.25
......
[root@http ~]# chkconfig --add httpd //添加httpd到系统服务
[root@http ~]# chkconfig httpd on //设置服务开机自启(等同于:systemctl enable httpd)
[root@http ~]# systemctl start httpd //开启服务(等同于:service httpd start)
[root@mysql ~]# vim mysql.sh //cmask版本选择为3.15.6
#!/bin/bash
#由于没有下载mysql源码包,所以提前准备好
echo '正在下载资源包...'
yum -y install ncurses-devel gcc gcc-c++
read -p '你想要的Cmake版本:' VER
wget https://github.com/Kitware/CMake/releases/download/v$VER/cmake-$VER.tar.gz
tar zxf cmake-$VER.tar.gz -C /usr/src
cd /usr/src/cmake-$VER
echo '正在编译安装...'
./configure &> /dev/null
gmake && gmake install &> /dev/null
groupadd mysql
useradd -M -s /sbin/nologin mysql -g mysql
tar zxf /media/mysql-5.6.36.tar.gz -C /usr/src
cd /usr/src/mysql-5.6.36
echo '预编译中...'
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all &> /dev/null
echo '正在编译安装...'
make -j8 && make install -j8 &> /dev/null
echo '对数据库目录进行授权:'
chown -R mysql:mysql /usr/local/mysql
echo '建立配置文件:'
rm -rf /etc/my.cnf
cp support-files/my-default.cnf /etc/my.cnf
echo '安装Perl模块...'
yum -y install perl-Data-Dumper &> /dev/null
echo '初始化数据库...'
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/
echo '设置环境变量:'
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
. /etc/profile
#mysql 的启动和关闭:
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
/etc/init.d/mysqld start
echo '创建软连接,优化路径:'
ln -s /usr/local/mysql/bin/mysql /usr/local/bin
ln -s /usr/local/mysql/bin/mysqladmin /usr/local/bin
#/etc/init.d/mysqld是一个shell脚本,在启动过程中会调用mysqld_safe脚本,最后调用mysqld服务启动mysql,如下所示.
#$bindir/mysql_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null 2>&1
netstat -anpt | grep 3306
cat << EOF
****************************************
* Mysql has been installed successfully. *
****************************************
EOF
[root@php ~]# yum -y install epel-release
[root@php ~]# yum -y install gcc gcc-c++ libxml2-devel lzip2-devel libcurl-devel libmcrypt-devel openssl-devel bzip2-devel
[root@php ~]# tar zxf /media/libmcrypt-2.5.7.tar.gz -C /usr/src/
[root@php ~]# cd /usr/src/libmcrypt-2.5.7/
[root@php libmcrypt-2.5.7]# ./configure --prefix=/usr/local/libmcrypt && make && make install
[root@php ~]# tar zxf /media/php-5.6.27.tar.gz -C /usr/src/
[root@php ~]# cd /usr/src/php-5.6.27/
[root@php php-5.6.27]# ./configure --prefix=/usr/local/php5.6 --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-fpm --enable-sockets --enable-sysvshm --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt=/usr/local/libmcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts && make && make install
[root@php php-5.6.27]# cp /usr/src/php-5.6.27/php.ini-production /etc/php.ini
[root@php php-5.6.27]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@php php-5.6.27]# chmod +x /etc/init.d/php-fpm
[root@php php-5.6.27]# chkconfig --add php-fpm
[root@php php-5.6.27]# chkconfig php-fpm on
[root@php php-5.6.27]# cp /usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf
[root@php php-5.6.27]# vim /usr/local/php5.6/etc/php-fpm.conf
pid = run/php-fpm.pid
listen = 192.168.1.30:9000
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
[root@php php-5.6.27]# systemctl start php-fpm
[root@http ~]# vim /usr/local/httpd/conf/httpd.conf
LoadModule proxy_module modules/mod_proxy.so //去掉#号
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so //去掉#号
Include conf/extra/httpd-vhosts.conf //去掉#号
AddType application/x-httpd-php .php //添加
AddType application/x-httpd-php-source .phps //添加
<IfModule dir_module>
DirectoryIndex index.html index.php //添加index.php
</IfModule>
[root@http ~]# systemctl restart httpd
[root@http ~]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/var/www/benet"
ServerName www.benet.com
ServerAlias benet.com
ErrorLog "logs/benet.com-error_log"
CustomLog "logs/benet.com-access_log" common
ProxyRequests Off
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://192.168.1.30:9000/var/www/benet/$1
#
# ProxyPass fcgi://192.168.1.30:9000/var/www/benet
#
<Directory "/var/www/benet">
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
[root@http ~]# systemctl restart httpd
1、http端解包并复制到网站目录
[root@http ~]# cp /media/Discuz_X3.3_SC_UTF8.zip /usr/src/
[root@http ~]# cd /usr/src/
[root@http src]# unzip Discuz_X3.3_SC_UTF8.zip
[root@http src]# mkdir -p /var/www/benet
[root@http src]# mv upload/ /var/www/benet/bbs
[root@http src]# chmod -R 777 /var/www/benet/bbs
2、php端解包并复制到网站目录
[root@php ~]# mkdir -p /var/www/benet
[root@php ~]# vim /var/www/benet/index.php
<?php
phpinfo();
?>
[root@php ~]# cp /media/Discuz_X3.3_SC_UTF8.zip /usr/src/
[root@php ~]# cd /usr/src/
[root@php src]# unzip Discuz_X3.3_SC_UTF8.zip
[root@php src]# mv upload/ /var/www/benet/bbs
[root@php src]# chmod -R 777 /var/www/benet/bbs
[root@php src]# vim /etc/php.ini
short_open_tag = On
[root@php src]# service php-fpm restart
3、在mysql服务器上创建bbs数据库及用户
[root@mysql ~]# mysql
mysql> create database bbsdb;
mysql> grant all on bbsdb.* to runbbs@'%' identified by 'pwd@123';
1、作用:负责实现网络监听、请求的处理等功能,目的为了在不同的平台上实现最优化的性能和稳定性。
操作系统平台 | MPM |
---|---|
BeOS | beos |
NetWare | mpm_netware |
OS/2 | mpm_os2 |
linux | prefork、worker、event |
Windows | mpm_winnt |
2、linux平台
MPM | 说明 |
---|---|
prefork模式 | 非线程、预生成进程型MPM,一个子进程同一时间点仅能处理一个用户请求,根据并发请求数动态调整子进程 |
worker模式 | 线程化、多进程型MPM,每个进程可生成多个线程,每个线程处理一个请求,缺点:长连接,资源容易被占用 |
event模式 | worker的改进版,使用监控线程处理长连接出现的资源占用问题 |
3、修改mpm配置文件
[root@localhost ~]# vim /usr/local/httpd/conf/extra/httpd-mpm.conf
<IfModule mpm_event_module>
StartServers 3 //apache 启动时候默认开始的子进程数
MinSpareThreads 75 //最小空闲数量的工作线程
MaxSpareThreads 250 //最大空闲数量的工作线程
ThreadsPerChild 25 //每个子进程产生的线程数量
MaxRequestWorkers 400 //允许同时的最大接入请求数量
MaxConnectionsPerChild 0 //每个子进程可处理的请求数
</IfModule>
[root@http ~]# yum -y install httpd-tools
[root@http ~]# ab -c 160 -n 10000 http://192.168.1.10/index.html //使用ab压力测试命令进行160人并发访问,发出10000个请求。
1、优化启用网站压缩deflate
[root@http ~]# vim /usr/local/httpd/conf/httpd.conf
LoadModule deflate_module modules/mod_deflate.so //去除“#”号
<IfModule mod_deflate.c> //在末尾添加
DeflateCompressionLevel 6 //压缩程度的等级
SetOutputFilter DEFLATE //设置输出过滤器
#AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-javascript application/x-httpd-php
#AddOutputFilterByType DEFLATE image/*
AddOutputFilterByType DEFLATE text/* //设置对文件是文本的内容进行压缩
AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript //对 javascript 文件进行压缩
AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp //对 php 类型的文件进行压缩
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary //设置不对后缀gif,jpg,jpeg,png 的图片文件进行压缩。注:?:表示不会捕获 ( )里内容了
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary //设置不对 exe,tgz,gz 等的文件进行压缩
SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary //设置不对 pdf,avi,mp3 等的文件进行压缩
</IfModule>
[root@http ~]# systemctl restart httpd
2、优化启用网站缓存expires
[root@http ~]# vim /usr/local/httpd/conf/httpd.conf
LoadModule expires_module modules/mod_expires.so //去除“#”号
<IfModule mod_expires.c> //在末尾添加
ExpiresActive On
ExpiresByType text/css "now plus 1 month"
ExpiresByType application/x-javascript "now plus 5 day"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/bmp "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 month"
ExpiresByType image/png "access plus 1 minute"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresDefault "now plus 0 minute"
</IfModule>
[root@http ~]# systemctl restart httpd
3、禁止网站目录遍历
[root@http ~]# vim /usr/local/httpd/conf/httpd.conf
Options FollowSymLinks //原Options Indexes FollowSymLinks去除Indexes
[root@http ~]# systemctl restart httpd
4、apache隐藏版本号
[root@http ~]# vim /usr/local/httpd/conf/httpd.conf
Include conf/extra/httpd-default.conf //去除“#”号
[root@http ~]# vim /usr/local/httpd/conf/extra/httpd-default.conf
ServerTokens Prod
ServerSignature Off
[root@http ~]# systemctl restart httpd
5、配置httpd日志轮替切割(每隔一天记录一个日志)
[root@http ~]# vim /usr/local/httpd/conf/httpd.conf
#ErrorLog "logs/error_log" //禁用
#CustomLog "logs/access_log" common //禁用
ErrorLog "|/usr/local/httpd/bin/rotatelogs -l logs/error_%Y%m%d.log 86400" //添加
CustomLog "|/usr/local/httpd/bin/rotatelogs -l logs/access_%Y%m%d.log 86400" combined //添加
[root@http ~]# systemctl restart httpd
6、配置防盗链
[root@http ~]# vim /usr/local/httpd/conf/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so //去除“#”号
[root@http ~]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
<VirtualHost>
...... //添加
RewriteEngine On //启用 rewrite
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://benet.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://benet.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.benet.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.benet.com$ [NC]
RewriteRule . *\.(gif|jpg|swf)$http://www.benet.com/about/nolink.png[R,NC,L]
......
</VirtualHost>
[root@http ~]# systemctl restart httpd
7、在php服务器上安装xcache缓存,提高网站访问速度
[root@php ~]# wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz
[root@php ~]# tar xf xcache-3.2.0.tar.gz
[root@php ~]# cd xcache-3.2.0/
[root@php xcache-3.2.0]# yum -y install autoconf
[root@php xcache-3.2.0]# /usr/local/php5.6/bin/phpize
[root@php xcache-3.2.0]# ./configure --enable-xcache --enable-xcache-coverager -[root@php xcache-3.2.0]# ./configure --enable-xcache --enable-xcache-coverager --enable-xcache-optimizer --with-php-config=/usr/local/php5.6/bin/php-config && make && make install
[root@php xcache-3.2.0]# touch /tmp/xcache
[root@php xcache-3.2.0]# chmod 777 /tmp/xcache
[root@php xcache-3.2.0]# cp -r htdocs/ /var/www/benet/xcache
[root@php xcache-3.2.0]# scp -rp /var/www/benet/xcache/ [email protected]:/var/www/benet/ //复制xcache网站目录到php和httpd网站根目录下
[root@php ~]# vim /etc/php.ini
[xcache-common] //添加到文件末尾
extension = /usr/local/php5.6/lib/php/extensions/no-debug-zts-20131226//xcache.so
[xcache.admin]
xcache.admin.enable_auth = Off
[xcache]
xcache.shm_scheme ="mmap"
xcache.size=60M
xcache.count =1
xcache.slots =8K
xcache.ttl=0
xcache.gc_interval =0
xcache.var_size=64M
xcache.var_count =1
xcache.var_slots =8K
xcache.var_ttl=0
xcache.var_maxttl=0
xcache.var_gc_interval =300
xcache.test =Off
xcache.readonly_protection = Off
xcache.mmap_path ="/tmp/xcache"
xcache.coredump_directory =""
xcache.cacher =On
xcache.stat=On
xcache.optimizer =Off
[xcache.coverager]
xcache.coverager =On
xcache.coveragedump_directory =""
[root@php ~]# systemctl restart php-fpm
访问httpd的xcache虚拟目录,验证(ab压力测试后):http://192.168.1.10/xcache