実際のアプリケーション シナリオでは、Nginx と Golang を組み合わせて使用すると、優れたパフォーマンスと高可用性を備えた Web サービスを提供できます。この記事では、Nginx 経由で Golang サービスをリバース プロキシする方法と、Golang での負荷分散に Nginx を使用する方法を紹介します。
1. Nginx リバース プロキシ Golang サービス
リバース プロキシは、パフォーマンスと信頼性を向上させることができる一般的なサーバー アーキテクチャです。これは、クライアントからリバース プロキシ サーバーにリクエストを送信することによって機能し、リバース プロキシ サーバーはそのリクエストをサーバー クラスター内の実際のサーバーに転送し、クライアントに応答を返します。 Nginx リバース プロキシは、パフォーマンスが高いだけでなく、数千の同時接続を簡単に処理できる優れたソリューションです。
実際のアプリケーションでは、リバース プロキシには主に 2 つの方法があります。1 つはドメイン名に基づく仮想ホストで、もう 1 つは URL パスに基づくものです。
1. ドメイン名ベースのリバース プロキシ
ドメイン名が example.com で、このドメイン名の下に 2 つのサブドメインがあり、1 つは blog.example.com で、もう 1 つは blog.example.com であるとします。 API .example.com。 2 つのサブドメインが異なるサーバーを指すようにしたいとします。次に、Nginx を次のように構成できます:
server { server_name blog.example.com; location / { proxy_pass http://your.blog.server; } } server { server_name api.example.com; location / { proxy_pass http://your.api.server; } }
2. URL ベースのリバース プロキシ
/blog および /api へのリクエストを処理のために別のサーバーに引き渡したいとします。次に、Nginx を次のように構成できます:
location /blog/ { proxy_pass http://your.blog.server; } location /api/ { proxy_pass http://your.api.server; }
このようにして、クライアントが example.com/blog/ のコンテンツをリクエストすると、Nginx はローカル コンテンツを返すのではなく、リクエストを your.blog.server に転送します。 。
2. Golang は負荷分散に Nginx を使用します
Golang クライアントと Nginx を負荷分散に使用する前に、まずインストールする必要がありますNginx を選択して設定します。
Ubuntu に Nginx をインストールするコマンドは次のとおりです:
sudo apt-get update sudo apt-get install nginx
インストールが完了したら、次の内容を構成ファイルに追加します:
events { worker_connections 1024; } http { upstream your_go_server { server 127.0.0.1:8080; server 127.0.0.1:8081; } server { listen 80; server_name localhost; location / { proxy_pass http://your_go_server; } } }
上流モジュールはこちら実行される負荷を定義します。 バランスサーバー。負荷分散用に複数のサーバーを構成できます。サーバー モジュールは、Nginx 負荷分散ポートを定義します。 location モジュールの / パスは、Nginx がすべてのリクエストを転送することを示します。
負荷分散を実行するには、クライアント側で Golang HTTP クライアント ライブラリを使用し、サーバーを選択するための「検索」関数を記述する必要があります。負荷分散サーバーのリストにあります。
func findServer() string { servers := []string{"http://127.0.0.1:8080", "http://127.0.0.1:8081"} //要进行负载均衡的服务器列表 n := len(servers) rand.Seed(time.Now().UnixNano()) //定义随机种子 index := rand.Intn(n) //生成随机数 return servers[index] //返回随机选择的服务器 }
次に、HTTP リクエストを作成するときに、リソース URL の前に「findServer()」を追加するだけです。
client := &http.Client{} req, err := http.NewRequest("GET", findServer()+"/example", nil) response, err := client.Do(req)
このようにして、Golang クライアント コードは Nginx のコードを渡すことができます。負荷分散 システムは分散処理を適切に実行します。
概要
Nginx と Golang を組み合わせてリバース プロキシと負荷分散を実装すると、アプリケーションのパフォーマンスと高可用性を向上させることができます。リバース プロキシはクライアント リクエストを実際のサーバーに転送して処理することができ、ロード バランシングはリクエストの負荷を分散して、特定のサーバーへの過剰な負荷を回避します。この記事の紹介と例が、Nginx と Golang をより効果的に使用するのに役立つことを願っています。
以上がnginx設定golangの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。