Apache 使用

July 5, 2018

env

Install

Apache 套件
itachi@ubuntu:~$ sudo apt install apache2 -y
Apache 版本
itachi@ubuntu:~$ apache2 -v
Server version: Apache/2.4.7 (Ubuntu)
Server built:   Sep 18 2017 16:37:54
PHP7.0 套件
itachi@ubuntu:~$ sudo add-apt-repository ppa:ondrej/php #`Debian` 及其衍生產品(如 `Ubuntu`)維護的 `PPA`
itachi@ubuntu:~$ sudo apt update
itachi@ubuntu:~$ sudo apt install php7.0 -y
PHP 版本
itachi@ubuntu:~$ php -v
PHP **7.0.24**-1+ubuntu14.04.1+deb.sury.org+1 (cli) (built: Sep 28 2017 16:33:02) ( NTS )
...
itachi@ubuntu:~$ itachi@ubuntu:~$ sudo vi /var/www/html/message.php
<?php
  phpinfo();
?>

http://server_IP-address/message.php

做完之後此檔案必須刪除,有安全性問題。

檢驗

http://your_server_IP_address

Apache 服務啟動與關閉
itachi@ubuntu:~$ sudo service apache2 stop #停止  
itachi@ubuntu:~$ sudo service apache2 start #啟動  
itachi@ubuntu:~$ sudo service apache2 restart #重啟  

配置文件

Apache 預設配置檔文件
itachi@ubuntu:~$ ls /etc/apache2/
apache2.conf    conf-enabled  magic           mods-enabled  sites-available
conf-available  envvars       mods-available  ports.conf    sites-enabled
$ tree /etc/apache2/
/etc/apache2/
├── apache2.conf
├── conf-available
│   ├── charset.conf
│   ├── localized-error-pages.conf
│   ├── other-vhosts-access-log.conf
│   ├── security.conf
│   └── serve-cgi-bin.conf
├── conf-enabled
│   ├── charset.conf -> ../conf-available/charset.conf
│   ├── localized-error-pages.conf -> ../conf-available/localized-error-pages.conf
│   ├── other-vhosts-access-log.conf -> ../conf-available/other-vhosts-access-log.conf
│   ├── security.conf -> ../conf-available/security.conf
│   └── serve-cgi-bin.conf -> ../conf-available/serve-cgi-bin.conf
├── envvars
├── magic
├── mods-available
│   ├── access_compat.load
│   ├── actions.conf
......
│   ├── userdir.conf
│   ├── userdir.load
│   ├── usertrack.load
│   ├── vhost_alias.load
│   └── xml2enc.load
├── mods-enabled
│   ├── access_compat.load -> ../mods-available/access_compat.load
│   ├── alias.conf -> ../mods-available/alias.conf
│   ├── alias.load -> ../mods-available/alias.load
│   ├── auth_basic.load -> ../mods-available/auth_basic.load
│   ├── authn_core.load -> ../mods-available/authn_core.load
│   ├── authn_file.load -> ../mods-available/authn_file.load
│   ├── authz_core.load -> ../mods-available/authz_core.load
│   ├── authz_host.load -> ../mods-available/authz_host.load
│   ├── authz_user.load -> ../mods-available/authz_user.load
│   ├── autoindex.conf -> ../mods-available/autoindex.conf
│   ├── autoindex.load -> ../mods-available/autoindex.load
│   ├── deflate.conf -> ../mods-available/deflate.conf
│   ├── deflate.load -> ../mods-available/deflate.load
│   ├── dir.conf -> ../mods-available/dir.conf
│   ├── dir.load -> ../mods-available/dir.load
│   ├── env.load -> ../mods-available/env.load
│   ├── filter.load -> ../mods-available/filter.load
│   ├── mime.conf -> ../mods-available/mime.conf
│   ├── mime.load -> ../mods-available/mime.load
│   ├── mpm_event.conf -> ../mods-available/mpm_event.conf
│   ├── mpm_event.load -> ../mods-available/mpm_event.load
│   ├── negotiation.conf -> ../mods-available/negotiation.conf
│   ├── negotiation.load -> ../mods-available/negotiation.load
│   ├── setenvif.conf -> ../mods-available/setenvif.conf
│   ├── setenvif.load -> ../mods-available/setenvif.load
│   ├── status.conf -> ../mods-available/status.conf
│   └── status.load -> ../mods-available/status.load
├── ports.conf
├── sites-available
│   ├── 000-default.conf
│   └── default-ssl.conf
└── sites-enabled
    └── 000-default.conf -> ../sites-available/000-default.conf

