사용자가 많은 JSON 데이터를 반환하는 웹 서비스를 작성 중입니다.
go http 서버를 사용하는 것과 비교하여 내 서버에서 Nginx를 사용하면 어떤 이점이 있습니까?
사용자가 많은 JSON 데이터를 반환하는 웹 서비스를 작성 중입니다.
go http 서버를 사용하는 것과 비교하여 내 서버에서 Nginx를 사용하면 어떤 이점이 있습니까?
답변:
때에 따라 다르지.
기본적으로 nginx를 역방향 프록시로 사용하면 다음과 같은 이점이 있습니다.
이동 HTTP 서버는 아주 좋은,하지만 당신은 것입니다 이러한 몇 가지 작업을 수행 할 바퀴를 재발견 할 필요가 (미세이다 : 모든 사람에게 모든 것이 될 운명이 아니에요).
저는 항상 nginx를 앞에두고 "웹 서버"작업을 수행하는 것이 더 쉽다는 것을 알았습니다. 내 Go 애플리케이션은 애플리케이션 작업을 수행하며 최소한의 헤더 / 등 만 수행합니다. 필요합니다. nginx를 "나쁜"것으로 간주하지 마십시오.
log
패키지 사용). IP 주소, 리소스 액세스 등을 기록하려면이를 작성해야합니다. 기본 사항을 넘어서 헤더 설정도 마찬가지입니다. 구체적인 데이터는 없지만 Go 앞에있는 nginx는 Go보다 느려서는 안됩니다. 실제로 gzip과 자체 최적화 덕분에 더 빠를 수 있습니다. "비용"은 더 많은 메모리 / CPU 활용이지만 nginx는 그 측면에서도 매우 효율적입니다.
Go의 표준 http 서버는 괜찮습니다. 응용 프로그램이 대부분 / 단지 "동적"요청 / 응답 인 경우 실제로 가장 좋은 방법입니다.
nginx를 사용하여 정적 자산을 제공 할 수 있지만 대부분의 경우 표준 Go도 괜찮습니다. 더 높은 성능이 필요한 경우 Varnish로 가능한 한 많이 CDN 또는 캐시를 사용해야합니다 (예 :).
동일한 IP 주소에서 서로 다른 애플리케이션을 제공해야하는 경우 nginx는 프록시가 서로 다른 애플리케이션간에 요청을 분산하는 데 적합한 선택입니다. 나는 그런 종류의 도구 상자에서 Varnish 또는 HAProxy를 더 자주 가져옵니다.
고릴라 웹 툴킷 을 제공합니다 :
schema
package는 양식 값을 구조체로 변환합니다.이것은 Go net/http
와 NGINX와 같은 HTTP 서버 사이의 많은 차이를 메 웁니다 .
개인적 net/http
으로 CDN을 대신 연결할 수 있다는 것을 알고 있다면 다른 HTTP 서버를 설치하고 구성하는 것을 피하고 싶습니다 .
나는 net/http
모든 표준 라이브러리에서 가장 강력한 HTTP 서버를 가지고 있다고 생각 합니다.
https://blog.gopheracademy.com/caddy-a-look-inside/ 에서 Go가 미들웨어를 사용하여 gzip, 오류, 정적 파일, 라우팅 및 http 헤더를 처리 할 수있는 것처럼 보입니다. 블로그의 아래 줄은 이러한 요청을 처리하는 방법을 보여줍니다.
logHandler(gzipHandler(fileServer))
그들은 정말 흥미로운 방식으로 오류 로깅을 처리합니다. 미들웨어가 오류 코드 (int)를 반환하는 한 오류 처리 미들웨어가이를 자동으로 처리합니다. 그들은 Nginx처럼 Go에서 전체 사이트를 구성하는 데까지 갔다. "모든 Gopher Academy 웹 사이트의 nginx.conf 파일은 115 줄이 넘었습니다. 이에 상응하는 Caddyfile은 50 줄에 불과합니다."