linux覆盤:構架搭建lamp(配置)

apache和php結合

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

#ServerNamephp

這就是在Apache啓動start時的輸出內容,打開註釋掉的www.example.com:80css

#Require all denied修改成Require all granted是受權容許訪問的意思,不容許就是403html

#controls who can get stuff from this server後面修改denied爲grantedjava

#容許PHP服務解析該服務器nginx

用/AddType 搜索到對應的信息添加「AddType application/x-httpd-php .php」算法

#添加索引頁apache

用/index 搜索到 DirectoryIndex index.html 在後面追加上index.phpvim

修改完配置文件檢查是否正確:/usr/local/apache2.4/bin/apachectl -t (syntax ok)瀏覽器

最後從新加載配置文件:/usr/local/apache2.4/bin/apachectl graceful

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

/usr/local/apache2.4/bin/apachectl graceful //從新加載服務

netstat -lntp 查看端口

檢測服務器是否支持PHP解析:

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

<?php

phpinfo(); 

?> 
//該參數的含義是PHP的信息
//該命令的含義是:在訪問該地址時,直接打印PHP的相關信息

curl loaclhost/1.php

php解析正常一堆東西就說明成功了,而後能夠在網頁上也測試一下,記得修改Windows的hosts

若是能夠正常訪問,說明該服務器支持PHP解析,若是不支持php解析的話,訪問該文件時會顯示源代碼

Apache用戶認證

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"  
    ServerName  111.com
    serveralias www.111.com
    <Directory /data/wwwroot/111.com> //指定認證的目錄
        AllowOverride AuthConfig //這個至關於打開認證的開關
        AuthName "111.com user auth" //自定義認證的名字,做用不大
        AuthType Basic //認證的類型,通常爲Basic,其餘類型阿銘沒用過
        AuthUserFile /data/.htpasswd  //指定密碼文件所在位置
        require valid-user //指定須要認證的用戶爲所有可用用戶
    </Directory>
    ErrorLog "logs/111.com-error_log"
    CustomLog "logs/111.com-access_log" common
</VirtualHost>

建立密碼文件(後面lnmp的時候須要yum安裝httpd來實現此工具)

htpasswd命令:

Apache的Web服務器內置工具,用於建立和更新儲存用戶名、域和用戶基本認證的密碼文件

-c:=create,建立一個加密文件(二次不須要加此選項)

-n:不更新加密文件,只將更新後的用戶名密碼顯示在屏幕上

-m:使用MD5算法對密碼進行加密(默認)

-d:使用CRYPT算法對密碼進行加密

-p:不對密碼進行加密,即明文密碼

-s:使用SHA算法對密碼進行加密

-b:在命令行一併輸入用戶名和密碼,而不是根據提示輸入密碼

-D:刪除指定用戶

/usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd aming(這個aming是指定用戶)
New password: 
Re-type new password: 
Adding password for user aming
##在「/data/.htpasswd」爲用戶aming(自動建立)建立一個使用MD5算法加密的密碼文件
##再次建立用戶密碼時不須要-c,由於文件以及建立了

也能夠單獨針對文件進行認證

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    <FilesMatch 123.php>  只有在訪問到123.php時才須要認真☆☆☆
        AllowOverride AuthConfig
        AuthName "111.com user auth"
        AuthType Basic
        AuthUserFile /data/.htpasswd
        require valid-user
    </FilesMatch>
</VirtualHost>

域名跳轉

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    ServerAlias www.111.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規則,當知足上面的條件時,這條規則纔會執行
   </IfModule>
   ErrorLog "logs/111.com-error_log"
   CustomLog "logs/111.com-access_log" combined
</VirtualHost>

此方法實現www.111.com跳轉到111.com

注意的是若是缺乏rewrite模塊沒法實現此功能

/usr/local/apache2.4/bin/apachectl -M|grep -i rewrite  //若無該模塊
vim /usr/local/apache2.4/conf/httpd.conf
刪除rewrite_module (shared) 前面的#

Apache訪問日誌

日誌文件路徑:
ls /usr/local/apache2.4/logs

日誌格式路徑:
vim /usr/local/apache2.4/conf/httpd.conf
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:用戶代理,經過什麼去訪問,好比瀏覽器或者curl這些就是用戶代理
Referer:瀏覽器上次訪問的網址,跳過來前的地址

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
    ...
    ErrorLog "logs/111.com-error_log"
    CustomLog "logs/111.com-access_log" combined(把格式從原來的common修改成combined)
</VirtualHost>

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

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

訪問日誌不記錄靜態文件

