Linux操作技術文書——LAMPプラットフォームの配置と応用


LAMPプラットフォームの配置と応用
一、LAMPプラットフォームの概要
Linuxオペレーティングシステム:LAMPアーキテクチャの基礎として、Webサイトをサポートするためのオペレーティングシステムを提供し、他の3つのコンポーネントとより良い安定性、互換性を提供することができます.Apache Webサーバ:LAMPアーキテクチャのフロントエンドとして、強力で安定性の良いWebサーバプログラムであり、このサーバはユーザーに直接Webアクセスを提供し、Webページ、画像などのファイル内容を送信する.MySQLデータベースサーバ:LAMPアーキテクチャのバックエンドとして、ポピュラーなオープンソース関係データベースシステムです.企業のウェブサイト、業務システムなどの応用の中で、各種のアカウント情報、製品情報、取引先資料、業務データなどはすべてMySQLデータベースに保存することができて、その他のプログラムはSQL文を通じてこれらの情報を検索して、変更することができます.PHP/Perl/Python Webプログラミング言語:動的Webページを開発する3つのプログラミング言語として、動的Webファイルを解釈し、Webアプリケーションの開発と実行環境を提供する.
LAMPプラットフォームを構築する際、各コンポーネントのインストール順序はLinux、Apache、MySQL、PHPの順である.このうちApacheとMySQLのインストールには厳密な順序はありません.PHP環境のインストールは一般的に最後に行われ、Webサーバとデータベースシステムのコミュニケーションを担当しています.
二、LAMPコンポーネントの取り付け
1、Linuxオペレーティングシステムのインストール
Linuxのインストール
2、Apacheウェブサイトサーバーのインストール
パッケージ:https://download.csdn.net/download/g950904/125041711、スクリプトのインストール
[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)

3、MySQLデータベースサーバーのインストール
[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

4、PHPを取り付ける
[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

三、LAMPコンポーネント環境の設定
1、php配置調整
[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

2、配置Apacheとphpの静/動分離
[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

3、Discuzフォーラムの配置
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';

四、Apacheウェブサイトの最適化
1、MPM(Multi Process Modules):マルチプロセス処理モジュール
1、役割:ネットワークの傍受、要求の処理などの機能を実現し、異なるプラットフォームで最適な性能と安定性を実現することを目的とする.
OSプラットフォーム
MPM
BeOS
beos
NetWare
mpm_netware
OS/2
mpm_os2
linux
prefork、worker、event
Windows
mpm_winnt
2、linuxプラットフォーム
MPM
説明
preforkモード
非スレッド、事前生成プロセス型MPM、1つのサブプロセスが同じ時点で1つのユーザ要求しか処理できず、同時要求数に応じてサブプロセスを動的に調整する
ワークモード
スレッド化、マルチプロセス型MPM、各プロセスは複数のスレッドを生成することができ、各スレッドは1つの要求を処理し、欠点:長い接続、資源が占有されやすい
イベントモード
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   。

2、深さの最適化
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、Webサイトキャッシュ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ログのローテーションカットを設定する(1日おきにログを記録する)
[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

httpのxcache仮想ディレクトリにアクセスし、検証(ab圧力テスト後):http://192.168.1.10/xcache