Go 용 웹 서버 앞에서 Nginx를 사용하면 어떤 이점이 있습니까? [닫은]


84

사용자가 많은 JSON 데이터를 반환하는 웹 서비스를 작성 중입니다.

go http 서버를 사용하는 것과 비교하여 내 서버에서 Nginx를 사용하면 어떤 이점이 있습니까?


fyi는 피어에 의한 연결 재설정과 같은 많은 tcp 오류와 분당 100 개의 대규모 POST 요청을 처리하는 서비스를 위해 Go http 서버를 사용하는 I / O 시간 초과가있었습니다. nginx를 앞에 두십시오-더 이상 문제가 없습니다.
Peter Kelly

결국 나는 NGINX없이 Go http 서버를 사용하기로 결정했고 매우 잘 작동합니다. 나는 어떤 문제도 실행하지 않았습니다. 하지만 내 서비스는 귀하의 경우와 같이 큰 POST 요청을 실행하지 않습니다.
Daniele B

20
이것은 반드시 필요한 의견이 아닙니다. 그렇게 닫으면 그러한 질문에 대한 답변이 채워지고 제공 할 수있는 고려 사항 및주의 사항에 대한 이해가 심각하지 않음을 보여줍니다. 선택한 답변이 좋은 예입니다. 실제로 제공된 모든 답변에서 관련 새로운 고려 사항을 확인합니다.
vee_ess

답변:


135

때에 따라 다르지.

기본적으로 nginx를 역방향 프록시로 사용하면 다음과 같은 이점이 있습니다.

  • 액세스 로그
  • 오류 로그
  • 간편한 SSL 종료
  • SPDY 지원
  • gzip 지원
  • 몇 줄의 특정 경로에 대한 HTTP 헤더를 설정하는 쉬운 방법
  • 매우 빠른 정적 자산 제공 (S3 / 등을 제공하는 경우에는 관련성이 없음)

이동 HTTP 서버는 아주 좋은,하지만 당신은 것입니다 이러한 몇 가지 작업을 수행 할 바퀴를 재발견 할 필요가 (미세이다 : 모든 사람에게 모든 것이 될 운명이 아니에요).

저는 항상 nginx를 앞에두고 "웹 서버"작업을 수행하는 것이 더 쉽다는 것을 알았습니다. 내 Go 애플리케이션은 애플리케이션 작업을 수행하며 최소한의 헤더 / 등 만 수행합니다. 필요합니다. nginx를 "나쁜"것으로 간주하지 마십시오.


답장을 보내 주셔서 감사합니다! -1) Go HTTP는 일종의 로그를 생성합니까? -2) nginx는 어떻게 든 요청 / 응답 처리량을 줄입니까?
Daniele B

3
@DanieleB Go HTTP 서버는 원하는 로그 만 생성합니다 (예 : log패키지 사용). IP 주소, 리소스 액세스 등을 기록하려면이를 작성해야합니다. 기본 사항을 넘어서 헤더 설정도 마찬가지입니다. 구체적인 데이터는 없지만 Go 앞에있는 nginx는 Go보다 느려서는 안됩니다. 실제로 gzip과 자체 최적화 덕분에 더 빠를 수 있습니다. "비용"은 더 많은 메모리 / CPU 활용이지만 nginx는 그 측면에서도 매우 효율적입니다.
elithrar

16
또 하나의 큰 기능 : 앱을 어떻게 업그레이드 / 유지할 것인가 (다운 상태에서 패킷을 삭제하지 않고)? Nginx를 사용하면 패킷 손실없이 트래픽을 조정할 수 있습니다.
BraveNewCurrency

+1, Nginx는 자체 위치에 있습니다.
Anatoly 2014

3
내 Raspberry Pi에서 Nginx를 Go 앞에두면 페이지로드 속도가 크게 증가했습니다.
425nesp

17

Go의 표준 http 서버는 괜찮습니다. 응용 프로그램이 대부분 / 단지 "동적"요청 / 응답 인 경우 실제로 가장 좋은 방법입니다.

nginx를 사용하여 정적 자산을 제공 할 수 있지만 대부분의 경우 표준 Go도 괜찮습니다. 더 높은 성능이 필요한 경우 Varnish로 가능한 한 많이 CDN 또는 캐시를 사용해야합니다 (예 :).

동일한 IP 주소에서 서로 다른 애플리케이션을 제공해야하는 경우 nginx는 프록시가 서로 다른 애플리케이션간에 요청을 분산하는 데 적합한 선택입니다. 나는 그런 종류의 도구 상자에서 Varnish 또는 HAProxy를 더 자주 가져옵니다.


예, 실제로 동적 데이터를 제공하는 데만 사용하고 있습니다. 그래서 나는 NGINX가 필요하지 않다고 생각합니다! 답장을 보내 주셔서 감사합니다
Daniele B

Varnish / HAProxy는 필요하지 않으며 Nginx에는 캐싱 및 부하 분산을위한 유사한 도구 세트가 있습니다.
Anatoly

@mikhailov가 내가 말한 것이 아닙니까? nginx가 잘 작동합니다. 개인적으로 나는 종종 Varnish 또는 HAproxy를 선호합니다. 구성 및 작동이 더 쉽습니다.
비요른 핸슨 물어

5

고릴라 웹 툴킷 을 제공합니다 :

  • 고급 라우팅 (도메인 / 하위 도메인 제한, 정규식 경로 일치).
  • gzip 지원 ( 미들웨어 핸들러 를 통해 )
  • Apache Common Log Format으로 출력되는 로깅 미들웨어 핸들러입니다.
  • 암호화 된 쿠키를 보호합니다.
  • 세션.
  • schema package는 양식 값을 구조체로 변환합니다.

이것은 Go net/http와 NGINX와 같은 HTTP 서버 사이의 많은 차이를 메 웁니다 .

개인적 net/http으로 CDN을 대신 연결할 수 있다는 것을 알고 있다면 다른 HTTP 서버를 설치하고 구성하는 것을 피하고 싶습니다 .

나는 net/http모든 표준 라이브러리에서 가장 강력한 HTTP 서버를 가지고 있다고 생각 합니다.


2

https://blog.gopheracademy.com/caddy-a-look-inside/ 에서 Go가 미들웨어를 사용하여 gzip, 오류, 정적 파일, 라우팅 및 http 헤더를 처리 할 수있는 것처럼 보입니다. 블로그의 아래 줄은 이러한 요청을 처리하는 방법을 보여줍니다.

logHandler(gzipHandler(fileServer))

그들은 정말 흥미로운 방식으로 오류 로깅을 처리합니다. 미들웨어가 오류 코드 (int)를 반환하는 한 오류 처리 미들웨어가이를 자동으로 처리합니다. 그들은 Nginx처럼 Go에서 전체 사이트를 구성하는 데까지 갔다. "모든 Gopher Academy 웹 사이트의 nginx.conf 파일은 115 줄이 넘었습니다. 이에 상응하는 Caddyfile은 50 줄에 불과합니다."

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.