Apache "secuesta" una URL de Nginx

Apache "secuesta" una URL de Nginx

Tengo un servidor Ubuntu que ejecuta Apache, que aloja un sitio de Wordpress, al que se puede acceder mediante HTTP. También está instalado Nginx que aloja un sitio Django al que solo se puede acceder mediante HTTPS.

Ahora, lo que me gustaría lograr es eso example.come www.example.comiría a Wordpress alojado en Apache, mientras que api.example.comiría a Django alojado en Nginx. Esto funciona en este momento si solo intento acceder a la página principal en api.example.com, pero hay un problema extraño: cuando intento acceder api.example.com/admin(panel de administración de Django), la página se redirige a la página de inicio de sesión del administrador de Wordpress en www.example.com/wp-admin. ¿Porqué es eso?

Incluso intenté cambiar la URL del panel de administración de Django por otra cosa. Esto, a su vez, conduce a la página 404 de Wordpress ("¡Vaya, no se pudo encontrar esa página!").

Entonces, parece que Apache secuestra la parte de la URL después del dominio, aunque esté en un subdominio diferente. ¿Qué causa esto y cómo puedo solucionarlo?

El sitio Apache está configurado así:

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

Y el sitio Nginx está configurado así:

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, mi registro DNS está configurado así:

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

Gracias por tu ayuda de antemano. Déjeme saber si usted necesita más información.

Respuesta1

Probablemente esté ingresando estas URL en esta forma abreviada en su navegador web y no adivine correctamente lo que desea; probablemente recordó del historial que cuando escribe "api.example.com" debe usar HTTPS, pero para las nuevas URL "api.example.com/whatever" no tiene historial, por lo que prueba HTTP primero.

Si está utilizando la misma dirección IP para todo esto, independientemente del hecho de quehttps://api.example.com/* va al proceso escuchando en el puerto HTTPS (443),http://api.example.com/* seguirá yendo al proceso escuchando en el puerto HTTP (80).

Si desea evitar esto manteniendo la misma dirección IP, configure un host virtual api.example.com en el servidor solo HTTP que redirija cada solicitud que recibe a HTTPS.

Para dividirlos de la manera más difícil, agregue una nueva dirección IP para api.example.com al servidor y haga que los dos servidores HTTP(S) escuchen cada uno en su propia IP, y actualice el DNS para que api.example.com apunte a la nueva dirección IP.

información relacionada