O Apache "intercepta" um URL do Nginx

1

Eu tenho um servidor Ubuntu executando o Apache, que hospeda um site Wordpress, que é acessível usando HTTP. Há também o Nginx instalado que hospeda um site do Django que só é acessível usando HTTPS.

Agora, o que eu gostaria de realizar é que example.com e www.example.com iriam para o Wordpress hospedado pelo Apache, enquanto api.example.com iria para o Django hospedado pelo Nginx. Isso funciona no momento, se eu tentar acessar a página principal em api.example.com , mas há uma captura estranha: Quando tento acessar api.example.com/admin (painel de administração do Django), a página é redirecionada para a página de login do administrador do Wordpress em www.example.com/wp-admin . Por que isso?

Eu até tentei mudar o URL do painel de administração do Django para outra coisa. Isso por sua vez leva à página Wordpress 404 ("Opa, essa página não foi encontrada!").

Assim, parece que a parte da URL após o domínio é invadida pelo Apache, mesmo que esteja no subdomínio diferente. O que causa isso e como posso corrigi-lo?

O site do Apache é configurado assim:

<VirtualHost *:80>
    ServerName www.example.com
    DocumentRoot /var/www/wp

    <Directory /var/www/wp>
        Options Indexes FollowSymlinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>

E o site Nginx está configurado da seguinte forma:

upstream app_server {
    server unix:/tmp/gunicorn.sock fail_timeout=0;
}

server {
    listen 443 ssl;
    charset utf-8;
    server_name api.example.com;

    ssl on;
    # Here be a lot of SSL configs

    location / {
        try_files $uri @proxy_to_app;
    }

    location @proxy_to_app {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_pass http://app_server;
    }

    location /static {
        root /var/www/django/static;
    }
}

Por fim, meu registro DNS está configurado assim:

A example.com 1.2.3.4
CNAME api example.com
CNAME www example.com

Obrigado pela sua ajuda antecipadamente. Deixe-me saber se você precisar de mais informações.

    
por manabreak 15.06.2015 / 16:41

1 resposta

0

Você provavelmente está inserindo esses URLs neste formato abreviado no seu navegador da Web e não está adivinhando o que deseja corretamente. Ele provavelmente lembrou da história que quando você digita "api.example.com", ele deve usar HTTPS, mas para novas URLs "api.example.com/whatever" ele não tem histórico, então ele tenta HTTP primeiro.

Se você estiver usando o mesmo endereço IP para tudo isso, independentemente do fato de que o link * está indo para o processo escutando na porta HTTPS (443), o link * ainda irá para o processo escutando na porta HTTP (80).

Se você quiser evitar isso mantendo o mesmo endereço IP, configure um host virtual api.example.com no servidor somente HTTP que redireciona todas as solicitações recebidas para HTTPS.

Para dividi-los da maneira mais difícil, adicione um novo endereço IP para api.example.com ao servidor e faça os dois servidores HTTP (S) ouvirem cada um em seu próprio IP e atualizar o DNS para api.example. com aponta para o novo endereço IP.

    
por 15.06.2015 / 19:00