Apache «перехватывает» URL у Nginx

Apache «перехватывает» URL у Nginx

У меня есть сервер Ubuntu с Apache, на котором размещен сайт Wordpress, доступный по HTTP. Также установлен Nginx, на котором размещен сайт Django, доступный только по HTTPS.

Теперь, что я хотел бы сделать, так это example.comперейти www.example.comна Wordpress, размещенный Apache, в то время как api.example.comперейду на Django, размещенный Nginx. Это работает в данный момент, если я просто пытаюсь получить доступ к главной странице в api.example.com, но есть одна странная загвоздка: когда я пытаюсь получить доступ api.example.com/admin(административная панель Django), страница перенаправляется на страницу входа администратора Wordpress в www.example.com/wp-admin. Почему так?

Я даже пытался изменить URL-адрес панели администратора Django на что-то другое. Это в свою очередь приводит к странице Wordpress 404 ("Упс, эта страница не найдена!").

Итак, похоже, что часть URL после домена перехватывается Apache, хотя она находится на другом поддомене. Что является причиной этого и как это исправить?

Сайт Apache настроен следующим образом:

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

А сайт Nginx настроен следующим образом:

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

Наконец, моя DNS-запись настроена следующим образом:

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

Спасибо за помощь заранее. Дайте мне знать, если вам понадобится больше информации.

решение1

Вероятно, вы вводите эти URL-адреса в сокращенной форме в своем веб-браузере, и он не угадывает, что именно вы хотите; вероятно, из истории он помнит, что когда вы вводите «api.example.com», он должен использовать HTTPS, но для новых URL-адресов «api.example.com/whatever» у него нет истории, поэтому он сначала пытается использовать HTTP.

Если вы используете один и тот же IP-адрес для всего этого, независимо от того, чтоhttps://api.example.com/* переходит к процессу, прослушивающему порт HTTPS (443),http://api.example.com/* по-прежнему будет переходить к процессу, прослушивающему порт HTTP (80).

Если вы хотите избежать этого, сохранив тот же IP-адрес, настройте виртуальный хост api.example.com на сервере, работающем только по HTTP, который перенаправляет все получаемые запросы на HTTPS.

Чтобы на самом деле разделить их сложным способом, добавьте новый IP-адрес для api.example.com на сервер и заставьте два HTTP(S)-сервера прослушивать каждый свой IP-адрес, а также обновите DNS так, чтобы api.example.com указывал на новый IP-адрес.

Связанный контент