筆記10 LAMP架構(MySQL、mariadb、Apache、PHP五、PHP七、)

MySQL安裝
javascript

MySQL的幾個經常使用安裝包:rpm、源碼、二進制免編譯php

 把下載的包保存在這個目錄裏:cd /usr/local/src  因此要先進入這個目錄下css

第一步,下載源碼包:html

 wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz java

第二步,解壓:mysql

 tar zxvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gzlinux

第三步,把解壓的這個目錄移動到usr、local下並更名爲mysql:git

 mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysqlgithub

第四步,進入到這個目錄下:redis

 cd /usr/local/mysql

第五步,建立一個mysql用戶:

 useradd mysql

第六步,建立一個目錄:這個目錄是爲了存放mysql的數據

 mkdir /data/  

第七步,初始化一下讓它生成/data/mysql這個目錄:

 ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql

[root@aaa-01 mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
FATAL ERROR: please install the following Perl modules before executing ./scripts/mysql_install_db:
Data::Dumper

缺乏軟件包須要安裝,咱們先模糊搜索一下,若是不清楚哪一個是能夠把他們都裝上,都試試。

[root@aaa-01 mysql]# yum list |grep perl |grep -i Dumper
perl-Data-Dumper.x86_64                  2.145-3.el7                   base   安裝這個  
perl-Data-Dumper-Concise.noarch          2.020-6.el7                   epel     
perl-Data-Dumper-Names.noarch            0.03-17.el7                   epel     
perl-XML-Dumper.noarch                   0.81-17.el7                   base

安裝:yum install -y perl-Data-Dumper

問題

[root@bbb-01 mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
Installing MySQL system tables..../bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

解決辦法

[root@bbb-01 mysql]# yum install libaio* -y

怎檢驗錯誤,兩種方法:要不運行echo $?

[root@aaa-01 mysql]# echo $?
0

要不看是否是有兩個OK

image.png

image.png

第七步,拷貝配置文件,配置文件在ls /support-files/my-default.cnf裏邊(模板配置文件)

 把它拷貝到/etc/下,更名叫my.cnf(mysqld的配置文件就叫my.cnf固定放在etc下)

 cp support-files/my-default.cnf  /etc/my.cnf 

第八步,拷貝啓動腳本

 cp support-files/mysql.server /etc/init.d/mysqld

第九步,編輯配置文件

 vi /etc/init.d/mysqld

定義basedir和datadir 在配置文件最下邊

basedir=/usr/local/mysql
datadir=/data//mysql

 wKioL1mBxpPTyHAKAAAMEXcsMtE255.png

第十步,添加到系統服務中去,讓他開機啓動:

 chkconfig --add mysqld  查看一下:chkconfig --list

image.png

第十一步,啓動服務:service mysqld start 或者用:/etc/init.d/mysqld start

[root@aaa-01 mysql]# service mysqld start
Starting MySQL.Logging to '/data//mysql/aaa-01.err'.
. SUCCESS!

查看進程:ps aux |grep mysql

image.png

查看監聽端口:netstat -lntp(默認監聽3306端口)

image.png

停掉服務命令:service mysqld stop


 也能夠用命令行的方法啓動:

wKioL1mBySDhqP_QAAB_G3nWB1o411.png

可是用平時的命令停不了須要:停掉服務命令:killall mysqld

若是碰到mysqld的進程殺不死你等了一分鐘尚未殺死ps還會有進程那證實他數據量很大正在慢慢寫入到磁盤裏去這事你不能用kill -9殺死這個進程這樣可能會致使你丟失數據或者損壞你的表



mariadb安裝

cd /usr/local/src 

 下載二進制源碼包:wget https://downloads.mariadb.com/MariaDB/mariadb-10.2.6/bintar-linux-glibc_214-x86_64/mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz

 解壓安裝包:tar zxvf mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz

 把安裝包拷貝到usr/local目錄下來:mv mariadb-10.2.6-linux-glibc_214-x86_64 /usr/local/mariadb

 cd /usr/local/mariadb

 ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mariadb/ --datadir=/data/mariadb

 cp support-files/my-small.cnf /usr/local/mariadb/my.cnf

 vi /usr/local/mariadb/my.cnf //定義basedir和datadir 基本不用改

 cp support-files/mysql.server /etc/init.d/mariadb

 vim /etc/init.d/mariadb //更改啓動腳本

 定義basedir=/usr/local/mariadb

    datadir=/data/mariadb

    conf=$basedir/my.cnf  以及啓動參數

 wKiom1mFNDSicmNbAAB7G1mtgYg954.png

 最後在啓動腳本定義:搜 /start 大概在300行,定義一下,加上下邊的的內容:定義的是配置文件所在的路徑,目的是不和mysql產生衝突,假如說你的機器上只安裝了mariadb就不須要自定義--defaults這個參數

wKiom1mFNIfjqmo_AAGzHE5VubU828.png

 啓動它:/etc/init.d/mariadb start

 啓動它以前先看看有沒有mysqld服務在運行ps aux |grep mysqld,由於他倆監聽的是一個端口,先把它關掉。

 查看是否啓動成功:ps aux |grep mariadb

 查看監聽端口:netstat -lntp 是否是3306

maridb的配置文件:/usr/local/mariadb/my.cnf



Apache安裝

Apache是一個基金會的名字,httpd纔是咱們要安裝的軟件包,早期它的名字就叫apache

 Apache官網www.apache.org

第一步,下載這三個包:

下載到這個目錄下:cd /usr/local/src

wget http://mirrors.cnnic.cn/apache/httpd/httpd-2.4.27.tar.gz

wget http://mirrors.hust.edu.cn/apache/apr/apr-1.5.2.tar.gz

wget http://mirrors.hust.edu.cn/apache/apr/apr-util-1.5.4.tar.gz

 apr和apr-util是一個通用的函數庫,它讓httpd能夠不關心底層的操做系統平臺,能夠很方便地移植(從linux移植到windows)

第二步,解壓這三個包:

 tar zxvf httpd-2.4.27.tar.gz

 tar zxvf apr-util-1.5.4.tar.gz

 tar zxvf apr-1.5.2.tar.gz

第三步,安裝apr:

 1.先進到apr-1.5.2目錄下:cd /usr/local/src/apr-1.5.2

 2.安裝apr:./configure --prefix=/usr/local/apr

AD0FN3F9I5$OVA)WN2B_A6B.png

成功

P]`O3Z@YDDQ$[@XZ{DG$Y~5.png

 3.make && make install

 他下邊會有四個目錄:ls /usr/local/apr

image.png

安裝apr-util:

 1.進到目錄下:cd /usr/local/src/apr-util-1.6.1

 2.安裝:./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

@7V_LN~J@`03GY3E2{D@EZ3.png

image.png

 3.make && make install

編譯httpd:

 1.進到目錄下:cd /usr/local/src/httpd-2.4.34

 2.安裝:./configure --prefix=/usr/local/apache2.4 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-so --enable-mods-shared=most

image.png

image.png

 3.make && make install

image.png

bin下是啓動文件 

這個是核心的二進制文件

image.png

conf配置文件所在目錄

image.png

htdocs是存放訪問頁,等啓動httpd以後訪問網站時默認的網站會放到這個目錄下

image.png

模塊目錄 ls /usr/local/apache2.4/modules 每一個模塊都表明着一個功能

 /usr/local/apache2.4/bin/httpd -M //查看阿帕奇加載的模塊

命令行啓動apache:/usr/local/apache2.4/bin/apachectl start

image.png

查看有沒有啓動:ps aux |grep hpptd

查看端口號:netstat -lntp(httpd默認監聽80端口)


安裝PHP5

必須先安裝阿帕奇,由於編譯PHP的時候他會用到阿帕奇的一個工具(--with-apxs2)

PHP介紹

PHP官網www.php.net

目前主流的PHP版本爲5.6或7.1版本

如今不少企業是使用PHP 5 的版本,5.4版本或5.3版本,或者使用更老的版本

PHP7 的版本是近幾年纔出來的,7的版本改動很大,因此比較老的程序裏面使用PHP7會出現問題,因此不少企業必須使用PHP5 ,而使用PHP7 會出現問題

PHP7 性能上獲得很大的提高,若是程序,也就是你的PHP代碼可以使用PHP7 ,那就使用PHP7 ,不然就使用PHP5

安裝過程:

第一步,進到src目錄下:cd /usr/local/src/ 

第二步,下載安裝包:wget http://cn2.php.net/distributions/php-5.6.30.tar.gz

第三步,解壓:tar zxf php-5.6.30.tar.gz

第四步,進到目錄下:cd php-5.6.30

第五步,安裝編譯:

./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2.4/bin/apxs --with-config-file-path=/usr/local/php/etc  --with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif

參數解釋:

 ·--prefix=/usr/local/php 表示指定它的安裝目錄

 ·--with-apxs2=/usr/local/apache2.4/bin/apxs //apxs2,它是apache的一個工具,這個工具能讓咱們不用去人工的干涉它,它能夠自動的幫你去把擴展的模塊放到Apache中的modules目錄裏,而且在它的配置文件里加上一行load module

 ·--with-config-file-path=/usr/local/php/etc //指定配置文件所在路徑

 ·--with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config //指定mysql的路徑。

 ·這是三種不一樣的mysql驅動,緣由是你想要把你的PHP和mysql相互通訊,首先須要編譯出支持它的模塊來,由於在PHP代碼裏面,定義了鏈接mysql的命令,一段代碼,如果沒有相應的驅動,那根本是沒法識別的

 ·--with-mysql 和 --with-mysqli 是有區別的,它們二者功能是相同的,目的都是爲了讓PHP去支持mysql,老版本中使用 --with-mysql,新版本中使用 --with-mysqli ,在PHP7中就再也不使用--with-mysql 了

 ·--with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif //指定PHP須要的模塊,如果沒有特殊的要求,直接複製這些參數便可,這些參數是通用的

錯誤1

yum install -y libxml2-devel

image.png 

錯誤2

yum install -y openssl-devel

image.png

錯誤3

yum install bzip2-devel

image.png

錯誤4

yum install -y libjpeg-devel

image.png

問題5

yum install -y libpng-devel

image.png

問題6

yum install -y freetype-devel

image.png

問題7

缺乏 libmcrypt-devel 庫,可是在CentOS源不能安裝libmcrypt-devel,因爲版權的緣由沒有自帶mcrypt的包。

若沒有安裝過eprl擴展源,則必須先安裝epel-release包:yum install -y epel-release

再來安裝 libmcrypt-devel 包:yum install -y libmcrypt-devel

image.png

成功標誌:echo $?

image.png

make && make install

查看PHP目錄/usr/local/php/

image.png

PHP核心的二進制文件,在/usr/local/php/bin/目錄下

image.png

查看/usr/local/apache2.4/modules/libphp5.so文件大小

這個就是咱們想要的擴展模塊,apache和php結合起來,是經過這個.so 文件實現的

image.png

/usr/local/php/bin/php -m#查看php加載的模板都有哪些,這些加載的模塊都是靜態的

[root@aaa-01 php-5.6.30]# /usr/local/php/bin/php -m
[PHP Modules]
bz2
Core
ctype
date
dom
ereg
exif
fileinfo
filter
gd
hash
iconv
json
libxml
mbstring
mcrypt
mysql

· PHP是做爲Apache的模塊存在的

· 查看Apache的模塊

· 能夠看到最下方的 php5_module (shared) ,這個說明php是作爲httpd 的一個擴展模塊形式存在的

· Apache須要去執行php的文件,須要藉助於php module ,須要這個模塊,須要這個.so 文件

· 如果把 .so 一刪除,那Apache確定不支持php了

· php5_module (shared) 這個模塊很是重要!!!

[root@aaa-01 php-5.6.30]# /usr/local/apache2.4/bin/httpd -M
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fec2:55a. Set the 'ServerName' directive globally to suppress this message
Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 mpm_event_module (static)
 authn_file_module (shared)
 authn_core_module (shared)
 authz_host_module (shared)
 authz_groupfile_module (shared)
 authz_user_module (shared)
 authz_core_module (shared)
 access_compat_module (shared)
 auth_basic_module (shared)
 reqtimeout_module (shared)
 filter_module (shared)
 mime_module (shared)
 log_config_module (shared)
 env_module (shared)
 headers_module (shared)
 setenvif_module (shared)
 version_module (shared)
 unixd_module (shared)
 status_module (shared)
 autoindex_module (shared)
 dir_module (shared)
 alias_module (shared)
 php5_module (shared)

/usr/local/apache2.4/conf/httpd.conf //這是Apache的配置文件

去搜索php5.so,會發現自動增長了一行

image.png

若想使用文件中的那一個模塊,將前面的 # 號去除便可使用

若想不使用哪一個模塊,只須要加一個 # 號便可

第六步 安裝完PHP以後,須要把配置文件拷貝到指定路徑下:

/usr/local/php/bin/php -i |less -i 能夠查看到PHP的一些信息,包括編譯參數,Configuration File 的路徑

cp php.ini-production /usr/local/php/etc/php.ini

兩個配置文件

· php.ini-development 這個是測試環境用的

· php.ini-production 這個是線上生產環境用的

這時再來查看/usr/local/php/bin/php -i |less發現他已經加載了路徑

image.png



安裝PHP7

 安裝方法跟PHP5同樣!!!

 cd /usr/local/src/ 

 wget http://cn2.php.net/distributions/php-7.1.6.tar.bz2

 tar jvxf php-7.1.6.tar.bz2

 cd php-7.1.6

初始化配置

./configure --prefix=/usr/local/php7 --with-apxs2=/usr/local/apache2.4/bin/apxs --with-config-file-path=/usr/local/php7/etc  --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif

這裏php7和php5的區別

--prefix=/usr/local/php7這裏定義的目錄名字是php7

--with-config-file-path=/usr/local/php7/etc這裏定義的配置文件路徑是php7

這裏只有--with-mysqli,沒有--with-mysql,而其餘的都相似

make && make install

查看PHP7的文件

查看libphp7和5是不一樣的,ls/usr/local/apache2.4/modules/libphp7.so

 image.png

查看php7所加載的模塊,和php5基本是一致的

[root@aaa-01 php-7.1.6]# /usr/local/php7/bin/php -m
[PHP Modules]
bz2
Core
ctype
date
dom
exif
fileinfo
filter
gd
hash
iconv
json
libxml
mbstring
mcrypt
mysqli
openssl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
Reflection
session
SimpleXML
soap
sockets
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zlib

[Zend Modules]


查看Apache加載了幾個php,會看到加載了php5和php7

/usr/local/apache2.4/bin/apachectl -M

image.png

 小常識:一臺機器上安裝兩個php,兩個PHP是能夠同時存,可是Apache調用PHP的時候,須要指定好,在——> vim /usr/local/apache2.4/conf/httpd.conf 裏面指定使用哪個PHP便可

拷貝配置文件:

cp php.ini-production /usr/local/php7/etc/php.ini

PHP5跟PHP7不想用哪一個就把它註釋掉,編輯配置文件

vim /usr/local/apache2.4/conf/httpd.conf

搜索php5.so,會看到有兩行

想使用哪一個php,就在另外一個前面加 # 號註釋掉,而後保存 

wKiom1mESFvg1DOXAAAhvLqyOJk171.png


Apache和PHP結合,Apache默認虛擬主機

配置http支持PHP

編輯一下httpd主配置文件/usr/local/apache2.4/conf/httpd.conf

vim /usr/local/apache2.4/conf/httpd.conf //修改如下4個地方

第一步,搜索:ServerName 把這個服務打開,前邊的井號去掉

wKiom1mFPZKg2Hc8AAAgaVFqB9w807.png 

去掉以後他就不會在提示下面的錯誤信息了

image.png      

第二步,增長一行配置,搜索:Require all denied 改爲:Require all granted


第三步,搜AddType加上下邊這條命令:

AddType application/x-httpd-php .php  加他的目的是爲了能讓php能解析

wKioL1mFV0ST_QWzAAAgr4FlnDw553.png


第四步,增長索引頁,搜索Index,加上下邊語句:

DirectoryIndex index.html index.php

image.png


每次寫完配置文件都要執行一下這兩步!!

檢查配置文件語法是否正確,加上-t選項
 /usr/local/apache2.4/bin/apachectl -t
從新加載配置文件,加上graceful
 /usr/local/apache2.4/bin/apachectl graceful

提示錯誤

image.png

緣由:是由於在最後調用了兩個PHP,加載了兩個PHP,致使衝突

解決方法:只須要註釋掉一個PHP便可

vim /usr/local/apache2.4/conf/httpd.conf

搜索php5.so,會看到有兩行,註釋一個便可

image.png


第五步,寫一個腳本看看阿帕奇能不能解析PHP:

vi /usr/local/apache2.4/htdocs/1.php #腳本內容以下:

image.png

寫完在瀏覽器上訪問一下IP加1.php:192.168.232.132/1.php  只要能出下邊的頁面就證實能解析

image.png

若是不能解析那麼你就檢查一下Apache配置文件:

第一項,看看php5有沒有加載:

/usr/local/apache2.4/bin/apachectl -M

image.png

若是沒有加載php5,你就要看看他有沒有這個模塊,有沒有這個文件:

ls /usr/local/apache2.4/modules/libphp5.so

image.png

若是有文件也沒有顯示,查看配置文件裏邊有沒有加載php5:

vim /usr/local/apache2.4/conf/httpd.conf    搜索libphp5.so

image.png

在查看配置文件裏有沒有加AddType這一行搜索AddType

AddType application/x-httpd-php .php

image.png

/usr/local/apache2.4/bin/apachectl -t //測試語法

/usr/local/apache2.4/bin/apachectl start //啓動服務

netstat -lntp 


用curl localhost測試一下是否解析成功

vim /usr/local/apache2.4/htdocs/test.php //增長以下內容

image.png

curl localhost/test.php

image.png



http的默認虛擬主機

 一臺服務器能夠訪問多個網站,每一個網站都是一個虛擬主機

任何一個域名解析到這個主機臺機器,均可以訪問的虛擬主機就是默認虛擬主機

 概念:域名(主機名)、DNS、解析域名、hosts

window下邊的hosts在C:\Windows\System32\drivers\etc路徑下,能夠定義一個域名指向到一個IP,例如

image.png

定義完在windows上邊ping一下它確實指向了定義的IP上,若是不指定他會指向到一個公網IP上

image.png


 配置虛擬主機

編輯配置文件:vim /usr/local/apache2.4/conf/httpd.conf 搜索httpd-vhosts,去掉#

image.png

由於配置文件僅僅能定義一個ServerName,因此如今打開一個二級配置文件

二級配置文件就是虛擬主機配置文件

在這個配置文件裏,是能夠定義多個ServerName的

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf//改成以下

<VirtualHost *:80>
    ServerAdmin admin@aminglinux.com            #這個是要定義郵箱,要不要無所謂能夠刪掉
    DocumentRoot "/data/wwwroot/abc.com"        #這個定義網站的根目錄在哪裏,好比在/data/wwwroot/abc.com
    ServerName abc.com                  #網站域名(只容許寫一個)  
    ServerAlias www.abc.com www.123.com     #網站別名,好比abc能夠訪問123也能夠訪問,能夠寫多個域名
    ErrorLog "logs/abc.com-error_log"        #錯誤日誌
    CustomLog "logs/abc.com-access_log" common  #訪問日誌
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName www.111.com
    ServerAlias www.exaple.com
    ErrorLog "logs/111.com-error_log"
    CustomLog "logs/111.com-access_log" common
<VirtualHost *:80>
        DocumentRoot "/data/wwwroot/abc.com"  
        ServerName abc.com
        ServerAlias www.abc.com www.123.com
        ErrorLog "logs/abc.com-error_log"
        CustomLog "logs/abc.com-access_log" common
</VirtualHost>

<VirtualHost *:80>
        DocumentRoot "/data/wwwroot/111.com"
        ServerName 111.com
        ServerAlias www.example.com        //驗證
        ErrorLog "logs/111.com-error_log"
        CustomLog "logs/111.com-access_log" common
</VirtualHost>

更改完配置文件建立對應的目錄:

mkdir /data/wwwroot/

mkdir /data/wwwroot/abc.com

mkdir /data/wwwroot/111.com

而後在對應的站點根目錄下建立一個好比說:index.php

vim /data/wwwroot/abc.com/index.php   給abc.com裏邊定義以下

<?php
echo "abc.com";

vim /data/wwwroot/111.com/index.php   給111.com裏邊定義以下

<?php
echo "111.com";

最後檢查、重啓

/usr/local/apache2.4/bin/apachectl -t
/usr/local/apache2.4/bin/apachectl graceful

測試虛擬主機

mkdir -p /data/wwwroot/aming.com  /data/wwwroot/www.123.com 

 echo "aming.com" > /data/wwwroot/aming.com/index.html //網站默認的主頁就是index.html   

 echo "123.com" > /data/wwwroot/123.com/index.html 

 curl -x127.0.0.1:80 aming.com //這樣會去訪問aming.com/index.html 

 curl -x127.0.0.1:80 www.123.com //訪問www.123.com

 curl -x127.0.0.1:80 www.abc.com

image.png

 所謂虛擬主機就是:任何一個域名解析到這個ip上他都會去訪問這個默認虛擬主機

在主配置文件中,httpd.conf裏面,打開了虛擬主機配置文件,也就是刪除到 # 號,那虛擬主機配置就生效了,一旦虛擬主機配置文件生效,那主配置文件裏面所定義的DocumentRoot以及ServerName失效

虛擬主機配置文件一旦打開,能夠定義不少個VirtualHost,每個VirtualHost都都有一個對應的 DocumentRoot 和 ServerName ,每個VirtualHost都表明着一個站點,都是一個虛擬主機。在虛擬主機裏面有一個特殊的默認虛擬主機,所謂默認虛擬主機就是不管任何域名解析到這個IP上,都會去訪問默認虛擬主機


httpd的用戶認證

假如說訪問123.com的時候有個需求,你能讓你直接訪問,須要輸入用戶名密碼,驗證經過以後呢才能訪問,這樣作的目的是爲了增長安全性

在第二個上更改由於第一個是默認虛擬主機

image.png

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //把123.com那個虛擬主機編輯成以下內容

image.png

<Directory /data/wwwroot/111.com> //指定認證的目錄
   AllowOverride AuthConfig //這個至關於打開認證的開關
   AuthName "111.com user auth" //自定義認證的名字,做用不大
   AuthType Basic //認證的類型,通常爲Basic,其餘類型阿銘沒用過
   AuthUserFile /data/.htpasswd  //指定密碼文件所在位置,這個要記住一會要生成他的密碼文件
   require valid-user //指定須要認證的用戶爲所有可用用戶
</Directory>

生成他的密碼文件,-c建立密碼文件,-m指定密碼加密類型,好比說用戶叫awei,輸入兩次密碼

/usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd awei

image.png

假如說你想在建立一個用戶好比zhangsan,那就不須要-c建立密碼文件了,由於剛纔已經建立了,直接-m加用戶名就能夠/usr/local/apache2.4/bin/htpasswd -m /data/.htpasswd zhangsan

能夠查看到生成的密碼cat /data/.htpasswd

image.png

 從新加載配置-t , graceful

檢查配置文件語法是否正確,加上-t選項
 /usr/local/apache2.4/bin/apachectl -t
從新加載配置文件,加上graceful
 /usr/local/apache2.4/bin/apachectl graceful

測試

如今虛擬機上用命令測試 

不指定用戶密碼:curl -x127.0.0.1:80 111.com //狀態碼爲401,401表示須要用戶驗證

image.png

 指定用戶密碼:curl -x127.0.0.1:80 -uawei:123456789 111.com //狀態碼爲200 

格式爲:-u指定用戶:用戶密碼 解釋:下邊的例子用戶是aming密碼是lishiming

image.png


在電腦瀏覽器上測試

先在Windows上綁定hosts,window下邊的hosts在C:\Windows\System32\drivers\etc路徑下

image.png

綁定完瀏覽器輸入111.com,輸入用戶密碼就能夠訪問到了

image.png



還能夠針對單個文件進行認證

好比說訪問123.php時再認證

    <FilesMatch 123.php>

        AllowOverride AuthConfig

        AuthName "123.com user auth"

        AuthType Basic

        AuthUserFile /data/.htpasswd

        require valid-user

    </FilesMatch>

image.png

 從新加載配置-t , 檢測graceful

檢查配置文件語法是否正確,加上-t選項
 /usr/local/apache2.4/bin/apachectl -t
從新加載配置文件,加上graceful
 /usr/local/apache2.4/bin/apachectl graceful

測試

編寫一個123.php腳本vim /data/wwwroot/111.com/123.php 寫入:

<?php
echo "123.php";

在虛擬機上:curl -x127.0.0.1:80 111.com  -I 你發現不用輸入密碼也能夠訪問到了

而訪問123.com時則是401:curl -x127.0.0.1:80 111.com/123.php -I

輸入用戶名密碼就能夠訪問到:curl -x127.0.0.1:80 -uaming:lishiming 111.com/123.php



域名跳轉

需求,把123.com域名跳轉到www.123.com,配置以下:

<IfModule mod_rewrite.c> //須要mod_rewrite模塊支持
        RewriteEngine on  //打開rewrite引擎功能,打開了下邊的功能纔會生效
        RewriteCond %{HTTP_HOST} !^111.com$  //定義rewrite的條件(何時才跳轉),當主機名(域名)不是111.com時知足條件,他就會跳轉
        RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L] //定義rewrite規則,除去域名以外的連接或者其餘的也跳轉到111.com,當知足上面的條件時,這條規則纔會執行,R權重301表示永久重定向,L跳轉一次
