本方案介绍如何使用Nginx作为反向代理服务器,为Golang应用提供负载均衡服务。这种架构可以提高应用的可用性、扩展性和性能。
确保你的Golang应用可以独立运行,监听某个端口(如8080):
package main
import (
"fmt"
"log"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello from Go application!")
}
func main() {
http.HandleFunc("/", handler)
log.Println("Starting server on :8080")
log.Fatal(http.ListenAndServe(":8080", nil))
}
编译并运行多个实例(在不同端口上):
go build -o myapp
./myapp -port=8080 &
./myapp -port=8081 &
./myapp -port=8082 &
# Ubuntu/Debian
sudo apt update
sudo apt install nginx
# CentOS/RHEL
sudo yum install epel-release
sudo yum install nginx
编辑Nginx配置文件(通常在/etc/nginx/nginx.conf
或/etc/nginx/sites-available/default
):
http {
upstream go_app {
# 负载均衡策略可选:round-robin(默认)、least_conn、ip_hash等
least_conn;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
# 可选的健康检查参数
keepalive 32;
}
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://go_app;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# WebSocket支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 超时设置
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
# 可选的静态文件服务
location /static/ {
alias /path/to/your/static/files/;
expires 30d;
}
}
}
# 测试配置语法
sudo nginx -t
# 重启Nginx
sudo systemctl restart nginx
# 设置开机启动
sudo systemctl enable nginx
upstream go_app {
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server 127.0.0.1:8081 max_fails=3 fail_timeout=30s;
server 127.0.0.1:8082 max_fails=3 fail_timeout=30s;
}
使用Let's Encrypt免费证书:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;
}
sudo systemctl status nginx
sudo tail -f /var/log/nginx/error.log
根据服务器配置调整Nginx工作进程:
worker_processes auto; # 通常设置为CPU核心数
events {
worker_connections 1024; # 每个工作进程的最大连接数
multi_accept on;
}
502 Bad Gateway错误
sudo tail -f /var/log/nginx/error.log
性能问题
worker_processes
和worker_connections
WebSocket连接问题
负载不均衡
ip_hash
策略保持会话一致性通过以上配置,你的Golang应用将能够通过Nginx实现高可用、高性能的负载均衡服务。