Apache “sequestra” uma URL do Nginx

Apache “sequestra” uma URL do Nginx

Eu tenho um servidor Ubuntu rodando Apache, que hospeda um site Wordpress, que pode ser acessado usando HTTP. Há também o Nginx instalado que hospeda um site Django que só pode ser acessado usando HTTPS.

Agora, o que eu gostaria de realizar é isso example.come www.example.comiria para o Wordpress hospedado pelo Apache, enquanto api.example.comiria para o Django hospedado pelo Nginx. Isso funciona no momento se eu apenas tentar acessar a página principal em api.example.com, mas há um problema estranho: 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 é que?

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

Portanto, parece que a parte da URL após o domínio ser sequestrada pelo Apache, mesmo que esteja em um subdomínio diferente. O que causa isso e como posso corrigi-lo?

O site Apache está 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 assim:

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

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

Responder1

Você provavelmente está inserindo esses URLs nesta forma abreviada em seu navegador e ele não está adivinhando o que deseja corretamente; provavelmente lembrou do histórico que quando você digita "api.example.com" ele deve usar HTTPS, mas para novos URLs "api.example.com/whatever" ele não tem histórico, então tenta primeiro o HTTP.

Se você estiver usando o mesmo endereço IP para tudo isso, independentemente do fato dehttps://api.example.com/* vai para o processo escutando na porta HTTPS (443),http://api.example.com/* ainda irá para o processo escutando na porta HTTP (80).

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

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

informação relacionada