</IfModule>

image.png

能夠再這增長一個測試域名

image.png

 從新加載配置-t , 檢測graceful

檢查配置文件語法是否正確,加上-t選項
 /usr/local/apache2.4/bin/apachectl -t
從新加載配置文件,加上graceful
 /usr/local/apache2.4/bin/apachectl graceful

測試

1.先檢查阿帕奇有沒有加載rewrite模塊:

/usr/local/apache2/bin/apachectl -M|grep -i rewrite

2.若無該模塊,須要編輯配置文件,搜索:rewrite,刪除前面的#

vi /usr/local/apache2.4/conf/httpd.conf

image.png

檢查配置文件語法是否正確,加上-t選項
 /usr/local/apache2.4/bin/apachectl -t
從新加載配置文件,加上graceful
 /usr/local/apache2.4/bin/apachectl graceful

3.在查看有沒有模板:/usr/local/apache2/bin/apachectl -M|grep -i rewrite

image.png

curl -x127.0.0.1:80 2111.com.cn //狀態碼爲301,你發現他自動跳轉到了111.com

image.png



httpd訪問日誌

訪問日誌記錄用戶的每個請求

日誌所在目錄:

[root@aaa-01 ~]# ls /usr/local/apache2.4/logs
111.com-access_log  abc.com-error_log                   dummy-host2.example.com-error_log  error_log
111.com-error_log   access_log                          dummy-host.example.com-access_log  httpd.pid
abc.com-access_log  dummy-host2.example.com-access_log  dummy-host.example.com-error_log

