Apache

解決問題 Apache (1)

教學目標

主要解決在 Windows 作業系統上安裝和設定 Apache 伺服器進行 Proxy 和 Load Balance 的問題。

重點概念

我們經常會遇到網頁應用程式需要設定高可用性的問題,就會需要透過 Proxy 和 Load Balance 功能來解決,此時 Apache 伺服器只需要透過簡單三步驟,就能夠完成 Proxy 和 Load Balance 功能。

安裝 Apache 伺服器

首先下載與安裝 Visual C++ Redistributable for Visual Studio 2015 ,名稱為vcredist_x64.exe 執行檔,若沒有安裝 vcredist 則會導致 Apache 無法正常安裝。

接著下載 Windows 版本的 Apache Lounge 檔案,名稱為 httpd-2.4.27-Win64-V15.zip 壓縮檔。

最後將 Apache 程式的壓縮檔 ( httpd-2.4.27-Win64-V15.zip) 解壓縮至「C:\Apache24\bin」資料夾中,就能夠完成安裝。

修改 Apache 設定檔

開啟 C:\Apache24\conf\httpd.conf 設定檔。

1
$ notepad C:\Apache24\conf\httpd.conf

在設定檔中加入 Proxy 功能的必備模組。

1
2
3
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so

在設定檔中加入 Load Balance 功能的必備模組。

1
2
3
4
5
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so 
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

在設定檔中加入 conf/extra/httpd-vhosts.conf 設定檔。

1
Include conf/extra/httpd-vhosts.conf

開啟 C:\Apache24\conf\httpd-vhosts.conf 設定檔。

1
$ notepad C:\Apache24\conf\extra\httpd-vhosts.conf

在設定檔中加入以下內容,其中 http://www.example.com/app1 為 Proxy 功能,而 http://www.example.com/app2 為 Load Balance 功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<VirtualHost *:80>
ServerAdmin me@example.com
DocumentRoot "C:/Apache24/htdocs"
ServerName example.com:80
ErrorLog "logs/example.com-error.log"
CustomLog "logs/example.com-access.log" common
ProxyRequests Off
ProxyPreserveHost Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Location /app1>
ProxyPass "http://www.example.com:8080"
ProxyPassReverse "http://www.example.com:8080"
</Location>
<Proxy "balancer://mycluster">
BalancerMember "http://www.example1.com"
BalancerMember "http://www.example2.com"
</Proxy>
ProxyPass "/app2" "balancer://mycluster"
ProxyPassReverse "/app2" "balancer://mycluster"
</VirtualHost>

執行 Apache 伺服器

1
$ C:\Apache24\bin\httpd

總結在 Apache 伺服器中只要透過簡單簡單三步驟,就能夠解決 Proxy 和 Load Balance 的問題。

相關資源

解決問題 SSL/TLS (2)

教學目標

主要解決如何在 Linux 作業系統中,將 SSL 憑證和金鑰檔設定至 Apache 伺服器,讓我們可以模擬進行安全連線的問題。

重點概念

若要將 SSL 憑證和金鑰檔設定至 Apache 伺服器,讓我們可以進行安全連線,其實只要簡單五個步驟就能夠完成初步實作,分別為;

  1. 安裝 Apache 伺服器。
  2. 建立 SSL 憑證和金鑰檔。
  3. 設定 Apache 伺服器。
  4. 啟動 Apache 伺服器。
  5. 測試與驗證。

安裝 Apache 伺服器

透過 apt 指令下載與安裝 Apache 伺服器和 SSL 模組。

下載與安裝 Apache 伺服器。

1
2
$ sudo apt-get update
$ sudo apt-get install apache2

下載與安裝 SSL 模組。

1
$ sudo a2enmod ssl

建立 SSL 憑證和金鑰檔

產生一組沒有加密的 2048 bits 私密金鑰和憑證簽署請求。

  • Country 國別
  • State 州
  • Location 地區
  • Organization 組織
  • Organizational Unit 組織部門單位
  • Common Name 網域名稱
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/server.key -out /etc/apache2/ssl/server.crt
Generating a 2048 bit RSA private key
....+++
........+++
writing new private key to '/etc/apache2/ssl/server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:TW
State or Province Name (full name) [Some-State]:Taiwan
Locality Name (eg, city) []:Taipei
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:www.myserver.com
Email Address []:

指令詳細說明:

  • openssl:主要是用於建立和管理憑證、金鑰、簽章請求、…等應用的工具。
  • req:主要是建立新的 X.509 憑證簽章請求,SSL 是使用 X.509 公開金鑰架構標準進行金鑰和憑證管理。
  • -x509:主要是設定我們自主簽署的憑證檔案取代一般憑證請求。
  • -nodes:主要是設定密碼保護金鑰檔的安全。
  • -days 365:主要是設定憑證有效期間為一年
  • -newkey rsa:2048:主要是同時建立憑證請求和新的私密金鑰,採用 2048 bits 的 RSA 金鑰。
  • -keyout:主要是設定私密金鑰檔的名稱。
  • -out:主要是憑證請求檔的名稱

