Nginx Proxy für eine GitHub Seite?
Frage
Wir haben ein Blog, das wir auf Github mit Jekyll Host; es ist da: http://blog.superfeedr.com
Im Idealfall möchte ich es bei http://superfeedr.com/blog/ sein, weil wir müssen einige AJAX hinzuzufügen und wir müssen die „Same Origin Policy“ Probleme vermeiden.
Wir verwenden Nginx auf unserem "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 gehen auf http://superfeedr.com/blog/ dies offensichtlich nicht funktioniert. Merkwürdigerweise sind wir auf Github der Homepage umgeleitet.
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 ...
Lösung
Als erstes nginx nicht Host-Header an den blog.superfeedr.com senden. Dies macht es alle erforderlichen Header senden:
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 Umschreiben einige URL erforderlich. Durch einigen seltsamen Grund hängt dies von der Version von nginx Sie verwenden. Sowieso, 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, z.
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; }
Andere Tipps
Eine andere Möglichkeit, dies zu tun (aber ohne nginx Beteiligung) könnte mit einer DNS-Richtlinie sein. Ich denke, die meisten DNS-Dienste URL Vorwärts-Service anbieten.
Zum Beispiel in hover.com zunächst blog
mit A
Direktive hinzufügen unter Registerkarte DNS 64.99.80.30
, und dann in den Vorwärts Registerkarte hinzufügen blog
sich auf http://superfeedr.com/blog/
In dnsimple.com, es ist einfacher, nur blog
URL
Datensatz hinzufügen http://superfeedr.com/blog/
weiterleiten
Diese vorwärts, glaube ich, arbeiten auch für https://
Typ URLs.