能夠更改格式:

 vim /usr/local/apache2.4/conf/httpd.conf //搜索LogFormat 

它提供了兩個日誌的格式,默認使用的是第二種common

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
#h表示host來源IP,l表示login用戶,u表示user用戶密碼,t表示time時間,r表示request(行爲),s表示status狀態碼,b表示byte大小
#user-agent:用戶代理
#referer:跳轉到當前位置的上一個網址(即:提供當前IP的網站)

image.png 

把虛擬主機配置文件改爲以下: 把默認的common格式改爲combined

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

 <VirtualHost *:80>

    DocumentRoot "/data/wwwroot/www.123.com"

    ServerName www.123.com

    ServerAlias 123.com

    CustomLog "logs/123.com-access_log" combined

</VirtualHost>

 從新加載配置文件 -t,graceful

 在訪問:curl -x127.0.0.1:80 -I 123.com 

 查看日誌:tail /usr/local/apache2.4/logs/123.com-access_log

image.png



訪問日誌不記錄靜態文件

網站大多元素爲靜態文件,如圖片、css、js等,這些元素能夠不用記錄 

 把虛擬主機配置文件改爲以下: 

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

image.png

以什麼結尾的標識符


    SetEnvIf Request_URI ".*\.gif$" img
    SetEnvIf Request_URI ".*\.jpg$" img
    SetEnvIf Request_URI ".*\.png$" img
    SetEnvIf Request_URI ".*\.bmp$" img
    SetEnvIf Request_URI ".*\.swf$" img
    SetEnvIf Request_URI ".*\.js$" img
    SetEnvIf Request_URI ".*\.css$" img

    CustomLog "logs/111.com-access_log" combined env=!img (只要符合這個條件的請求都不會記錄到條件裏)