設定 Apache 伺服器

修改 default-ssl.conf 檔案,檔案路徑為:/etc/apache2/sites-available/default-ssl.conf。

1
sudo vi /etc/apache2/sites-available/default-ssl.conf

請先將所有內容以 # 註解,接著新增下述內容,其中主要修改參數有四項,分別為:

  • ServerName:伺服器名稱
  • ServerAlias:伺服器別名
  • SSLCertificateFile:憑證檔案路徑
  • SSLCertificateKeyFile:金鑰檔案路徑
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin admin@myserver.com
ServerName myserver.com
ServerAlias www.myserver.com
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>

設定 SSL 設定檔至 Apache 伺服器中。

1
$ sudo a2ensite default-ssl.conf

啟動 Apache 伺服器

1
$ sudo service apache2 restart

測試與驗證

開啟瀏覽器輸入以下網址進行測試與驗證。

1
$ firefox https://127.0.0.1

總結雖然透過安裝 Apache 伺服器、建立 SSL 憑證和金鑰檔、設定 Apache 伺服器、啟動 Apache 伺服器和測試與驗證簡單五個步驟就能夠在 Linux 作業系統中完成安全連線的模擬實作,但是當我們進行解決方案的部署時,則會花費許多時間在其它軟體或系統的相關設定。

相關資源

解決問題 SSL/TLS (1)

教學目標

主要解決如何在 Windows 作業系統中,將 SSL 憑證和金鑰檔設定至 Apache 伺服器,模擬安全連線的問題。

重點概念

若要將 SSL 憑證和金鑰檔設定至 Apache 伺服器,讓我們可以進行安全連線,其實只要簡單五個步驟就能夠完成初步實作,分別為;

  1. 安裝 Apache 伺服器。
  2. 建立 SSL 憑證和金鑰檔。
  3. 設定 Apache 伺服器。
  4. 啟動 Apache 伺服器。
  5. 測試與驗證。

安裝 Apache 伺服器

透過 Apache Lounge 官方網站下載 Apache 伺服器壓縮檔,並且安裝至 C:\Apache24 資料夾中。

建立 SSL 憑證和金鑰檔

產生一組沒有加密的 2048 bits 私密金鑰

1
2
3
4
5
c:\Apache24\bin>openssl genrsa -out server.key 2048 -config "C:\Apache24\conf\openssl.cnf"
Generating RSA private key, 2048 bit long modulus
..............................................................................................+++
.................................................................................................................................................+++
e is 65537 (0x010001)

產生憑證簽署請求 (CSR)

  • Country 國別
  • State 州
  • Location 地區
  • Organization 組織
  • Organizational Unit 組織部門單位
  • Common Name 網域名稱
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
c:\Apache24\bin>openssl req -new -key server.key -x509 -out server.crt -config "C:\Apache24\conf\openssl.cnf"
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:TW
State or Province Name (full name) [Some-State]:Taiwan
Locality Name (eg, city) []:Taipei
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:www.myserver.com
Email Address []:
c:\Apache24\bin>move server.crt ..\conf\server.crt
您要覆寫 c:\Apache24\conf\server.crt 嗎? (Yes/No/All): y
移動 1 個檔案。
c:\Apache24\bin>move server.key ..\conf\server.key
您要覆寫 c:\Apache24\conf\server.key 嗎? (Yes/No/All): y
移動 1 個檔案。

設定 Apache 伺服器

請先修改 httpd.conf 檔案,檔案路徑為:C:\Apache24\conf\httpd.conf。

1
c:\Apache24\bin>notepad C:\Apache24\conf\httpd.conf

修改下述內容。

  • 載入相關模組。

    1
    2
    LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
    LoadModule ssl_module modules/mod_ssl.so
  • 載入設定檔。

    1
    Include conf/extra/httpd-ssl.conf

接著修改 httpd-ssl.conf 檔案,檔案路徑為:C:\Apache24\conf\extra\httpd-ssl.conf。

1
c:\Apache24\bin>notepad C:\Apache24\conf\extra\httpd-ssl.conf

確認下述內容,其中 和 SSLCertificateKeyFile 是指定金鑰的檔案。

  • 確認憑證檔案路徑。

    1
    SSLCertificateFile "c:/Apache24/conf/server.crt"
  • 確認金鑰檔案路徑。

    1
    SSLCertificateKeyFile "c:/Apache24/conf/server.key"

啟動 Apache 伺服器

1
c:\Apache24\bin>httpd

測試與驗證

開啟瀏覽器輸入以下網址進行測試與驗證。

1
c:\Apache24\bin>explorer https://127.0.0.1

總結雖然透過安裝 Apache 伺服器、建立 SSL 憑證和金鑰檔、設定 Apache 伺服器、啟動 Apache 伺服器和測試與驗證簡單五個步驟就能夠在 Windows 作業系統中完成安全連線的模擬實作,但是當我們進行解決方案的部署時,則會花費許多時間在其它軟體或系統的相關設定。

相關資源