Apache優化——訪問控制

11.25 配置防盜鏈

編輯虛擬主機配置文件:php

[root@1 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    ServerAlias www.example.com
    <Directory /data/wwwroot/111.com>
        SetEnvIfNoCase Referer "http://111.com" local_ref
        SetEnvIfNoCase Referer "http://ask.apelearn.com" local_ref
        SetEnvIfNoCase Referer "^$" local_ref
        #定義referer白名單
        <FilesMatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)">
            Order Allow,Deny
            Allow from env=local_ref
        #定義規則:容許變量local_ref指定的referer訪問,拒絕其餘全部訪問。   
        </FilesMatch>
    </Directory>

    ErrorLog "logs/111.com-error_log"
    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
    #CustomLog "logs/111.com-access_log" combined env=!img
</VirtualHost>  

檢測語法錯誤並重載:
[root@1 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@1 ~]# /usr/local/apache2.4/bin/apachectl graceful

注: 若是在referer白名單中不加「^#」(空referer),直接訪問指定內容將會被拒絕。css

curl命令

curl -e 指定refererhtml

[root@1 ~]# curl -e "http://ask.apelearn.com/" -x192.168.8.131:80 111.com/baidu.png -I

11.26 訪問控制Directory

編輯虛擬主機配置文件:mysql

在配置文件加入以下參數: 
[root@1 admin]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

……
    <Directory /data/wwwroot/111.com/admin/>
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
        #只容許IP--127.0.0.1訪問「/data/wwwroot/111.com/admin/」目錄中的內容
    </Directory>
……

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

測試:
[root1 admin]# curl -x127.0.0.1:80 111.com/admin/index.php
121212

更換IP訪問:
[root@1 admin]# curl -x192.168.8.131:80 111.com/admin/index.php -I
HTTP/1.1 403 Forbidden
Date: Wed, 02 Aug 2017 08:48:49 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

#報錯(403)!!!即,只有指定IP--127.0.0.1能夠訪問該目錄。

**說明:**本節用於設定指定IP訪問指定目錄的權限!sql

11.27 訪問控制FilesMatch

使用FilesMatch參數:  

[root@1 admin]# 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>
……

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


[root@1 admin]# curl -x127.0.0.1:80 111.com/admin.php -I
HTTP/1.1 404 Not Found
Date: Wed, 02 Aug 2017 09:24:22 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

#由於訪問的文件不存在,因此報錯:404!

說明: 本節內容應用於對某些請求設定權限。apache

擴展:

apache幾種限制ip的方法

  • 禁止訪問某些文件/目錄vim

    增長Files選項來控制,好比要不容許訪問 .inc 擴展名的文件,保護php類庫:服務器

    <Files~"\.inc$">
    Order Allow,Deny
    Deny from all
    </Files>
  • 禁止訪問某些指定的目錄curl

    可使用<DirectoryMatch> 正則匹配:測試

    <Directory~"^/var/www/(.+/)*[0-9]{3}">
    Order Allow,Deny
    Deny from all
    </Directory>

也可使用目錄全局路徑

  • 經過文件匹配來進行禁止,好比禁止全部針對圖片的訪問:

    <FilesMatch \.?i:gif|jpe?g|png)$>
    Order Allow,Deny
    Deny from all
    <FilesMatch>
  • 針對URL相對路徑的禁止訪問

    <Location /dir/>
    Order Allow,Deny
    Deny from all
    </Location>

apache設置自定義header

  1. 在設置自定義header前,須要先檢測一下你的httpd(Apache)是否加載了mod_headers
[root@1 ~]# /usr/local/apache2/bin/apachectl -M

若是沒有加載,須要進行加載配置。
2. 設置header

在Apache配置文件中加入下面參數:

Header add MyHeader "Hello"

apache的keepalive和keepalivetimeout

  在APACHE的httpd.conf中,KeepAlive指的是保持鏈接活躍,相似於Mysql的永久鏈接。換一句話說,若是將KeepAlive設置爲On,那麼來自同一客戶端的請求就不須要再一次鏈接,避免每次請求都要新建一個鏈接而加劇服務器的負擔。

  KeepAlive的鏈接活躍時間固然是受KeepAliveTimeOut限制的。若是第二次請求和第一次請求之間超過KeepAliveTimeOut的時間的話,第一次鏈接就會中斷,再新建第二個鏈接。

  因此,通常狀況下,圖片較多的網站應該把KeepAlive設爲On。可是KeepAliveTimeOut應該設置爲多少秒就是一個值得討論的問題了。

  若是KeepAliveTimeOut設置的時間太短,例如設置爲1秒,那麼APACHE就會頻繁的創建新鏈接,固然會耗費很多的資源;反過來,若是KeepAliveTimeOut設置的時間過長,例如設置爲300秒,那麼APACHE中確定有不少無用的鏈接會佔用服務器的資源,也不是一件好事。

  因此,到底要把KeepAliveTimeOut設置爲多少,要看網站的流量、服務器的配置而定。

  其實,這和MySql的機制有點類似,KeepAlive至關於mysql_ connect或mysql_ pconnect,KeepAliveTimeOut至關於wait_timeout。

相關文章
相關標籤/搜索