Pergunta

Temos um blog que nós anfitrião no github com Jekyll; ele está lá: http://blog.superfeedr.com

Idealmente, eu quero que seja em http://superfeedr.com/blog/ porque nós necessidade de adicionar um pouco de AJAX e precisamos evitar os problemas "política de mesma origem".

Nós usamos Nginx no nosso servidor web "main", e eu tenho a seguinte configuração:

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

Infelizmente, como você pode ver se você vai para http://superfeedr.com/blog/ Isto, obviamente, não funciona. Curiosamente, estamos redirecionado para a página de Github.

PS: obviamente, poderíamos hospedar o blog em nosso servidor principal, mas o objetivo é hospedá-lo em um host diferente para que possamos quase garantir que ele seja online se o site está em baixo ...

Foi útil?

Solução

Em primeiro lugar, nginx não envia cabeçalho de anfitrião para o blog.superfeedr.com. Isso torna enviar todos os cabeçalhos necessários:

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;

Em segundo lugar, alguns reescrita de URL necessário. Por algum motivo estranho isso depende da versão do nginx você está usando. De qualquer forma, para 0.6.x (0.6.32 para mim) isso deve funcionar:

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

Você também precisa cobrir todos os caminhos o blog refere-se a (css, imagens etc.), por exemplo.

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

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

Outras dicas

Outra maneira de fazer isso (mas sem envolver nginx) poderia ser com uma directiva DNS. Eu acho que a maioria dos serviços de DNS oferecem serviço para a frente URL.

Por exemplo, em hover.com, primeiro blog add com a directiva A para 64.99.80.30 na guia DNS, e em seguida, na guia Avançado, add blog para a frente a http://superfeedr.com/blog/

Em dnsimple.com, é mais simples, basta adicionar registro blog URL de transmitir a http://superfeedr.com/blog/

Estas frente, creio eu, também trabalho para URLs do tipo https://.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top