image.png

從新加載配置文件 -t, graceful

測試

mkdir /data/wwwroot/111.com/images //建立目錄,並在這目錄下上傳一個圖片rz

image.png

curl -x127.0.0.1:80 -I 111.com/timg.jpg

tail /usr/local/apache2.4/logs/111.com-access_log 



訪問日誌切割

· 日誌一直記錄總有一天會把整個磁盤佔滿,因此有必要讓它自動切割,並刪除老的日誌文件

· 作日誌切割的目的,是爲了防止磁盤寫滿,另外一個目的就是爲了更方便的去管理日誌

 把虛擬主機配置文件改爲以下: 

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

  <VirtualHost *:80>

    DocumentRoot "/data/wwwroot/www.111.com"

    ServerName www.111.com

    ServerAlias 111.com

    SetEnvIf Request_URI ".*\.gif$" img

    SetEnvIf Request_URI ".*\.jpg$" img

    SetEnvIf Request_URI ".*\.png$" img

    SetEnvIf Request_URI ".*\.bmp$" img

    SetEnvIf Request_URI ".*\.swf$" img

    SetEnvIf Request_URI ".*\.js$" img

    SetEnvIf Request_URI ".*\.css$" img 

    CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img

</VirtualHost>

從新加載配置文件 -t, graceful

