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.com
e www.example.com
iria para o Wordpress hospedado pelo Apache, enquanto api.example.com
iria 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.