2014-07-26 2 views
0

그래서 한 도메인의 모든 요청을 고유 한 IP로 받아들이고 다른 모든 도메인과 IP를 처리하도록 Go에서 webapp를 만들려고합니다. Nginx (PHP 제공).Go Webapp & Nginx : 청취에 대한 혼란, fastcgi 및 역방향 프록시

이 작업을 수행하는 방법에 대해 혼란스러워합니다. Nginx가 특정 도메인의 요청을 FastCGI로 전달하도록 Gogin 웹 응용 프로그램에서 수신하도록 구성하여 많은 사람들이이 작업을 수행하는 것처럼 보입니다. 이런 식으로 뭔가 :

Nginx.conf

server_name www.mydomain.com; 
listen 123.123.123.123; 
include   fastcgi.conf; 
fastcgi_pass 127.0.0.1:9001; 

이동

func main() { 
listener, _ := net.Listen("tcp", "127.0.0.1:9001") 
srv := new(MyServerObject) 
fcgi.Serve(listener, srv) 
} 

내가 이해하지 못하는 것은 이것이다 : 여기 우리가 Nginx에 다음 특정 IP와에서 특정 도메인에 대해 듣고있다 fastcgi로 전달한 다음이를 Go로 전달합니다.

왜 이런가요? Nginx를 가질 수 없습니까? 이 도메인을 청취 한 다음이 도메인 만 수신합니까? 그러면 리버스 프록시없이보다 효율적으로 동일한 결과를 얻을 수 있습니다.

Go가 듣고있는 도메인에 전용 IP를 사용할 수 있으므로 (내 생각에는) 충돌이 없을 것입니다. Nginx는 123.123.123.123:80을 듣지 않고 Go는 123.123.123.123:80을 듣고 있습니다 ... 따라서 역방향 프록시와 fastcgi가 필요 없습니다.

내 생각이 맞나요? 아니면 뭔가 빠졌습니까?

올바른 경우 Nginx에서이 IP/도메인의 수신기를 제거한 다음 아래 코드와 같이 사용하십시오.

func main() { 
http.HandleFunc("/", someFunction) 
http.ListenAndServe("123.123.123.123:80", nil) 
} 
+0

팁 : http.ListenAndServe를 사용하십시오. Go의 FCGI 구현은 HTTP보다 훨씬 느립니다. – elithrar

답변

2

예는 이동이 그 IP에서 직접들을 수 있습니다 그것은 잘 작동, 캐싱 및 정적 파일을 제공하는 등의 nginx를위한 다른 용도가있다.

또한 당신은 그것의 nginx에서 http.ListenAndServe("127.0.0.1:9020", nil) 및 프록시에서 수신 가서 할 수 : 그것은 테스트의 몇 분 정도 걸립니다

server { 
     listen 123.123.123.123:80; 
     location/{ 
       proxy_set_header  X-Real-IP $remote_addr; 
       proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
       proxy_pass http://127.0.0.1:9020/; 
     } 
} 

.

자문 해주세요. 일부 파일을 캐시하거나 정적 파일을 제공하기 위해 nginx가 필요합니까? 그렇다면 이동 앞에 사용하십시오. 그렇지 않으면 직접 이동하십시오.

또한 nginx를 사용하는 경우 프록시 방법이 fcgi보다 빠릅니다.

+0

실제로 웹 서버로 이동의 모든 요점은 모든 정적 파일을 처리하고이 도메인에서 자신을 캐싱 할 수 있도록하는 것입니다. – Alasdair

+0

그러면 완전히 nginx를 삭제할 수 있습니다. – OneOfOne

+0

그래,하지만 PHP로 구축 된 레거시 사이트에 대해서는 Nginx가 필요합니다. 그리고이 모든 것들을 Go로 포팅 할 의향이 없습니다. 기본 사이트 만 이동으로 포팅됩니다. – Alasdair

관련 문제