>  기사  >  백엔드 개발  >  nginx 설정 golang

nginx 설정 golang

PHPz
PHPz원래의
2023-05-19 09:04:37804검색

실제 애플리케이션 시나리오에서 Nginx와 Golang의 조합을 사용하면 좋은 성능과 고가용성을 갖춘 웹 서비스를 제공할 수 있습니다. 이 기사에서는 Nginx를 통해 Golang 서비스를 역방향 프록시하는 방법과 Golang에서 로드 밸런싱을 위해 Nginx를 사용하는 방법을 소개합니다.

1. Nginx 역방향 프록시 Golang 서비스

역방향 프록시는 성능과 안정성을 향상시킬 수 있는 일반적인 서버 아키텍처입니다. 클라이언트에서 역방향 프록시 서버로 요청을 보낸 다음 서버 클러스터의 실제 서버로 요청을 전달하고 클라이언트에 응답을 반환하는 방식으로 작동합니다. Nginx 역방향 프록시는 성능이 뛰어날 뿐만 아니라 수천 개의 동시 연결을 쉽게 처리할 수 있는 탁월한 솔루션입니다.

실제 응용 분야에서 역방향 프록시에는 두 가지 주요 방법이 있습니다. 하나는 도메인 이름을 기반으로 하는 가상 호스트이고 다른 하나는 URL 경로를 기반으로 합니다.

1. 도메인 이름 기반 역방향 프록시

도메인 이름이 example.com이고 이 도메인 이름 아래에 두 개의 하위 도메인이 있다고 가정합니다. 하나는 blog.example.com이고 다른 하나는 api.example.com입니다. 두 하위 도메인이 서로 다른 서버를 가리키도록 하려고 합니다. 그런 다음 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를 사용합니다

  1. 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 로드 밸런싱 포트를 정의합니다. 위치 모듈의 / 경로는 Nginx가 모든 요청을 전달할 것임을 나타냅니다.

  1. Golang 클라이언트 코드

로드 밸런싱을 위해서는 클라이언트 측에서 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의 로드 밸런싱 시스템을 통해 잘 분산될 수 있습니다.

Summary

Nginx와 Golang의 조합을 통해 역방향 프록시와 로드 밸런싱을 구현하면 애플리케이션의 성능과 고가용성을 향상시킬 수 있습니다. 역방향 프록시는 처리를 위해 클라이언트 요청을 실제 서버로 전달할 수 있으며, 로드 밸런싱은 특정 서버에 과도한 로드가 발생하지 않도록 요청 로드 균형을 조정할 수 있습니다. 이 글의 소개와 예제가 Nginx와 Golang을 더 잘 사용하는 데 도움이 되기를 바랍니다.

위 내용은 nginx 설정 golang의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:골랭 http 전달다음 기사:골랭 http 전달