Apache

Apache無法啟動問題:Address already in use: make_sock: could not bind to address 0.0.0.0:80/443

有一次Server重開機之後,突然apache就突然無法啟動了,所以就查了一下,這表示port 80或443被佔用了,所以apache無法啟動,

這個問題其實是因為有使用ssl,而因為開機時apache需要自動啟動,但因為啟用ssl需要輸入ssl key,所以導致apache其實沒有正常啟動,但卻佔用了80及443這兩個port

解法:

  1. 找出目前apache的pid , 指令如下
    netstat -A inet -lnp | grep apache2
     
  2. 接著kill中止這個pid,假設pid是888,則指令如下
    kill -9 888
     
  3. 之後就可以重啟了
    service apache2 start

[Apache] 禁止直接用IP訪問網站

一般來說除了網域名稱之外,我們也可以透過IP來訪問網站,不過這會造成一個問題,當有人刻意用不同的網域名稱指向你網站的IP時,網站也可以正常訪問,這樣會產生搜尋引擎重複收錄網站,這對SEO會有不良影響。

那麼在apache要如何避免這種問題產生呢?很簡單,只要增加一個Virtualhost即可,作法如下:

  1. 增加一個VirtualHost,在httpd.conf裡新增以下資料
    NameVirtualHost *:80
    <VirtualHost *:80> 
      ServerName xxx.xxx.xxx.xxx
      <Location />
        Order Allow,Deny
        Deny from All
      </Location>
    </VirtualHost>
  2. 重讀設定檔
    service apache2 graceful
     

P.S.本文適用於ubuntu

[Apache] apache常用指令

  1. 測試設定檔文法是否正確
    apachectl configtest
     
  2. 套用新設定檔,但不重啟apache,在ubuntu可以用第二個
    service apache2 graceful
    service apache2 reload
     
  3. 啟動apache
    service apache2 start
     
  4. 重啟apache
    service apache2 restart
     
  5. 停止apache
    service apache2 stop

Apache的目錄參數 Options

Options的參數說明可參考官網說明,只是說明中的yosia也不太會翻譯,不過基本上從設定值來說,這個參數是用來控制在目錄中可以執行的功能。共有以下幾個參數

  1. All
    除了MultiViews以外的所有功能
  2. ExecCGI
    可以使用mod_cgi來執行CGI程式
  3. FollowLinks
    允許訪問符號連結(symbolic link)的子目錄。此為預設值。
  4. Includes
    允許mod_include所使用的伺服端函式庫
  5. IncludesNOEXEC
    同上,但#exec cmd 以及 #exec cgi除外
  6. Indexes
    若被訪問的URL中沒有任何的index檔案,則顯示該目錄的子目錄列表
  7. MultiViews
    多語系支援
  8. SymLinksIfOwnerMatch
    同FollowLinks,但目的地目錄或檔案的擁有者必須與符號連結的擁有者相同。

 

Apache的目錄權限控制Order, Allow, Deny

設定訪問權限的時候,有三個關鍵字:Order , Allow, Deny。其中Order會指定"檢查權限設定的順序",Allow會指定"允許訪問名單",Deny則指定"禁止訪問名單"。因為Order的邏輯有點特殊,所以特以此篇記錄心得,不過詳情參考Apache的官方說明應該會更清楚。

以下直接以實例來說明,

Order Deny,Allow
Allow from All

以上設定代表的是: