主要是參考網路上的這一篇:http://www.jeffreybolle.com/blog/run-google-go-web-apps-behind-apache
作者給出了一個簡單的 Go Web 程式:
package main import( "http" "log" "os" ) const resp = `<html> <head> <title>Simple Web App</title> </head> <body> <h1>Simple Web App</h1> <p>Hello World!</p> </body> </html>` func handler(w http.ResponseWriter, r *http.Request) { w.Write([]byte(resp)) } func main() { http.HandleFunc("/", handler) err := http.ListenAndServe(":8080", nil) if err != nil { log.Println(err) os.Exit(1) } }
這個 Web 程式主要是監聽 8080 Port,用 go build 之後得到的執行檔可直接作為 Web Server 運行。然後在 Apache 上安裝幾個 Module 後重啟 Apache。
sudo a2enmod proxy sudo a2enmod proxy_http sudo a2enmod rewrite sudo service apache2 restart
接下來在 /etc/apache2/sites-available/ 目錄下建立 VirtualHost 的設定檔案 (gowebsite):
<VirtualHost *:80> ServerAdmin [email protected] ServerName www.example.com ServerAlias example.com DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all RewriteEngine on RewriteRule ^(.*)$ http://localhost:8080/$1 [P,L] </Directory> </VirtualHost>
接著在 Apache 啟動這個設定檔,將此 VirtualHost 設為啟動:
sudo a2ensite gowebsite sudo service apache2 restart
整個過程就是在 VirtualHost 設定檔中設定此站台資料透過 Proxy Module 來由 localhost:8080 取得,當然這邊也可以同時在很多不同的 Port 中執行很多的 VirtualHost 站台。