Domanda

Abbiamo un blog che ospitiamo su github con Jekyll; è lì: http://blog.superfeedr.com

Idealmente, vorrei che fosse http://superfeedr.com/blog/ perché noi è necessario aggiungere un po 'di AJAX e dobbiamo evitare il " Stesso criterio di origine " problemi.

Usiamo Nginx sul nostro " main " webserver e ho la seguente configurazione:

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

Sfortunatamente, come puoi vedere se vai a http://superfeedr.com/blog/ questo ovviamente non funziona. Stranamente, siamo reindirizzati alla homepage di Github.

PS: ovviamente, potremmo ospitare il blog sul nostro server principale, ma l'obiettivo è ospitarlo su un host diverso in modo da poter quasi garantire che sia online se il sito è inattivo ...

È stato utile?

Soluzione

Innanzitutto, nginx non invia l'intestazione Host a blog.superfeedr.com. Questo lo rende inviare tutte le intestazioni richieste:

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;

In secondo luogo, è necessario riscrivere l'URL. Per qualche strana ragione questo dipende dalla versione di nginx che stai usando. Comunque, per 0.6.x (0.6.32 per me) dovrebbe funzionare:

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

Devi anche coprire tutti i percorsi a cui fa riferimento il blog (css, immagini ecc.), ad es.

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

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

Altri suggerimenti

Un altro modo per farlo (ma senza coinvolgere nginx) potrebbe essere con una direttiva DNS. Penso che la maggior parte dei servizi DNS offra il servizio di inoltro URL.

Ad esempio, in hover.com, aggiungi prima blog con A direttiva a 64.99.80.30 nella scheda DNS, quindi nella scheda Inoltra, aggiungi http://superfeedr.com/blog/ inoltra a URL

In dnsimple.com, è più semplice, basta aggiungere https:// <=> record per inoltrare a <=>

Questi forward, credo, funzionano anche per <=> URL di tipo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top