解釋:

rotatelogs工具,它是Apache自帶的一個切割工具

-l參數,目的是以當前系統時間爲基準。若是不指定 -l ,那麼就會指定 UTC時間 的格式去切割日誌

在中國應該是 CST,在美國是 UTC ,二者時區不一樣,相差幾個小時

定義日誌的名稱,由於是切割的,因此根據時間日期讓它自動變,就須要加一個變量%Y%m%d

%Y,表示 年

%m,表示 月

%d,表示 日

按規定時間去生成,時間段爲1天,換算成秒,就是86400秒

測試:

這時候還須要去作一些訪問,由於尚未任何的日誌生成,在這個目錄下尚未生成一個新的文件

[root@aaa-01 111.com]# ls /usr/local/apache2.4/logs/
111.com-access_log  abc.com-error_log                   dummy-host2.example.com-error_log  error_log
111.com-error_log   access_log                          dummy-host.example.com-access_log  httpd.pid
abc.com-access_log  dummy-host2.example.com-access_log  dummy-host.example.com-error_log

在訪問一下:curl -x127.0.0.1:80 111.com/123.php

查看一下生成了新的日誌文件:ls /usr/local/apache2.4/logs/以日期爲後綴的新日誌文件

image.png

查看新生成的日誌文件內容,會看到就是剛剛curl命令訪問的

