Apache WebServer 設定技巧

  • 將 httpd.conf 內的 headers_module 啟用
    :
    LoadModule headers_module modules/mod_headers.so
    :
  • VirtualHost 內增加 header 設定
    :
    <VirtualHost www.example.com:80>
    Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
    </VirtualHost>
    
    <VirtualHost www.example.com:443>
    Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
    </VirtualHost>
    :

如果是 Debian 環境

  • sudo a2enmod headers

  • 編輯 virtual host exp.

    vi sites-enabled/wordpress.conf

    :
    <VirtualHost *:80>
        UseCanonicalName Off
        ServerAdmin  webmaster@localhost
        DocumentRoot /var/www/wordpress
        Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
    </VirtualHost>
    
    <VirtualHost *:443>
        SSLEngine on
        ServerAdmin  webmaster@localhost
        DocumentRoot /var/www/wordpress
        Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
    </VirtualHost>
    :
  • 重新啟動 apache

    sudo systemctl restart apache2

  • 假設要設定
  • 主要是修改 /etc/httpd/conf/httpd.conf
    :
    :
    ### Section 3: Virtual Hosts
    :
    NameVirtualHost *:80
    :
    <VirtualHost *:80>
    ServerName www.abc.com
    ServerAdmin [email protected]
    DocumentRoot /var/www/www.abc.com
    CustomLog logs/www.abc.com-access_log common
    ErrorLog logs/www.abc.com-error_log
    </VirtualHost>
    
    <VirtualHost *:80>
    ServerName www.xyz.com
    ServerAdmin [email protected]
    DocumentRoot /var/www/www.xyz.com
    CustomLog logs/www.xyz.com-access_log common
    ErrorLog logs/www.xyz.com-error_log
    </VirtualHost>
    

通常基於資訊安全因素會關閉顯示目錄檔案清單, 所以在 httpd.conf 內會設定所有目錄都不顯示 (也就是移除掉 MultiViews 的設定), 將 Options Indexes FollowSymLinks 前面加上 #

:
# Note that "MultiViews" must be named *explicitly* --- "Options All"
:
#   Options Indexes FollowSymLinks

#
# AllowOverride controls what directives may be placed in .htaccess files.

如果要顯示目錄檔案清單,可以針對特定目錄設定 Options 有 MultiViews 功能, Exp. /Stuff 以下可以針對特定 IP 來源存取並出現檔案目錄清單

<Location /Stuff>
  Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    Allow from 192.168.11.0/24
</Location>

我是用在將 VMWare 在內部運作的網頁能夠簡易的呈現到 Internet 的 WebServer 上.

<ditaa name=ProxyPass>

              +----------------------+   +--------------+
+---------+   | webServer(ProxyPass) |   |   vm-mail    |
| Browser +-->+       /webmail       +-->+  /webmail    |
+---------+   |   mail.ichiayi.com   |   |192.168.11.238|
              +----------------------+   +--------------+

</ditaa>

Browser 連上 webServer(http://mail.ichiayi.com/webmail), 出現的畫面是由 vm-mail(http://192.168.11.238/webmail) 所提供頁面

  • apache 要有安裝 mod_proxy (預設已經安裝)
  • 只要在 httpd.conf 內定義 :
ProxyPass /webmail http://192.168.11.238/webmail

這樣 http://mail.ichiayi.com/webmail/ 就可以正確轉讀至 http://192.168.11.238/webmail 網頁功能

只要依據一般正常的 web server 設定即可

當某個網站移轉到新的網址, 原本網頁在舊網址內都移除掉, 希望只要在 Google 找到舊的網址都能出現已經移到新的網址的訊息.. 這時就可以將 404 找不到網頁的訊息, 自訂成說明網址移轉的網頁. 設定方式只要在 httpd.conf 內增加一行, 指定呈現的轉只說明頁面.

:
<VirtualHost *:80>
ServerName sport.ichiayi.com
ServerAdmin [email protected]
DocumentRoot /backup/lintsai/sport
ErrorDocument 404 /err404.htm
:

然後編輯 /backup/lintsai/sport/err404.htm

<html>
<head>
<title>嘉義市體育會~已經更新網址~</title>

<meta http-equiv="content-type" content="text/html;charset=utf8">
<meta http-equiv="refresh" content="5; URL=http://sport.104es.com/">
</head>

<body>
<center>
<a href=http://sport.104es.com/>按這邊直接連結到新網址</a><font color=red size=6><br />
</center>
</body>
</html>

針對特定 IP 來存取目錄時, 可以免除輸入帳號密碼增加方便性的設定方式如下:

  • 只要來自 192.168.11.* 都不需要輸入帳號密碼, 就可直接存取 mydata
  • 其他的 IP 都需要輸入帳號密碼, 才可存取 mydata
<Location /mydata>
      Order deny,allow
      Deny from all
      AuthType Basic
      AuthName "Authorization Realm"
      AuthUserFile /data/web-data/mydata.user
      Require valid-user
      Allow from 192.168.11.
      Satisfy Any
</Location>
  • tech/apache.txt
  • 上一次變更: 2021/12/04 11:35
  • jonathan