2009-06-29 4 views
3

우리는 지킬과 함께 github에 호스트 블로그가 있습니다; 거기에있다 : http://blog.superfeedr.comGitHub 페이지 용 Nginx 프록시?

내가 AJAX를 추가 할 필요가 있기 때문에 이상적으로는 http://superfeedr.com/blog/이어야하고 "같은 출처 정책"문제를 피할 필요가있다.

우리는 우리의 "주"웹 서버에 Nginx에를 사용하고, 나는 다음과 같은 설정이 : 당신이 작동하지 않습니다 분명히 http://superfeedr.com/blog/이에 가면 당신이 볼 수 있듯이, 불행하게도

location /blog/ { 

proxy_pass http://blog.superfeedr.com/; 
    proxy_redirect  off; 
    proxy_max_temp_file_size 0; 

    client_max_body_size  10m; 
    client_body_buffer_size 128k; 

    proxy_connect_timeout  90; 
    proxy_send_timeout   90; 
    proxy_read_timeout   90; 

    proxy_buffer_size   4k; 
    proxy_buffers    4 32k; 
    proxy_busy_buffers_size 64k; 
    proxy_temp_file_write_size 64k; 
} 

합니다. 이상하게도 Github의 홈페이지로 연결됩니다.

PS : 분명히 ... 우리는 우리의 주요 서버에 블로그를 호스팅 할 수 있지만, 목표는 우리가 거의 사이트가 다운되면 온라인으로 그것을 보장 할 수 있도록 다른 호스트에 호스팅하는 것입니다

+0

약. 이 다른 호스트는 외로운 온라인 상태를 유지하게되며 이는 blog.superfeedr.com으로 만 사용할 수 있음을 의미합니다. 메인 서버가 다운되었을 때 superfeedr.com/blog/는 작동하지 않습니다. 당신이 그것을 이해하기를 바랍니다. – rzab

+0

음, Nginx가 다운 된 경우에만, 응용 프로그램이 다운 된 경우가 아니라면 우리가 원하는 것입니다. –

답변

5

먼저 nginx는 blog.superfeedr.com에 Host 헤더를 보내지 않습니다. 이렇게하면 필요한 모든 헤더가 전송됩니다.

 
proxy_set_header Host     blog.superfeedr.com; 
proxy_set_header X-Host     blog.superfeedr.com; 
proxy_set_header X-Real-IP    $remote_addr; 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

둘째, 일부 URL을 다시 작성해야합니다. 몇 가지 이상한 이유로 이것은 nginx 버전에 따라 다릅니다. 어쨌든, 는 (나를 위해 0.6.32) 된 0.6.x이 작동합니다 :

 
    location /blog { 
       rewrite ^/blog(.*)$ /$1 last; 
       error_page 402 = @blog; 
       return 402; 
    } 
    location @blog { 
     proxy_pass http://blog.superfeedr.com; 

     # the rest of proxying parameters should be here 

     proxy_set_header Host     blog.superfeedr.com; 
     proxy_set_header X-Host     blog.superfeedr.com; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 

을 당신은 모든 경로를 충당하기 위해 필요로하는 블로그 (CSS, 이미지 등), 예를 의미 0.7.59 들어

 
location /css { 
    error_page 402 = @blog; 
    return 402; 
} 

:

 
     location /blog { 
       set $blog 1; 
       rewrite ^/blog(.*)$ /$1 last; 
     } 
     location /css { 
       set $blog 1; 
       error_page 402 = @blog; 
       return 402; 
     } 
     location/{ 
       if ($blog) { 
         error_page 402 = @blog; 
         return 402; 
       } 
       # here is where default settings for/should be 
       root /usr/local/www/nginx/; 
     } 
     location @blog { 
       proxy_pass http://blog.superfeedr.com; 

       # the rest of proxying parameters should be here 

       proxy_set_header Host     blog.superfeedr.com; 
       proxy_set_header X-Host     blog.superfeedr.com; 
       proxy_set_header X-Real-IP $remote_addr; 
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     } 
+0

죄송합니다 작동하지 않습니다 ... –

+0

내 답변에 몇 가지 수정 사항을 추가했습니다. 단 4 개의 추가 회선이있는 첫 번째 버전은 틀렸어. – rzab

+0

죄송하지만 여전히 작동하지 않습니다. 내가 잘못하고있는 것일 수도 있습니다. 다음은 nginx config의 전체 내용입니다. http://gist.github.com/138292 http://superfeedr.com/blog/에 가면 404 ... –

0

이 작업을 수행하는 또 다른 방법 (그러나의 nginx를 포함하지 않고)는 DNS 지시문이 될 수 있습니다. 대부분의 DNS 서비스는 URL 전달 서비스를 제공한다고 생각합니다.

예를 들어, hover.com에서, 첫 번째 DNS 탭에서 64.99.80.30A 지시어로 blog을 추가 한 다음 앞으로 탭에서 dnsimple.com에서 http://superfeedr.com/blog/

앞으로 blog를 추가, 그것은 간단 단지 추가 blogURL 전달할 레코드 http://superfeedr.com/blog/

이러한 전달은 https:// 유형의 URL에도 적용됩니다.