<VirtualHost *:80>
   ...
    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
    #以上爲定義變量:將全部關於圖片的請求定義爲變量img
    CustomLog "logs/111.com-access_log" combined env=!img
    #「env=!img」表示非img變量。本行命令的含義是:不記錄關於變量img的請求日誌
</VirtualHost>

##將全部訪問圖片的請求定義爲變量img,在訪問記錄(日誌)中將其排除便可。從新加載後使用curl訪問img變量中所指定格式的文件內容時將不會產生訪問記錄。

訪問日誌切割

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
    ...   
    CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img  (combined將日誌記錄詳細,日誌按天切割)
</VirtualHost>

#rotatelogs是切割日誌的工具
-l 以當前系統的時間爲基準切割日誌 中國爲CST
定義切割後的名字,_%Y%m%d.log,Y年m月d日,切割時間爲一天換算成秒文86400秒
日誌保存在/usr/local/apache2.4/logs中
每小時切割一第二天志就是CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 3600"

靜態文件過時時間

<VirtualHost *:80>
    ...
<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"    //全部css定義爲兩小時
    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>
</VirtualHost>

#模塊/usr/local/apache2.4/bin/apachectl -M | grep -i expire
vim /usr/local/apache2.4/conf/httpd.conf搜索/expires並打開其模塊

配置防盜鏈

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<Directory /data/wwwroot/111.com> (防盜鏈目錄爲本站點)
        SetEnvIfNoCase Referer "http://111.com" local_ref (白名單)
        SetEnvIfNoCase Referer "http://aaa.com" local_ref (白名單)
        SetEnvIfNoCase Referer "^$" local_ref  (空的referer)
        <filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">  (針對這些的訪問作防盜鏈)
            Order Allow,Deny   (定義訪問控制順序,這裏是先把白名單的referer作一個容許其餘的禁止)
            Allow from env=local_ref  (這兩行指把白名單的referer作一個容許)
        </filesmatch>
</Directory>

訪問控制Directory(控制目錄的形式)

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
    <Directory /data/wwwroot/111.com/admin/> #本節用於設定指定IP訪問指定目錄的權限
        Order deny,allow (Order用來定義順序,先allow容許仍是deny拒絕看順序)
        Deny from all
        Allow from 127.0.0.1
        #只容許IP--127.0.0.1訪問「/data/wwwroot/111.com/admin/」目錄中的內容
        #這裏限制的ip是源ip,-x指定的是目標ip,可是目標來源ip相同因此指定目標ip就能夠實現需求
    </Directory>

訪問控制FilesMatch(控制文件名/連接的形式)

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<Directory /data/wwwroot/111.com>
        <FilesMatch  "admin.php(.*)"> (針對連接和文件名進行控制)
        Order deny,allow  
        Deny from all
        Allow from 127.0.0.1
    </FilesMatch>
</Directory>

限定某個目錄禁止解析php

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 
<Directory /data/wwwroot/111.com/upload>
        php_admin_flag engine off
</Directory>

#若是隻限制php解析,用戶訪問時還會看到php的源碼,爲了更安全能夠直接沒法訪問php文件提升安全性
<Directory /data/wwwroot/111.com/upload>
        php_admin_flag engine off
        <FilesMatch (.*)\.php(.*)>
        Order Allow,Deny
        Deny from all
        </FilesMatch>
</Directory>

限制user_agent(瀏覽器標識)

user_agent是瀏覽器的標識,用curl訪問時,出現curl/7.29.0爲Firefox瀏覽器,工做中用它來限制一些訪問,當受到cc攻擊,可是它的攻擊都有規律,user_agent是相同的,因此使用限制它來實現控制

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_USER_AGENT}  .*curl.* [NC,OR]
        RewriteCond %{HTTP_USER_AGENT}  .*baidu.com.* [NC]
        RewriteRule  .*  -  [F]
    </IfModule>
#NC表示忽略大小寫,OR選項表示或者(不加任何選項表而且)鏈接下一個條件,F=forbidden禁止。

PHP擴展模塊

在PHP的源碼包中沒有第三方模塊的包,可是在PHP源碼包的/ext/目錄下有好多擴展模塊,若是所須要的擴展模塊在該目錄下,能夠直接進行安裝:
先切換到指定模塊目錄下
生成configure文件:/usr/local/php7/bin/phpize
環境配置:./configure --with-php-config=/usr/local/php7/bin/php-config
make&&make install
安裝完成後在編輯PHP配置文件php.inid加載模塊!
相關文章
相關標籤/搜索