2010-12-29 3 views
11

nginx를 사용하여 요청을 노드 응용 프로그램에 전달합니다. 이 앱은 기본적으로 html에 대한 원격 캐시 역할을합니다 (사용자가 요청한 것이 redis db에 있는지 확인하고, 표시하지 않으면 가져 오지 않고 redis 캐시에 저장하고 제공합니다).nginx를 사용하여 콘텐츠를 직접 redis 캐시에서 제공

nginx가 redis에서 직접 콘텐츠를 제공함으로써 노드 앱을 우회하는 방법이 있다면 궁금합니다. 나는 http_redis 모듈을 속이고 있었지만 실제로 작동시킬 수는 없다.

간단한 예제는 다음과 같습니다. http://mywebsite.com/a 여기서 nginx는 'a'키의 내용을 제공하거나 키가 존재하지 않으면 노드 앱에 전달합니다. 이것은 가능한가?

답변

1

Nginx를 Webdis에 대한 역방향 프록시로 설정하여 무언가를 얻을 수 있어야합니다.

Webdis를 사용하는 방법은 URL에 전체 명령을 넣는 것입니다. 따라서 GETa/GET/a을 요청하십시오. 이것은 당신이 제공 할 모든 GET를 사용하여 사용할 수있는 경우는 Nginx에이 같은 일을 할 수 있다는 것을 의미한다 :

location/{ 
    rewrite ^(.*)$ /GET/$1 break; 
    proxy_pass http://127.0.0.1:7379/; 
} 

(내가 여기 내 머리 위로 떨어져 설정을 쓰고, 구문이 약간 떨어져있을 수 있습니다).

그러나 Webdis 프로젝트는 매우 어림도 없으므로 제대로 작동하는지 알 수 없으며 응답은 JSON 문서로 반환하지 않으려 고합니다.

+0

흠, 나는 그것을 조사 할 것이다. 나는 내가 모르는 것이 가능했는지 알지 못했기 때문에 나는 nginx에 대해 많은 것을 알지 못한다. 나는 Node에서 또는 Webdis에서 서비스를 제공하는 것이 더 빠를 지 알아봐야하는 방법을 추측합니다. nginx가 memcache에서 직접 서버 할 수 있고 http_redis 모듈이 그 다음에 모델링 된 것처럼 보입니다. –

+0

또한 이것을 pub/subs와 함께 사용한다면 proxy_buffering을 off로 설정하고 proxy_read_timeout을 적절히 긴 값으로 설정하고자 할 것입니다. – rrauenza

9

Webdis보다 설치가 더 어려울 수도 있지만, redis2-nginx-module과 같은 추가 모듈을 사용하여 nginx 데몬에서 직접 할 수 있습니다. nginx를 재 컴파일해야합니다.

홈 페이지에는 몇 가지 구성 예제가 있습니다. 예를 들어

: 물론

# GET /get?key=some_key 
location /get { 
    set_unescape_uri $key $arg_key; # this requires ngx_set_misc 
    redis2_query get $key; 
    redis2_pass foo.com:6379; 
} 

, 조금 더의 nginx 구성에, 다른 URL 패턴을 얻을 수 있습니다.

이 예제에서는 ngx_set_misc 모듈도 컴파일해야합니다.

3

나는 이것이 오래된 스레드이지만 여전히 유용하다고 일부는 알고 있습니다. 나는 당신이 nginx에서 HttpRedis2Module을 사용하여 타격하지 않고 Redis에서 직접 서비스하는 것과 같은 접근법을 시도했다. 번거롭기 때문에 일하게 될 때 행복 했었지만 스트레스 테스트를했을 때 정말 나쁜 결과를 낳았습니다.

실제로 모듈을 사용하여 nginx->redis을 사용하는 것보다 nginx->php->mongodb을 사용하여 서비스하는 것이 더 빠르고 안정적이었습니다.

+1

nginx에서 redis 풀에 대한 keepalive를 설정 했습니까?지난번에 필자가 테스트 한이 큐브 리브 (keepalive)는 php -> redis보다 훨씬 빠른 속도의 차이였습니다 ... –

+0

Redis는 멀티 스레딩이없는 단일 프로세스이기 때문에 PHP + MongoDb가 벤치 마크에서 Redis보다 빠르다고 놀랍지 않습니다. 얼마나 많은 CPU 코어를 가지고 있더라도 하나의 프로세스로 모든 요청을 순차적으로 처리한다는 의미입니다. 따라서 매우 빠르지 만 PHP와 MongoDb는 많은 요청을 동시에 처리하여 모든 CPU 코어를 완벽하게 활용할 수 있기 때문에 동시성이 높으면 빠릅니다. 또한 MongoDb는 빠르게 타오르는 것입니다. – ColinM