Apache安裝、設定與管理

將每一次學到的技術,放到這裡來以免忘記

1. Apache設定檔讀取順序 /etc/httpd/conf/httpd.conf ==> /etc/httpd/conf.d/* ==> /home/[user]/...


2. 限制指定IP讀取網,在指定資料匣(加入httpd.conf)或特定網頁路徑(.htaccess)中加入
    Deny from all
開放單一IP
    Allow from 123.123.123.123
開放多網段方式
    Allow from 123.123.123, 123.123.122


3. apache 開放帶 port 的的網頁
        有時在測試主機上,我們需要使用 http://aaa.bbb.com.tw:8001 的方式提供客戶連入查看網頁,這裡會說明如何在apache上開 port 連接網頁

    3.1.設定/etc/httpd/conf/httpd.conf 檔,中的Listen
        Listen *:8001 <==在設定檔中加入,要求Apache開啟該 port

    3.2.設定/etc/httpd/conf/httpd.conf 檔,加入處擬主機資料
        NameVirtualHost *:8001
        <VirtualHost *:8001>
            DocumentRoot /home/abc/abc
            ServerName aaa.bbb.com.tw
            ErrorLog /home/abc/abc/error_log
            CustomLog /home/abc/abc/access_log common
        </VirtualHost>

    3.3. 重新啟重Apache
        service httpd restart

    3.4. 確認是否開啟
        netstat -tln |grep 8001
        tcp        0      0 :::8001

註:如果使用Webmin(版本1.480-1)管理,Listen 資料會寫在 /etc/httpd/conf.d/ssl.conf 這個檔案中


4. .htaccess寫法
        使用apache 時,towns不喜歡為個人網頁去修改php.ini、httpd.conf、 mime.types等檔案,通常都是幫該網站加入.htaccess檔來做設定,這麼做一方面也可以清楚的知道該網站需要什麼特別的設定。只是常常會遇到寫法上的問題,下面會記錄及說明該行的用途。
更多相關設定:可見httpd-manual套件中的說明

將httpd.conf 中的設定寫入(.htaccess這個案的寫法與httpd.conf 是相同的)
DirectoryIndex index.htm <==http.conf 中設定首頁查尋順序
AddDefaultCharset Big5 <==http.conf 中設定預設語系
Options Indexes <==開放目錄瀏覽功能
Allow from 123.123.123.123 <== 限制連入網頁的IP(如果在某個目錄中限制,不需要寫路徑)
Deny from all <== 不可連入該網頁

將php.ini 中的設定寫入(記得不要加“=”號)
php_flag register_globals On <==php.ini中register_globals值
php_value memory_limit 32M <==php.ini中memory_limit 值

將mime.types 中的設定寫入
AddType message/rfc822  mht eml mail <==使apache可以瀏覽mht eml mail格式的文件
AddType application/x-httpd-php .php
AddType application/octet-stream mht 

有用的資料:htaccess製做網站,這個站台做出的.htaccess看來是有限的
http://www.htaccesseditor.com/tc.shtml#a_access
資料來源:http://www.minwt.com/?p=1495


 5.有網址虛擬站台開放方式
  5.1. 設定DNS中將該主機指到指定主機,如aaa.bbb.com.tw  A   1.2.3.4

  5.2. 設定/etc/httpd/conf/httpd.conf 
        NameVirtualHost *:80
        <VirtualHost *:80>
            DocumentRoot /home/abc/abc
            ServerName aaa.bbb.com.tw <==該網站網址
            ServerAlias bbb.com.tw <==該網站另一個網址
            ErrorLog /home/abc/abc/error_log
            CustomLog /home/abc/abc/access_log common
        </VirtualHost>

注意: /home 及 /homt/abc/  資料匣檔案全限需開為755


6. apache支援中文檔案的處理方式
在預設值下,apache 讀取中文檔案(如 中文.html)會發生檔案找不到的問題,但有些網站就是有用中文檔名。該如何使apache 讀取中文檔名,towns 拜了google大神,找到了一些資料
相關資料:http://blog.urdada.net/2005/09/08/24/ (感謝dada的詳說明)


7. 無法啟用.htaccess,在httpd.conf 中加入這一段
<Directory "/ [指定路徑] ">
AllowOverride All
</Directory>
資料來源:http://what-a-good-day.blogspot.com/2008/02/apache-htaccess.html


8. 在個人網頁 /home/[user]/public_html 中使用.htaccess,是無效的


9. 縮短網址的設定,Apache中的rewrite 參數
相關討論:http://www.blueshop.com.tw/board/FUM20050110200903ZWZ/BRD2010030421141834S.html
相關資料:
http://rental.zhupiter.com/postshow_178_1_1.html
http://fanqiang.chinaunix.net/a6/b1/20010905/0800001238_b.html
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html


10. 加大PHP網頁上傳檔案的大小
設定php.ini檔中的(預設為8M)
post_max_size = 8M
upload_max_filesize = 8M


11. 關於apache 啟動錯誤處理
 1. 如果主機沒有設定DNS對應,在啟動apache時會出現如下面的錯誤訊息
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
這個錯誤訊息並不會影響apache的啟動,但如果要處理,host檔中,將主機名稱設到 127.0.0.1這一行的最後面,這樣系統就能找到本機的名稱對應了
127.0.0.1       localhost.localdomain localhost [主機名稱]

 2. 另一個錯誤訊息(centos63)
httpd: apr_sockaddr_info_get() failed for [主機名稱]
這個錯誤訊息並不會影響apache的啟動,但如果要處理,host檔中,將主機名稱設到 127.0.0.1及::1這兩行的最後面,這樣系統就能找到本機的名稱對應了
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 [主機名稱]
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6 [主機名稱]

 3.  另一處理方式,直接定義apache名稱
在httpd.conf中,設定 ServerName [主機名稱或完整的FQDN]:80

參考資料:傑比創意資訊 http://jaby.heyxu.com/tw/p/0D0300/smbasuy7


12. 開放目錄瀏灠功能
<Directory [ 路徑 ]>
    Options Indexes
</Drictory>

關閉就是將 Indexes拿掉


13. apache proxy 架設方式
架設模型
Proxy server、web1(Linux apache , 80)、web2(Linux tomcat , 8080)

系統資訊
Proxy server:CentOS 5.7
apache:httpd-2.2.3
tomcat:apache-tomcat-7

apache proxy 必要條件
需要有mod_proxy.so 模組(在apache manual Module有說明)

設定方式
這樣是開啟虛擬機並設定Proxy路徑,重點
<VirtualHost *:80>
ServerName www.aaa.tw
ProxyPass / http://www.aaa.tw:8080/
ProxyPassReverse / http://www.aaa.tw:8080/
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /var/www/html/
ServerName mail.aaa.tw
ServerAlias 192.168.8.185
</VirtualHost>

相關資料:
http://blog.roga.tw/2006/10/apache-%E7%9A%84-proxy-%E5%8A%9F%E8%83%BD/
http://blog.yam.com/u9323523/article/25178591
http://www.blueshop.com.tw/board/FUM20050110200903ZWZ/BRD201109271609584L9.html
http://www.blueshop.com.tw/board/show.asp?subcde=BRD20110826160435RKA


14. Apache 與 Tomcat 整合(共用80埠)
towns 最近因為客戶需求,要同時可以使用 php 及 jsp 程式的 Linux 系統。在 towns 的印像中,是可以整合的,果然在 google大神中找到答案了

相關連結:
http://blog.yam.com/u9323523/article/25178591
http://mid.lt263.com/mb/biancheng/JSP/jsp_25928.html


15. 網站壓力測試工具
ApacheBench (apache 內建工具)
教學網站:http://blog.miniasp.com/post/2008/06/Using-ApacheBench-ab-to-to-Web-stress-test.aspx 保哥技術交流中心
保哥常用指令
ab -d -e a.csv -v 1 -n 1000 -c 3 http://www.abc.com/index.aspx
-d 不產生%報表
-e 產生csv檔
-v 列出錯誤等級(1是最少的,2會列出一堆資訊)
-n 連續多少回應(點擊回應數,指的是總點擊數)
-c 建立請求的數量(幾人同時連入)
c值不得大於n值
c值上限值為1024

訊息補充說明
Non-2xx responses 這一點在保哥的資料中並沒有出現,towns去查了一下說明,這個訊息是說明,伺服器未回應200這個訊息(200在標準的http協定中是指回應正常),而towns在測試 win2k8R2中的網站,一直有這個訊息出現,很奇怪,不過網站是正常的呢!在討論串中ver大有說明這個錯誤。要確定是否有問題要查看access.log或事件檢視器中的訊息哦!
相關討論串:http://redmine.lighttpd.net/boards/2/topics/4036
官方200訊息說明:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

經過這一次的測試,才發覺網卡能力的差別
設定3000人點擊30000次,伺服器回應時間 0.5秒,個人電腦回應時間 1.5秒。網路卡的好壞,還是有明顯的落差 

Apache JMeter
教學網站:http://catyku.pixnet.net/blog/post/14721791 catyku大,痞客邦


16. Apache 內建指令
towns是走radhat系統,所以在查詢資料時,常常都是radhat系統中的特有指令,如rpm,但在其他版本時沒辦法使用,這時,使用apache自帶的指令就很方便了,因為他通用嘛!

apachectl -v ==> 查詢apache版本
apache2ctl -v
apache2ctl start
apache2ctl stop
apache2ctl status
apache2ctl restart
apache2ctl configtest ==> 檢查設定檔
apachectl graceful ==> 重新載入apache的設定檔,不需重新啟動。有些版本使用apachectl reload
apache2 -l ==> 列出目前 apache 使用的 module(apache2ctl -l)
apache2 -S ==> 列出目前 apache 的設定值(apache2ctl -S)
apachectl -M ==> 列出已載入的模組(httpd -M、apache2ctl -M)

補充1:apache 2.4.6版,指令是apachectl
補充2:這樣也可以httpd -k start、restart、graceful、stop、graceful-stop


17. 開啟apache log debug模式
為了取得更詳細的錯誤訊息,有時得開啟apache的 debug模
在設定檔(/etc/httpd/conf/httpd.conf;CentOS63)加入 LogLevel debug,就可以開啟

資料來源:apache 官網
http://httpd.apache.org/docs/2.2/mod/core.html#loglevel


18. 透過apache將網頁加上密碼(測試完成)
兩種方式:
1. 對全網站執行,請在httpd.conf檔中做設定
2. 對單一站台執行
 2.1. 在httpd.conf中加入
 <Directory /home/a/b>
      AllowOverride All
 </Directory>
 這一段是為了啟用某路徑中的.htaccess檔可以存取

 2.2. 在.htaccess中加入
  <Limit GET>
      require   user   test  <== require   user是必需要打入的,test則是同意的登入帳號
  </Limit>
  AuthType Basic <== 驗證方式
  AuthName "Welcome to my homepage" <== 說明。這一段會在詢問帳密時跳出來
  AuthUserFile /home/a/b/.htpasswd <== 帳密存取檔

  2.3. $htpasswd -c .htpasswd test <== 建立.htpasswd檔案及同意登入帳號,執行後,會要求打入密碼兩次

完成以上設定,登入這個路徑的網頁,就會要求要打帳密了

註1:在第二次新增帳號時,就不用打 -c 了,直接打上帳號就可以
註2:刪除帳號 htpasswd -D [檔名] [帳號]
註3:如果已經有指定檔案時,又加上 -c 參數,將會覆蓋原有的檔案,會造成帳號全部不見
註4:變更密碼 htpasswd -b [passwordfile] [username] [password],直接更新密碼,不過在打密碼時會是明碼

資料來源:范老師上課筆記


19. apache 綁定 IP 的網頁
    當towns只有一台伺服器(只有一張網卡)但需要架設多個網站,且指定網站有自己的IP,這時towns需要做兩個動作,1. 建立子網卡,並綁定IP(相關資訊 Linux隨手記2 第**點),2. apache需綁定IP,並指定網站路徑。以下說明第二點

    19.1. 將/usr/share/doc/httpd-2.4.6/httpd-vhosts.conf 範例檔cp到 /etc/httpd/conf.d/中

    19.2.設定httpd-vhosts.conf 檔,加入處擬主機資料
        NameVirtualHost 1.2.3.4:80
        <VirtualHost 1.2.3.4:80>
            DocumentRoot /home/abc/abc
            ServerName 1.2.3.4
            ErrorLog /home/abc/abc/error_log
            CustomLog /home/abc/abc/access_log common
        </VirtualHost>

    19.3. 重新啟重Apache
        service httpd restart

    19.4. 測試網頁
        http://1.2.3.4

註1:如果apache啟動失敗,可以使用apachectl configtest查看設定檔
註2:apache 2.4.6版,NameVirtualHost參數已經無效了,在將來的版本將會移除


20. 隱藏URL路徑 -- 使用 RewriteRule 參數

這個參數的功能好像很多呢!不過,要能使用有必要條件
1. #LoadModule rewrite_module modules/mod_rewrite.so ,#需拿掉,位置在 /etc/httpd/conf.modules.d/00-base.conf檔案中(apache 2.4.6版)
2. 要設這一段 RewriteEngine On(在httpd.conf指定的資料匣中,或設於.htaccess中)

接下來就可以用了
範例:
1. RewriteRule . a.txt [L] <== 不論指項該路徑中的何檔案,都導到 a.txt
2. RewriteRule ^ index.php [L]
3. RewriteRule ^([^./]+)/?$ $1.php [L]
4. RewriteRule ^(.*)$ index.php/ [L,QSA]

參考資料:
he1212kimo大的blog
http://he1212kimo.pixnet.net/blog/post/36219828-%E9%80%8F%E9%81%8Eapache%E8%A8%AD%E5%AE%9A%E7%94%A2%E7%94%9F.htaccess%E6%AA%94%E6%A1%88%EF%BC%9A%E9%9A%B1%E8%97%8Fhttp-url%E7%B6%B2

aj2007大的blog
http://reader.roodo.com/ajean/archives/24973780.html

mega大的blog
http://lifeiskuso.blogspot.tw/2009/08/htaccess-url.html

--------------------------------------------------------------------------------------------------------

強制轉址 -- 使用 RewriteRule 參數(.htaccess)

 RewriteEngine On
    RewriteCond %{SERVER_PORT} 80
    RewriteCond %{REQUEST_URI} ^/abc/def/g/h/i/
    RewriteRule ^(.*$) https://a.b.com.tw//abc/def/g/h/i [R,L]

參考資料:

Rudy 大口述

散尽浮华 大的文章 -- 非常詳細的說明
https://www.cnblogs.com/kevingrace/p/9565123.html

Tweet 大的工具 -- 測試 .htaccess 檔案內容是否寫對
https://htaccess.madewithlove.com/


21. apache Log格式

apache常用的access Log有兩種格式 common 及 combined,而修改格式方式就是在設定 CustomLog“Log檔路徑”common,後面這一段,如果有設定過虛擬網站,一定會看過這個設定值。
在官網中,只有提到二種設定方式 1. 使用common及combined,2. 使用複合式設定(Multiple Access)。
towns想知道,第一點除了common及combined方式外,是否要其他http封包資料,都得使用Multiple Access方式呢?還是有其他的預設方式?
下面會說明兩種預設格式的內容

通用格式 common
user IP | RFC1413 ID | user ID | 登入時間 | user行為 取得路徑及相參數 使用協定 | host端 RFC2616 訊息 | 給user端的RFC2616訊息 |
10.50.120.6 - - [07/Apr/2015:14:00:38 +0800] "GET / HTTP/1.1" 304 -

組合格式 combined
user IP | RFC1413 ID | user ID | 登入時間 | user行為 取得路徑及相參數 使用協定 | host端 RFC2616 訊息 | 給user端的RFC2616訊息 | Referer資訊;由那個網頁提供資訊 | User-Agent資訊;瀏覽器資訊
10.50.120.6 - - [07/Apr/2015:14:00:38 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0"

參考資料
Apache官網說明
http://httpd.apache.org/docs/1.3/logs.html
中文版(金步國大翻譯)
http://www1.phpchina.com/resource/manual/apache/logs.html
wiki -- 關於http封包內容說明
http://en.wikipedia.org/wiki/List_of_HTTP_header_fields
RFC文件
http://www.w3.org/Protocols/rfc2616/rfc2616.txt
老薯條大的文章 -- 安全性教學
http://www.netadmin.com.tw/article_content.aspx?sn=1112140007 


22. 強制使用 SSL,並使用強制使用 TLS 1.2

其實還蠻單純的,在 ssl.conf 中寫的非常清楚
1. 安裝 mod_ssl 套件。安裝後,預設是開啟的
2. 設定 /etc/httpd/conf.d/ssl.conf
 修改 SSLProtocol -ALL +TLSv1.2
3. 重新啟動 apache,開啟 SSL(443 Port)
4. 將80 port 轉址到 443 port

註1:如果要針對單一網站使用,就是使用 Virtualhost
註2:也可以用 SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1

參考資料
官方說明
https://httpd.apache.org/docs/2.4/ssl/ssl_howto.html

補充:關於 apache ciphers 設定
ssh.conf 檔中以下三個設定值
SSLCipherSuite HIGH:!aNULL => 支援所有高強度加密,aNULL 除外。所有 ciphers 上的調寫在這裡,可以使用 +、- 及 !
SSLProtocol -ALL +TLSv1.2 => 不支援所有協定,但加上 TLSv1.2
SSLHonorCipherOrder on => 開啟 ciphers 排序

參考資料:
Andy Wang 大大文章
https://www.brilliantcode.net/1229/apache-advance-settings-tlsv1-2-tlsv1-1-sslv3/ 

myadmin 大的文章
http://tecadmin.net/enable-tls-in-modssl-and-apache/#

mod_ssl 套件內容的說明
/etc/httpd/conf.d/ssl.conf 


23. 使用 apache 來閱讀所有套件的文件

幾乎所有 Linux 的套件,都有自帶說明文件,如 man、/usr/share/doc,而現在有不少文件是做成html 網頁呢!如 OpenVAS 的 libraries-doc,就有一個完整的 html 文件,如果測試伺服器中有加裝apache,將 /usr/share/doc 整個連到 /var/www/html/doc,就可以透過網頁來瀏覽文件,看來是個不錯的小技巧

只要下這一行就行了
ln -s /usr/share/doc /var/www/html/doc

註:如果在正式的伺服器,這個方式不要做比較好,不然,連到這一頁就知道這台伺服器裝了那些套件了 ^^"

資料來源:范老師上課筆記


24. ubuntu apache 開啟 gzip 壓縮

 

資料來源:Anatoliy Dimitrov 文章
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-mod_deflate-on-ubuntu-14-04  


25. 確認 apache 載入的 modules

apache2ctl -M <== 列出目前執行中的 modules

資料來源:
小雨大口述

linker3000 大回應
https://superuser.com/questions/284898/how-to-check-which-apache-modules-are-enabled-installed 


26. apache 限制檔案上傳大小

在 httpd.conf 中加入

<Files *.php>   
       SetOutputFilter PHP   
       SetInputFilter PHP   
       LimitRequestBody 524288
</Files>

註:上傳大小就是 LimitRequestBody 後面這個值

參考資料:胖虎大的 blog
http://idobest.pixnet.net/blog/post/24539795-%5B%E8%BD%89%E8%B2%BC%5D-apache-%E6%AA%94%E6%A1%88%E4%B8%8A%E5%82%B3%E9%99%90%E5%88%B6%E8%A8%AD%E5%AE%9A


27. apache 由 2.2 昇到 2.4 會發生的問題


        Order allow,deny
        Allow From All
修改成
        Require all granted
即可

參考資料:

helloworld 大的blog
http://helloworld.pixnet.net/blog/post/44663872-%E8%A7%A3%E6%B1%BA-apache-2.4-client-denied-by-server-configuration%3A-%E9%8C%AF 


28. apache 檔頭(header)管理

有很多安全性的管理,在 header 中是可以做到一部分的,下面寫下關於 apache 對於檔頭管理的設定方式

 

註:header 設定中有些參數的設定,網頁程式不能是 html 而是要程式(如 *.php)

參考資料:

SSORC -- Apache 針對 Header 的安全性設定
https://ssorc.tw/5095  


29. apache log 自定義內容

有時預設的 log 內容不足,apache log 可以自定義要看到的資料。如 towns 想看到 client 連到 server 端使用的 SSL_PROTOCOL 是什麼,就可以在 apache 的config 中這麼設定

        <IfModule log_config_module>
                CustomLog /var/log/apache2/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
        </IfModule>

參考資料:
Barry Pollard 大大回應
https://serverfault.com/questions/727638/logging-tls-version-used-by-clients-connecting-to-apache

留言

這個網誌中的熱門文章

zimbra 安裝、管理、設定

Fortigate 100D -- 管理、設定

IT 隨手記6