2018-06-29筆記(LAMP配置)

11.25 配置防盜鏈

什麼是盜鏈
「盜鏈」的定義是:此內容不在本身服務器上,而經過技術手段,繞過別人放廣告有利益的最終頁,直接在本身的有廣告有利益的頁面上向最終用戶提供此內容。 經常是一些名不見經傳的小網站來盜取一些有實力的大網站的地址(好比一些音樂、圖片、軟件的下載地址)而後放置在本身的網站中,經過這種方法盜取大網站的空間和流量。
解決這個問題的方法是配置下防盜鏈,讓外來的盜不了鏈,這裏能夠用兩種方法實現
方法1:Apache防盜鏈的第一種實現方法,能夠用rewrite實現
(1)首先要確認Apache的rewrite module可用:
打開Apache主配,確保開啓rewrite module配置php

[root@localhost ~]# vi /usr/local/apache2.4/conf/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so    #確保這行被開啓

確認是否開啓rewrite module參數html

[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -M|grep rewrite
rewrite_module (shared)

(2)在虛擬主機配置文件中添加如下內容git

<Directory /data/111>                     
#防盜鏈配置
RewriteEngine On                                       
RewriteCond %{HTTP_REFERER} !^$       
RewriteCond %{HTTP_REFERER} !111\.com/.*$ [NC]          
RewriteCond %{HTTP_REFERER} !www\.111\.com/.*$ [NC] 
RewriteRule .*\.(gif|jpg|swf)$ http://www.111.com/about/nolink.png [R,NC,L]  
</Directory>

相關選項的解釋github

1.Directory                  ##指定針對的目錄,通常是整個網站
2.RewriteEngine On  ##啓用rewrite,要想rewrite起做用,必需要寫上
3.RewriteCond    ## Rewrite的條件
4. %{HTTP_REFERER}:##服務器變量,HTTPReferer是header的一部分,當瀏覽器向web服務器發送請求的時候,通常會帶上Referer,告訴服務器我是從哪一個頁面連接過來的,服務器藉此能夠得到一些信息用於處理。。
5.[ NC]                ##指的是不區分大小寫,[R]強制重定向redirect
6.字母L表示若是能匹配本條規則,那麼本條規則是最後一條(Last),忽略以後的規則

防盜鏈配置的說明:web

  1. RewriteCond %{HTTP_REFERER} 定義信任的網站referer,通常爲本身的網站,^$表示空referer
  2. RewriteRule .*.(gif|jpg|swf)$要保護文件的擴展名(以|分開)。以這些爲擴展名的文件。
  3. http://www.111.com/about/nolink.png 定義被盜鏈時替代的圖片,讓全部盜鏈 jpg、gif、swf 等文件的網頁,顯示網頁文檔根目錄下的about/ nolink.png 文件。注意:替換顯示的圖片不要放在設置防盜鏈的目錄中,而且該圖片文件體積越小越好。

固然你也能夠不設置替換圖片,而是使用下面的語句便可:redis

RewriteRule .*\.(gif|jpg|png)$ - [F]

注:[F] (強制URL爲被禁止的forbidden),強制當前URL爲被禁止的,即,當即反饋一個HTTP響應代碼403(被禁止的)。shell

(3) 建立about目錄,把自定義nolink.png放上去apache

[root@localhost ~]# ll /data/111/about/nolink.png 
-rw-r--r-- 1 root root 0 7月   1 10:40 /data/111/about/nolink.png

(4)測試並重啓vim

[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful

(5)用curl進行測試瀏覽器

[root@localhost ~]# curl -x192.168.66.131:80 111.com/images/123.jpg -I
HTTP/1.1 200 OK
Date: Sun, 01 Jul 2018 02:43:25 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.30
Last-Modified: Thu, 28 Jun 2018 09:38:32 GMT
ETag: "12bba-56fb07e9a7dc4"
Accept-Ranges: bytes
Content-Length: 76730
Content-Type: image/jpeg

curl -e指定referer

[root@localhost ~]# curl -e "http://qqq.com" -x192.168.66.131:80 111.com/images/123.jpg -I
HTTP/1.1 302 Found
Date: Sun, 01 Jul 2018 02:43:43 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.30
Location: http://www.111.com/about/nolink.png
Content-Type: text/html; charset=iso-8859-1

能夠看到已經跳轉到自定義的顯示的圖片,測試成功
方法2:經過判斷瀏覽器頭信息來阻止某些請求,即利用SetEnvIfNoCase和access。這個方法能夠經過阻止某些機器人或蜘蛛爬蟲抓取你的網站來節省你的帶寬流量
在虛擬主機配置文件中加入

SetEnvIfNoCase Referer "^$" local_ref
SetEnvIfNoCase Referer "www.111.com/.*$" local_ref
SetEnvIfNoCase Referer "111.com/.*$" local_ref
<filesmatch "\.(mp3|mp4|zip|rar|jpg|gif)">
#2.4版本以上,方法以下:
    Require all denied
    Require env local_ref
# 2.4版本如下的
#方法一:
#Order Deny,Allow
#  Allow from env=local_ref 
# Deny from all
#方法二:
#  Order Allow,Deny
# Allow from env=local_ref
</filesmatch>

檢測並重啓apache

[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful

用curl測試

[root@localhost ~]# curl -x192.168.66.131:80 111.com/images/123.jpg -I
HTTP/1.1 200 OK
Date: Sun, 01 Jul 2018 03:03:58 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.30
Last-Modified: Thu, 28 Jun 2018 09:38:32 GMT
ETag: "12bba-56fb07e9a7dc4"
Accept-Ranges: bytes
Content-Length: 76730
Content-Type: image/jpeg

用curl -e指定referer測試

[root@localhost ~]# curl -e "http://aaa.com" -x192.168.66.131:80 111.com/images/123.jpg -I
HTTP/1.1 403 Forbidden
Date: Sun, 01 Jul 2018 03:04:34 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

能夠看到顯示403,測試成功

11.26 訪問控制Directory

有時候咱們有這樣的需求,讓指定的目錄,只能某些IP能訪問,能夠在配置文件中加入

<Directory /data/111/imeages>
 Order deny,allow
       Deny from all
      Allow from 127.0.0.1
</Directory>

測試語法並重啓

[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful

用curl 測試

[root@localhost ~]# curl -x192.168.66.131:80 111.com/images/123.jpg -I
HTTP/1.1 403 Forbidden
Date: Sun, 01 Jul 2018 03:30:29 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

[root@localhost ~]# curl -x127.0.0.1:80 111.com/images/123.jpg -I
HTTP/1.1 200 OK
Date: Sun, 01 Jul 2018 03:30:45 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.30
Last-Modified: Thu, 28 Jun 2018 09:38:32 GMT
ETag: "12bba-56fb07e9a7dc4"
Accept-Ranges: bytes
Content-Length: 76730
Content-Type: image/jpeg

能夠看到127.0.0.1能夠成功訪問,其餘IP顯示403

11.27 訪問控制FilesMatch

針對某個文件進行控制
在虛擬主機配置文件中加入

<Directory /data/111>
    <FilesMatch  "admin.php(.*)">
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
    </FilesMatch>
</Directory>

測試語法並重啓

[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful

用curl進行測試

[root@localhost ~]# curl -x192.168.66.131:80 111.com/admin.php -I
HTTP/1.1 403 Forbidden
Date: Sun, 01 Jul 2018 03:38:10 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

[root@localhost ~]# curl -x127.0.0.1:80 111.com/admin.php -I
HTTP/1.1 200 OK
Date: Sun, 01 Jul 2018 03:38:15 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Content-Type: text/html; charset=GBK

能夠看到訪問admin.php只有127.0.0.1顯示OK

11.28 限定某個目錄禁止解析php

首先在images目錄新建個1.php,寫入

hello php[root@localhost ~]# ll /data/111/images/1.php 
-rw-r--r-- 1 root root 25 7月   1 12:33 /data/111/images/1.php
[root@localhost ~]# cat !$
cat /data/111/images/1.php
<?php
echo "hello php";

正常解析

[root@localhost ~]# curl -x192.168.66.131:80 111.com/images/1.php
hello php

在虛擬主機配置文件中加入如下見容

<Directory /data/111/images>
        php_admin_flag engine off
    </Directory>

檢測重啓

[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful

再用curl訪問images下的1.php

[root@localhost ~]# curl -x192.168.66.131:80 111.com/images/1.php
<?php
echo "hello php";

能夠看到直接顯示了源碼,沒有解析php

11.29 限制user_agent

user_agent能夠理解爲瀏覽器標識,有時候咱們能夠經過限制user_agent來防止一些非法訪問
這裏也是用到rewrite模塊,先確認apache有沒有加載rewrite模塊
打開Apache主配,確保開啓rewrite module配置

[root@localhost ~]# vi /usr/local/apache2.4/conf/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so    #確保這行被開啓

確認是否開啓rewrite module參數

[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -M|grep rewrite
rewrite_module (shared)

1在虛擬主機配置文件 中加入如下內容
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} .curl. [NC,OR]
RewriteCond %{HTTP_USER_AGENT} .baidu.com. [NC]
RewriteRule .* - [F]
</IfModule>
說明,上面語句的意思是打開rewrite引擎,若是user_agent包含curl或者baidu.com,[F] (強制URL爲被禁止的forbidden),強制當前URL爲被禁止的,即,當即反饋一個HTTP響應代碼403(被禁止的)
2檢測重啓apache

[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful

3用curl測試,-A能夠指定user_agent

[root@localhost ~]# curl -x192.168.66.131:80 111.com -I
HTTP/1.1 403 Forbidden
Date: Sun, 01 Jul 2018 04:47:23 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

[root@localhost ~]# curl -A "www.baidu.com" -x192.168.66.131:80 111.com -I
HTTP/1.1 403 Forbidden
Date: Sun, 01 Jul 2018 04:47:43 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

[root@localhost ~]# curl -A "www.qq.com" -x192.168.66.131:80 111.com -I
HTTP/1.1 200 OK
Date: Sun, 01 Jul 2018 04:47:51 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Content-Type: text/html; charset=GBK

能夠看到用curl和包含baidu.com的訪問顯示403,用其餘顯示200,OK

11.30/11.31 php相關配置

一、查看加載的php配置文件

[root@localhost ~]#  /usr/local/php/bin/php -i|grep -i "loaded configuration file"
PHP Warning:  Unknown: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in Unknown on line 0
Loaded Configuration File => /usr/local/php/etc/php.ini

說明:有時候可能顯示不正確,能夠用apache打開php.info()查看加載的配置文件
二、設置默認時區
能夠看到上面PHP有個警告,是由於時區沒有設置

[root@localhost ~]# vim /usr/local/php/etc/php.ini
搜索:date.timezone,編輯以下
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Asia/Shanghai    #設置時區爲亞洲/上海,並取消前面的註釋符;
[root@localhost ~]# /usr/local/php/bin/php -i|grep -i "loaded configuration file" #再次運行已經沒有警告
Loaded Configuration File => /usr/local/php/etc/php.ini

三、關閉一些危險的函數

[root@localhost ~]# vim /usr/local/php/etc/php.ini
搜索:disable_functions,編輯以下
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

四、配置錯誤日誌,錯誤顯示

[root@localhost ~]# vim /usr/local/php/etc/php.ini
分別搜索:error_log, log_errors, display_errors, error_reporting,編輯以下
error_log = On                                              #先打開錯誤日誌
log_errors = /var/log/php/php_error.log        #定義錯誤日誌的路徑
display_errors = Off                                       #關閉網頁上顯示的錯誤信息    
將error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT改成    #更改錯誤日誌級別
error_reporting = E_ALL & ~E_NOTICE

php的經常使用錯誤日誌級別

E_ERROR : 致命的運行時錯誤,會阻止腳本運行。
E_WARNING : 運行時警告
E_RARSE:語法解析錯誤
E_NOTICE: 運行時注意消息
E_ALL :所有錯誤
E_ALL &~E_NOTICE 除了notice以外全部的錯誤

五、配置open_basedir,限定網站的活動目錄
目前,一臺服務器上跑多個網站的狀況在企業中很廣泛,若是其中一個網站被黑,極可能會連累到其餘網站,須要經過open_basedir功能來限制一個網站的活動目錄

[root@localhost ~]# vim /usr/local/php/etc/php.ini
搜索:open_basedir,編輯以下
open_basedir = /tmp:/data/111 指定網站的活動目錄,並取消前面的註釋符;

php.ini是針對php的全局配置,即針對全部的虛擬主機都生效,若是隻運行了一臺虛擬主機能夠用php.ini裏的方法來限定網站的活動目錄,若是運行了多臺虛擬機,就須要在httpd.conf裏針對每一個虛擬主機分別設置
編輯httpd_vhosts.conf
[root@localhost ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

在每一臺虛擬主機設置的最後一行</VirtualHost>上方添加對應網站的活動目錄,以實現逐站限定活動目錄:
php_admin_value open_basedir "/data/111"
php_admin_value open_basedir 是固定格式

11.32 php擴展模塊安裝

查看模塊

[root@localhost ~]# /usr/local/php/bin/php -m 
[PHP Modules]
bz2
Core
ctype
date
dom
ereg
exif
fileinfo
此處省略。。。

下面安裝一個redis的模塊

[root@localhost ~]# cd /usr/local/src
[root@localhost src]# wget https://codeload.github.com/phpredis/phpredis/zip/develop 
--2018-07-01 13:20:14--  https://codeload.github.com/phpredis/phpredis/zip/develop
正在解析主機 codeload.github.com (codeload.github.com)... 13.229.189.0, 13.250.162.133, 54.251.140.56
正在鏈接 codeload.github.com (codeload.github.com)|13.229.189.0|:443... 已鏈接。
已發出 HTTP 請求,正在等待迴應... 200 OK
長度:239183 (234K) [application/zip]
正在保存至: 「develop」
100%[=============================================================>] 239,183      187KB/s 用時 1.3s   
2018-07-01 13:20:17 (187 KB/s) - 已保存 「develop」 [239183/239183])
[root@localhost src]# mv develop phpredis-develop.zip
[root@localhost src]#  unzip phpredis-develop.zip
Archive:  phpredis-develop.zip
fa5f6e1411e99c809dba9cfa126952758e30f4b0
   creating: phpredis-develop/
  inflating: phpredis-develop/.gitignore  
  inflating: phpredis-develop/.gitmodules  
  inflating: phpredis-develop/.travis.yml  
  inflating: phpredis-develop/COPYING  
  inflating: phpredis-develop/CREDITS  
    。。。

進入phpredis目錄

[root@localhost src] cd phpredis-develop
[root@localhost phpredis-develop] /usr/local/php/bin/phpize //生成configure文件
[root@localhost phpredis-develop] ./configure --with-php-config=/usr/local/php/bin/php-config
 [root@localhost phpredis-develop]make && make install
 [root@localhost phpredis-develop]/usr/local/php/bin/php -i |grep extension_dir //查看擴展模塊存放目錄,咱們能夠在php.ini中去自定義該路徑 
[root@localhost phpredis-develop] vim /usr/local/php/etc/php.ini  //增長一行配置(能夠放到文件最後一行)
extension = redis.so

查看 動態擴展模塊
grep '^extension=' /usr/local/php/etc/php.ini

[root@localhost phpredis-develop]# grep '^extension' /usr/local/php/etc/php.ini
extension = redis.so

擴展
幾種限制ip的方法 http://ask.apelearn.com/question/6519
apache 自定義header http://ask.apelearn.com/question/830
apache的keepalive和keepalivetimeout http://ask.apelearn.com/question/556
apache開啓壓縮 http://ask.apelearn.com/question/5528
apache2.2到2.4配置文件變動 http://ask.apelearn.com/question/7292
apache options參數 http://ask.apelearn.com/question/1051
apache禁止trace或track防止xss http://ask.apelearn.com/question/1045
apache 配置https 支持ssl http://ask.apelearn.com/question/1029
apache rewrite教程 http://coffeelet.blog.163.com/blog/static/13515745320115842755199/ http://www.cnblogs.com/top5/archive/2009/08/12/1544098.html
apache rewrite 出現死循環 http://ask.apelearn.com/question/1043
php錯誤日誌級別參考 http://ask.apelearn.com/question/6973
php開啓短標籤 http://ask.apelearn.com/question/120
php.ini詳解 http://legolas.blog.51cto.com/2682485/493917

相關文章
相關標籤/搜索