[root@aaa-01 111.com]# cat /usr/local/apache2.4/logs/111.com-access_20180728.log
127.0.0.1 - - [28/Jul/2018:17:24:32 +0800] "GET HTTP://111.com/123.php HTTP/1.1" 200 7 "-" "curl/7.29.0"

· 在之後的凌晨0點的時候,就會生成一個新的日誌

· 另外還須要作一個任務計劃,超過一個月或兩個月的日誌刪除,若是不刪除,那是否切割日誌就沒有意義了



靜態元素過時時間

瀏覽器訪問網站的圖片時會把靜態的文件緩存在本地電腦裏,這樣下次再訪問時就不用去遠程下載了

靜態元素,就是訪問的圖片、css、js

當用瀏覽器去訪問一個網站的時候,這個網站裏全部的靜態文件(好比圖片的樣式、js),瀏覽器就會默認把靜態文件緩存在電腦裏,叫作臨時的目錄或目錄

緩存的時間是在服務器上定義的,若是不去定義,那麼瀏覽器也不會把這些文件清空,或者瀏覽器有本身的機制去清空這些文件,或者說電腦軟件會定時幫你清理這些緩存的文件

爲何電腦會自動加載這些靜態文件呢?目的就是第二次,第三次訪問的時候,不去服務器去下載這些靜態文件了

