2009-06-29 10 views
3

Wir haben einen Blog, den wir auf Github mit Jekyll hosten; Es ist da: http://blog.superfeedr.comNginx-Proxy für eine GitHub-Seite?

Idealerweise möchte ich es bei http://superfeedr.com/blog/ sein, weil wir einige AJAX hinzufügen müssen und wir müssen die "gleichen Ursprungsrichtlinien" Probleme vermeiden.

Wir verwenden Nginx auf unserer „main“ Webserver, und ich habe folgendes Setup:

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; 
} 

Leider, wie Sie sehen können, wenn Sie http://superfeedr.com/blog/ gehen diese offensichtlich nicht funktioniert. Seltsamerweise werden wir auf Githubs Homepage weitergeleitet.

PS: Natürlich könnten wir den Blog auf unsere Server hosten, aber das Ziel ist es auf einem anderen Host Host, so dass wir es fast garantieren können online sein, wenn die Seite nicht erreichbar ist ...

+0

über PS. Dieser andere Gastgeber wird einsam online bleiben, was bedeutet, dass er nur als blog.superfeedr.com verfügbar sein wird. superfeedr.com/blog/ funktioniert nicht, wenn der Hauptserver nicht erreichbar ist. Ich hoffe du verstehst das. – rzab

+0

Nun, nur wenn Nginx nicht verfügbar ist, nicht wenn die Appli runter ist und das ist was wir wollen. –

Antwort

5

Zunächst sendet nginx den Host-Header nicht an blog.superfeedr.com. Dadurch werden alle erforderlichen Header gesendet:

 
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; 

Zweitens, einige URL-Rewriting erforderlich. Aus irgendeinem seltsamen Grund hängt das von der Version von nginx ab, die Sie verwenden. Wie auch immer, für 0.6.x (0.6.32 für mich) dies sollte funktionieren:

 
    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; 
    } 

Sie müssen auch das Blog bezieht sich auf (css, Bilder, etc.) alle Wege bedecken, zum Beispiel

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

Für 0.7.59:

 
     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

Tut mir leid, dass das nicht funktioniert ... –

+0

Ich habe einige Korrekturen zu meiner Antwort hinzugefügt. Die erste Version mit nur 4 zusätzlichen Zeilen war einfach falsch. – rzab

+0

Es tut mir leid, aber es funktioniert immer noch nicht. Es könnte etwas sein, was ich falsch mache. Hier ist der vollständige Inhalt unserer nginx config: http://gist.github.com/138292 Nun, wenn Sie zu http://superfeedr.com/blog/ gehen Sie eine 404 ... –

0

Einen anderen Weg, dies zu tun (aber ohne nginx Beteiligung) mit einer DNS-Richtlinie sein könnte. Ich denke, die meisten DNS-Dienste bieten einen URL-Weiterleitungsdienst an.

Zum Beispiel in hover.com, fügen Sie zuerst blog mit A Richtlinie 64.99.80.30 unter Registerkarte DNS, und dann in den Vorwärts Registerkarte hinzufügen blog sie auf http://superfeedr.com/blog/

In dnsimple.com, es ist einfacher, fügen Sie einfach blogURL Datensatz http://superfeedr.com/blog/

Diese vorwärts zu übermitteln, wie ich glaube, auch https:// Typ URLs für Arbeit.