6 directories, 175 files

服務配置
預設 DocumentRoot
itachi@ubuntu:~$ ls /var/www/html/
index.html
Apache 的配置文件中描述
itachi@ubuntu:~$ cat /etc/apache2/sites-enabled/000-default.conf | grep -n "/var/www/html"
12:     DocumentRoot /var/www/html #第12行

rewrite redirect

rewrite mod
itachi@ubuntu:~$ sudo a2enmod rewrite #啟動
Enabling module rewrite.
To activate the new configuration, you need to run:
  service apache2 restart
檢查載入
itachi@ubuntu:~$ ls /etc/apache2/mods-enabled/ | grep "rewrite"
rewrite.load
DocumentRoot
itachi@ubuntu:~$ sudo mkdir /var/www/mysite

新增下面描述

itachi@ubuntu:~$ sudo vi /etc/apache2/apache2.conf
<Directory /var/www/mysite>
        Options Indexes FollowSymLinks
        AllowOverride All # None 更改 All .htaccess 才能執行
        Require all granted
</Directory>
itachi@ubuntu:~$ sudo vi /etc/apache2/sites-enabled/000-default.conf
DocumentRoot /var/www/mysite #原本 /var/www/html
redirect

RewriteCond:定義一條複寫測試規則。
RewriteRule:取得複寫字串,並套入重寫規則。

1.完全導向

itachi@ubuntu:~$ vi /var/www/mysite/.htaccess
RewriteEngine on #啟用 `mod_rewrite`
RewriteBase / #設定比對基本目錄
RewriteRule ^(.*) http://www.google.com$1 [R=301,L] #重新導向到 google
ErrorDocument 404 /404.php #使用者輸入的檔案在此目錄下找不到,則導向到 404.php

<Files .htaccess> #.htaccess 檔案
        Require all granted #允許所有存取  
</Files>

2.針對檔案

THE_REQUEST:類似 GET / HTTP/1.1

RewriteEngine on
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*test\.php\ HTTP/ #針對 test.php 檔,* 表示開頭任意但結尾要是 test.php
RewriteRule .*test\.php$ https://www.google.com [R=301,L]
ErrorDocument 404 /404.php

<Files .htaccess>
        Require all granted
</Files>
itachi@ubuntu:~$ sudo service apache2 restart #重啟 

基本 proxypass

啟動 mod

mod_proxy:Apache 的代理模組,用於管理連接並重新導向它們。

itachi@ubuntu:~$ sudo a2enmod proxy #非 mod_proxy,它會顯示不存在。
Enabling module proxy.
To activate the new configuration, you need to run:
  service apache2 restart
檢查載入
itachi@ubuntu:~$ ls /etc/apache2/mods-enabled/ | grep "proxy"
proxy.conf
proxy.load
實驗

新增目錄 wpitachi.html 檔案

itachi@ubuntu:~$ sudo mkdir /var/www/mysite/wp
itachi@ubuntu:~$ sudo touch /var/www/mysite/wp/itachi.html
itachi@ubuntu:~$ sudo vi /var/www/mysite/wp/itachi.html
<!DOCTYPE html>
<html>
<head>
  <title>Page Title</title>
</head>
<body>

  <h1>This is a Heading</h1>
  <p>This is a paragraph.</p>

</body>
</html>

語法

ProxyPass:遠端服務的 mirror
ProxyPassReverse:類似重新導向

itachi@ubuntu:~$ sudo vim /etc/apache2/sites-enabled/000-default.conf
#新增下兩行
ProxyPass /wp/ http://192.168.7.200/404.php
ProxyPassReverse /wp/ http://192.168.7.200/404.php

基本安全

1.當你輸入的 URL 出現 404 ,也沒做 ErrorDocument 404 設定。
出現敏感資訊 Apache/2.4.7 (Ubuntu) Server at 192.168.7.200 Port 80 解決

itachi@ubuntu:~$ sudo vi /etc/apache2/conf-enabled/security.conf #檔案位置  
#參數 Full | OS | Minimal | Minor | Major | Prod ,顯示敏感資訊的多寡。
ServerTokens Prod # 預設 OS
#參數 On | Off | EMail
ServerSignature Off # 預設 On,敏感資訊全部顯示

2.目錄清單 把當前目錄檔案全列出 解決

itachi@ubuntu:~$ sudo cat /var/www/mysite/.htaccess
RewriteEngine on
RewriteBase /
...
Options -Indexes #新增此行 - 為關閉目錄清單;+ 為開啟目錄清單
...

結果:出現 403

3.Apache更新
4.Log 檔的分析