在使用瀏覽器自帶的F12鍵去進行比對,第一次訪問一個圖片的時候是200的狀態碼,第二次訪問的時候,就是304,它檢測到下載的圖片並無修改過,因此就不會從新到服務器下載一次,這樣能夠節省帶寬,但沒有規定緩存何時清空,何時去服務器上去下載,再次下載,由於只要瀏覽器檢測到圖片未作更改,它這個狀態碼就一直爲304,304這個狀態碼就意味着他不會去服務器下載

image.png

<IfModule mod_expires.c>
    ExpiresActive on  //打開該功能的開關
    ExpiresByType image/gif  "access plus 1 days"
    ExpiresByType image/jpeg "access plus 24 hours"
    ExpiresByType image/png "access plus 24 hours"
    ExpiresByType text/css "now plus 2 hour"
    ExpiresByType application/x-javascript "now plus 2 hours"
    ExpiresByType application/javascript "now plus 2 hours"
    ExpiresByType application/x-shockwave-flash "now plus 2 hours"
    ExpiresDefault "now plus 0 min"
</IfModule>

測試

查看一下expaire模塊服務是否開啓:

/usr/local/apache2.4/bin/apachectl -M |grep expaire

沒開啓須要編輯配置文件搜索:expires_module  把前邊的#去掉

vim /usr/local/apache2.4/conf/httpd.conf

image.png

從新加載一下,在查看一下服務:

/usr/local/apache2.4/bin/apachectl graceful

image.png

 curl測試一下:

[root@aaa-01 111.com]# curl -x127.0.0.1:80 111.com/linux.jpg -I
HTTP/1.1 200 OK
Date: Sat, 28 Jul 2018 09:56:32 GMT     #當前時間
Server: Apache/2.4.34 (Unix) PHP/5.6.30
Last-Modified: Sat, 28 Jul 2018 08:43:01 GMT
ETag: "595e-5720b37448f40"
Accept-Ranges: bytes
Content-Length: 22878
Cache-Control: max-age=86400 #緩存的時間
Expires: Sun, 29 Jul 2018 09:56:32 GMT #過時時間
Content-Type: image/jpeg

image.png



配置防盜鏈

經過限制referer來實現防盜鏈的功能

不是我認識的referer我就不容許你訪問,好比說有一個第三方網站,原本圖片是他本身的圖片,可是這個圖片的訪問地址是A域名,而他在B域名裏邊去引用,這樣是不容許的,只能在A域名裏去訪問才能夠,這樣圖片會控制在咱們的服務器上,第三方的站點沒辦法引用 

解釋:     

盜鏈是指在本身的頁面上展現一些並不在本身服務器上的內容。一般的作法是經過技術手段得到它人服務器上的資源地址,繞過別人的資源展現頁面,直接在本身的頁面上向最終用戶提供此內容。比較常見的是一些小站盜用大站的資源(圖片、音樂、視頻、軟件等),對於這些小站來講,經過盜鏈的方法能夠減輕本身服務器的負擔,由於真實的空間和流量均是來自別人的服務器。

        防盜鏈系統就是防範盜鏈的系統,防止別人經過一些技術手段繞過本站的資源展現頁面,盜用本站的資源,讓繞開本站資源展現頁面的資源連接失效。實施防盜鏈系統後,由於屏蔽了那些盜鏈的間接資源請求,從而能夠大大減輕服務器及帶寬的壓力

 配置文件增長以下內容

  <Directory /data/wwwroot/111.com>    #本站點的目錄,實際上就是DocumentRoot
        SetEnvIfNoCase Referer "http://111.com" local_ref    #定義referer的白名單,你論壇總有一個域名吧,好比111.com和aaa.com
        SetEnvIfNoCase Referer "http://aaa.com" local_ref
        #SetEnvIfNoCase Referer "^$" local_ref     #空的referer也設爲白名單,這裏先註釋掉
        <filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)">    #定義規則,這種格式的圖片設置白名單
            Order Allow,Deny #Order順序,
            Allow from env=local_ref
        </filesmatch>
    </Directory>

