Apache는 Nginx의 URL을 "하이재킹"합니다.

Apache는 Nginx의 URL을 "하이재킹"합니다.

HTTP를 사용하여 액세스할 수 있는 Wordpress 사이트를 호스팅하는 Apache를 실행하는 Ubuntu 서버가 있습니다. HTTPS를 통해서만 액세스할 수 있는 Django 사이트를 호스팅하는 Nginx도 설치되어 있습니다.

이제 제가 달성하고 싶은 것은 Apache가 호스팅하는 Wordpress로 이동하고 example.comNginx 가 호스팅하는 Django로 이동하는 것입니다. 에 있는 메인 페이지에 액세스하려고 하면 지금은 작동 하지만 이상한 점이 하나 있습니다. (Django 관리자 패널)에 액세스하려고 하면 페이지가 에 있는 Wordpress 관리자 로그인 페이지로 리디렉션됩니다 . 왜 그런 겁니까?www.example.comapi.example.comapi.example.comapi.example.com/adminwww.example.com/wp-admin

나는 Django 관리자 패널 URL을 다른 것으로 변경하려고 시도했습니다. 이는 차례로 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 주소를 유지하면서 이를 방지하려면 수신하는 모든 요청을 HTTPS로 리디렉션하는 HTTP 전용 서버에 api.example.com 가상 호스트를 설정하세요.

실제로 어려운 방법으로 분할하려면 api.example.com에 대한 새 IP 주소를 서버에 추가하고 두 HTTP(S) 서버가 각각 자신의 IP에서 수신하도록 한 다음 api.example.com이 다음을 가리키도록 DNS를 업데이트합니다. 새로운 IP 주소.

관련 정보