2013-01-05 29 views
7

Với Nginx/Django tạo các máy chủ ảo dễ dàng như viết cấu hình thích hợp.Cách nhận chức năng "virtualhost" trong Go?

Vì tôi đã tìm thấy điều này https://codereview.appspot.com/4070043 và tôi hiểu rằng tôi phải sử dụng ServeMux nhưng cách triển khai?

Tôi có nghĩa là tôi phải có 1 nhị phân cho tất cả các dự án hoặc tôi phải tạo một số máy chủ "bộ định tuyến" sẽ định tuyến các yêu cầu tùy thuộc vào tên máy chủ? Làm thế nào để làm điều đó "Go" -way?

Trả lời

18

Bạn đúng là bạn sẽ sử dụng ServeMux. godoc for ServeMux có một số thông tin chi tiết về cách sử dụng nó.

Trong gói http chuẩn, có DefaultServeMux có thể được điều khiển bằng các hàm Xử lý cấp cao nhất. Ví dụ, một ứng dụng máy chủ ảo đơn giản có thể trông giống như:

package main 

import (
    "fmt" 
    "net/http" 
) 

func main() { 
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { 
     fmt.Fprintf(w, "Hello, world!") 
    }) 
    http.HandleFunc("qa.example.com/", func(w http.ResponseWriter, r *http.Request) { 
     fmt.Fprintf(w, "Hello, improved world!") 
    }) 
    http.ListenAndServe(":8080", nil) 
} 

Trong ví dụ này, tất cả các yêu cầu để qa.example.com sẽ tung ra bộ xử lý thứ hai, và tất cả các yêu cầu tới máy chủ khác sẽ tung ra bộ xử lý đầu tiên.

+1

Tôi tò mò về phần thứ hai của câu hỏi của ông liên quan đến số lượng các tệp nhị phân bắt buộc. Bạn có cần phải biên dịch tất cả các dự án máy chủ ảo riêng biệt của bạn thành một nhị phân cho ServeMux để ghép kênh chính xác không? Phương pháp duy nhất khác tôi có thể nghĩ là sử dụng gói os để thực thi các tệp nhị phân khác, điều này có vẻ sai. –

+1

liên quan đến điều này: Cách chạy hai máy chủ web trong cùng một chương trình đi: http://stackoverflow.com/questions/21183183/running-two-web-server-at-the-same-time-in-one-go -programm – Ali

+0

@MorganFreeman Để sử dụng phương pháp tôi đã nêu ở đây, bạn sẽ thực thi một nhị phân Go đơn được phân phối trên một máy chủ duy nhất. Tất cả các tên máy chủ ảo phải giải quyết cho máy chủ lưu trữ đang chạy tệp nhị phân của bạn. –

1

Dưới đây là một ví dụ về cách cung cấp các "máy ảo" chức năng sử dụng golang:

https://gist.github.com/camoles/523dac8cc0fe40d52f66

Trong trường hợp này mỗi "máy chủ ảo" có thể là bất kỳ máy chủ http, như net.http golang khác máy chủ web hoặc thậm chí máy chủ web thông thường khác như nginx. Mỗi người trong số họ có thể là trong cùng một ip và trong một cổng, hoặc trong một ip và bất kỳ cổng. Nó không quan trọng nếu bạn đang chuyển tiếp đến một máy chủ vật lý khác nhau nếu bạn muốn làm điều đó.

Các vấn đề liên quan