用電腦訪問

image.png 

若是咱們想要直接在瀏覽器中訪問111.com/qq.png,能夠將虛擬主機配置文件中空referer行前的註釋符去掉

而後檢查配置文件是否有語法錯誤,並從新加載配置文件

這樣就能夠在瀏覽器中正常訪問了

curl測試:

用curl模擬referer,-e指定referer

curl -e "http://www.aminglinux.com/123.html" 自定義referer



訪問控制-Directory

以目錄的形式

核心配置文件內容

  <Directory /data/wwwroot/www.111.com/admin/>

        Order deny,allow   以這順序爲主,哪一個在前邊就先執行哪一個

        Deny from all       先拒絕

        Allow from 127.0.0.1  在容許

    </Directory>

 curl測試狀態碼爲403則被限制訪問了

curl -x127.0.0.1:80 111.com/admin/index.php -I,-x指定的是目標IP 127.0.0.1,限制的源IP也是127.0.0.1,也能夠訪問內容



訪問控制-FilesMatch

針對文件或者連接

核心配置文件內容

<Directory /data/wwwroot/www.123.com>

    <FilesMatch  "admin.php(.*)">

        Order deny,allow

        Deny from all

        Allow from 127.0.0.1

    </FilesMatch>

</Directory>



訪問控制-禁止php解析

核心配置文件內容

    <Directory /data/wwwroot/www.123.com/upload>

        php_admin_flag engine off

        <FilesMatch  (.*)\.php(.*)>

        Order allow,deny

        Deny from all

    </Directory>

 curl測試時直接返回了php源代碼,並未解析



訪問控制-user_agent

user_agent能夠理解爲瀏覽器標識

CC是一種訪問***,它利用不少個肉雞訪問,是頗有規律的訪問,這時咱們須要用user_agent來控制。

 核心配置文件內容

   <IfModule mod_rewrite.c>

        RewriteEngine on

        RewriteCond %{HTTP_USER_AGENT}  .*curl.* [NC,OR] //NC:表示忽略大小寫 OR:或者

        RewriteCond %{HTTP_USER_AGENT}  .*baidu.com.* [NC]

        RewriteRule  .*  -  [F]

    </IfModule>

 curl -A "123123" 指定user_agent,模擬user_agent



php相關配置

 查看php配置文件位置

 /usr/local/php/bin/php -i|grep -i "loaded configuration file"可是這個不許

模擬一下,在111目錄下建立一個phpinfo

編輯:vi index.php

把這個寫進去:

<?php

phpinfo(); 

登陸網站:111.com/index.php查看它的配置文件,可是他並無加載,咱們須要複製一份:

先進入到他的源碼包:cd /usr/local/src/php-7.1.6/

拷貝:cp php.init-development /usr/local/php7/etc/php.ini

刷新配置:/usr/local/apache2.4/bin/apachectl graceful

找到phpinfo所在的路徑打開它進行配置

wKiom1mIFD_TMPwCAACUGNxgjyo949.png

vim /usr/local/php7/etc/php.ini

 搜索date.timezone定義時區

 Asia/Shanghai 上海

禁掉一些安全相關的函數

搜索下邊這個:默認他是空的,把下邊這些安全安全函數粘貼進去 

 disable_functions 安全函數

eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen,proc_open,proc_close,phpinfo

打開調試錯誤日誌

搜索:display_errors 

把On改爲Off 這樣他就不會把錯誤信息輸出到瀏覽器中

配置一個錯誤日誌搜索:log_errors On表示開啓,

把日誌定義到一個地方,搜索error_log,好比咱們放到/tmp/php_errors.log下去,還要定義errors.log的級別,搜索:error_reporting

open_basedir安全選項

 你一臺服務器上跑了不少個站點,可能會有一個站點上代碼有問題,結果站點被黑了,被人拿到了權  限,而後他會往裏***,又跑到另外一個站點,可是這時我要加一個open_basedir,他就有可能黑不了,咱們能夠給它作一個隔離,A網站目錄在A目錄下B網站在B目錄下,這樣即便A網站被黑了他也看不到B網站的目錄,也不會被牽連進來,

搜索open_basedir

定義格式:/data/wwwroot/111.com:/

若是你這個網站上跑了N多個站點,能夠再aoach的虛擬主機裏邊編輯:

打開:vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

加上這個php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"



php動態擴展模塊

/usr/local/php/bin/php -m //查看模塊

 下面安裝一個redis的模塊

 cd /usr/local/src/

 wget https://codeload.github.com/phpredis/phpredis/zip/develop 

 mv develop phpredis-develop.zip

 unzip phpredis-develop.zip

 cd phpredis-develop

 /usr/local/php7/bin/phpize //生成configure文件

 ./configure --with-php-config=/usr/local/php7/bin/php-config

 make && make install

 /usr/local/php/bin/php -i |grep extension_dir //查看擴展模塊存放目錄,咱們能夠在php.ini中去自定義該路徑 

 vim /usr/local/php/etc/php.ini  //增長一行配置(能夠放到文件最後一行)

extension = redis.so  

相關文章
相關標籤/搜索