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 ...

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top