[IIS] ARR 리버스 프록시 환경에서 워드프레스 무한 리디렉션 및 127.0.0.1 튕김 완벽 해결 가이드 > Info Tech

본문 바로가기
사이트 내 전체검색

Info Tech

▒ Info Tech ▒ 네트워크/보안/해킹 ▒ 하드웨어 ▒ 소프트웨어
Information Technology Group
▒ Info Tech ▒ 네트워크/보안/해킹 ▒ 하드웨어 ▒ 소프트웨어

Webserver [IIS] ARR 리버스 프록시 환경에서 워드프레스 무한 리디렉션 및 127.0.0.1 튕김 완벽 해결 가이드

페이지 정보

profile_image
작성자 최고관리자
댓글 3건 조회 15회 작성일 26-08-19 01:06

본문

 

[IIS] ARR 리버스 프록시 환경에서 워드프레스 무한 리디렉션 및 127.0.0.1 튕김 완벽 해결 가이드

안녕하세요! 오늘은 Windows 11 IIS 환경에서 ARR(Application Request Routing) 리버스 프록시를 구축할 때, 자식 VM(Windows Server / Ubuntu)과 연동하면서 발생하는 고질적인 네트워크 통신 오류 해결법을 정리해 보았습니다.

특히 외부 HTTPS 요청을 받아 내부 VM으로 토스하는 과정에서 마주치는 ERR_TOO_MANY_REDIRECTS (무한 리디렉션)오류와, 워드프레스 관리자단(/wp-admin) 접근 시 127.0.0.1로 주소가 튕기며 연결이 거부되는 현상을 완벽하게 뿌리 뽑는 최종 마스터 매뉴얼입니다.

1. 호스트 PC (Windows IIS ARR 전역 설정)

리버스 프록시가 외부의 원본 도메인 신호와 HTTPS 암호화 대역을 변조하지 않고 자식 VM들에게 관통시켜 주도록 호스트 전역 설정을 고정해야 합니다.

① Application Request Routing 옵션 조정

  1. IIS 관리자 실행 ➔최상위 [서버 이름]클릭 ➔중앙 [Application Request Routing Cache]더블클릭.
  2. 우측 작업 패널에서 [Server Settings]클릭 후 아래와 같이 옵션을 변경합니다.
    • [✓] Keep alive➔체크 활성화 (커넥션 유지)
    • [ ] Reverse rewrite host in response headers➔체크 해제 (★중요: 워드프레스 주소를 변조하여 무한 루프를 유발하는 주범이므로 반드시 해제합니다.)
  3. 우측 상단 [적용(Apply)]클릭.

② 구성 편집기 (원본 도메인 유지 설정)

호스트가 외부 도메인을 자식 VM에 넘길 때 원래 주소 이름을 그대로 보존하게 만드는 필수 설정입니다.

  1. IIS 관리자 최상위 [서버 이름]클릭 ➔중앙 [구성 편집기(Configuration Editor)]더블클릭.
  2. 상단 섹션(Section) 드롭다운 경로 이동: system.webServer/proxy
  3. 목록에서 preserveHostHeader항목을 찾아 값을 True로 변경 후 우측 상단 [적용(Apply)]클릭.

③ 필수 마스터 서버 변수 4가지 등록

각 개별 사이트의 web.config가 환경 변수를 주입할 수 있도록 시스템 계정에 정식 허가를 내주는 작업입니다. (미등록 시 500 내부 서버 에러 발생)

  1. IIS 관리자 최상위 [서버 이름]클릭 ➔중앙 [URL 재작성(URL Rewrite)]더블클릭.
  2. 우측 작업 패널에서 [서버 변수 보기(View Server Variables...)]클릭.
  3. 우측 [추가(Add...)]버튼을 눌러 아래 4가지 변수를 정확히 등록합니다.
    • HTTP_X_FORWARDED_PROTO
    • HTTP_HTTPS
    • HTTP_X_FORWARDED_HOST
    • HTTP_HOST

2. 호스트 PC (개별 웹사이트 프록시 규칙 세팅)

보안 통신(https) 상태에서 각 자식 VM 폴더로 안전하게 패킷을 중계해 주는 전역 web.config 가이드입니다.

윈도우 VM 프록시용 (web.config)

외부 표준 HTTPS(443) 요청을 받아 가상 매핑된 윈도우 VM 중계 포트(예시 포트: 5443)로 밀어주는 규칙입니다.

xml

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

    <system.webServer>

        <rewrite>

            <rules>

                <rule name="Proxy to Windows VM" stopProcessing="true">

                    <match url="(.*)" />

                    <!-- 가상의 내부 중계 포트로 토스합니다 -->

                    <action type="Rewrite" url="https://127.0.0.1:5443/{R:1}" />

                    <serverVariables>

                        <set name="HTTP_X_FORWARDED_PROTO" value="https" />

                        <set name="HTTP_HTTPS" value="on" />

                        <set name="HTTP_X_FORWARDED_HOST" value="{HTTP_HOST}" />

                        <set name="HTTP_HOST" value="{HTTP_HOST}" />

                    </serverVariables>

                </rule>

            </rules>

        </rewrite>

    </system.webServer>

</configuration>

코드를 사용할 때는 주의가 필요합니다.

  • IIS 바인딩 권장값: https / 443 / ://example.com (예시 도메인) / [✓] SNI 허용 필수 체크

우분투 VM 프록시용 (web.config)

호스트의 내부 포트 단계를 거치지 않고, 가상 네트워크망을 직통으로 관통하여 우분투 가상머신의 사설 IP 주소로 다이렉트 릴레이하는 효율적인 규칙입니다.

xml

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

    <system.webServer>

        <rewrite>

            <rules>

                <rule name="Proxy HTTPS 443" stopProcessing="true">

                    <match url="(.*)" />

                    <!-- 192.168.0.200은 가상의 우분투 내부 사설 IP 예시입니다. 아파치 기본 80포트로 통신합니다. -->

                    <action type="Rewrite" url="http://192.168.0.200/{R:1}" />

                    <serverVariables>

                        <set name="HTTP_X_FORWARDED_PROTO" value="https" />

                        <set name="HTTP_HTTPS" value="on" />

                        <set name="HTTP_X_FORWARDED_HOST" value="{HTTP_HOST}" />

                        <set name="HTTP_HOST" value="{HTTP_HOST}" />

                    </serverVariables>

                </rule>

            </rules>

        </rewrite>

    </system.webServer>

</configuration>

코드를 사용할 때는 주의가 필요합니다.

  • IIS 바인딩 권장값: https / 443 / ://example.com (예시 도메인) / [✓] SNI 허용 필수 체크

3. 자식 VM 1 (Windows Server + 워드프레스 설정)

프록시 환경에서 워드프레스가 주소를 오인하여 무한 리디렉션을 돌리거나 본인 주소를 찾지 못해 127.0.0.1로 튕기는 백엔드 버그를 완벽하게 잠재운 세팅입니다.

① wp-config.php (★반드시 최상단 <?php 바로 아랫줄에 선언)

워드프레스가 구동되기 직전, 호스트 IIS ARR이 밀어 넣어준 원본 도메인 정보와 프로토콜 상태를 가로채어 세션 환경 변수에 완벽히 덮어쓰는 구조입니다.

php

<?php

// 1. 리버스 프록시 HTTPS 신호 감지 및 무한 리디렉션 루프 완벽 차단

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {

    $_SERVER['HTTPS'] = 'on';

}

if (isset($_SERVER['HTTP_HTTPS']) && $_SERVER['HTTP_HTTPS'] === 'on') {

    $_SERVER['HTTPS'] = 'on';

}

 

// 2. [★가장 중요] 관리자단(/wp-admin) 모바일 접근 시 127.0.0.1 튕김 오류 완벽 차단

// 호스트 프록시 누락 버그를 방지하기 위해 외부 접속용 도메인 주소를 문자열로 강제 주입합니다.

// example.com 자리에 본인의 실제 도메인을 포트 없이 적어주세요.

$_SERVER['HTTP_HOST'] = 'example.com';

$_SERVER['SERVER_NAME'] = 'example.com';

 

// 3. 외부 접속용 가상 도메인 주소 포트 번호 없이 고정 (실제 적용 시 본인 도메인 기재)

define('WP_HOME', 'https://example.com');

define('WP_SITEURL', 'https://example.com');

코드를 사용할 때는 주의가 필요합니다.

② 워드프레스 폴더 내부 web.config

자식 웹 서버단 자체에서 일어나는 불필요한 HTTPS 강제 리디렉션은 프록시와 꼬여 에러를 유발하므로 삭제하고, 오직 순수한 고유주소(Pretty URL) 인식 규칙만 보존합니다.

xml

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

    <system.webServer>

        <rewrite>

            <rules>

                <rule name="WordPress Rule" stopProcessing="true">

                    <match url=".*" />

                    <conditions logicalGrouping="MatchAll">

                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />

                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />

                    </conditions>

                    <action type="Rewrite" url="index.php" />

                </rule>

            </rules>

        </rewrite>

    </system.webServer>

</configuration>

코드를 사용할 때는 주의가 필요합니다.

4. 자식 VM 2 (Ubuntu + Apache 웹서버 설정)

호스트의 포트 간섭 없이 프록시 패킷이 내부 망으로 포워딩될 때, 아파치가 프로토콜 정보를 수신하여 스스로 동기화하도록 유기적으로 설계된 매칭 구조입니다.

① VMware NAT 포트 포워딩 설정 (Virtual Network Editor)

  • Host Port: 9443 (가상의 포트 예시)
  • Virtual Machine IP Address: 192.168.0.200 (우분투 가상 사설 IP 예시)
  • Virtual Machine Port: 80
  • Tip: 호스트의 외부 포트 요청이 가상 스위치단에서 충돌을 일으키지 않고 아파치 웹서버가 실제 리슨 중인 표준 80번 포트로 매끄럽게 변환되도록 숫자를 조율하는 것이 핵심 노하우입니다.

② 우분투 Apache 가상호스트 파일 설정 (/etc/apache2/sites-available/proxy-ubuntu.conf)

          sudo nano /etc/apache2/sites-available/proxy-ubuntu.conf

 

apache

<VirtualHost *:80>

    # 가상의 외부 접속 도메인 주소를 입력합니다 (포트 제외)

    ServerName ://example.com

   

    DocumentRoot /var/www/html

 

    # [프록시 암호화 레이어 동기화] 호스트 IIS가 보낸 헤더 정보를 분석하여

    # 아파치 세션 내에 HTTPS 프로토콜 정보를 강제로 덮어씌워 줍니다.

    SetEnvIf NoCase X-Forwarded-Host "(.*)" HTTP_HOST=$1

    SetEnvIf NoCase X-Forwarded-Proto "https" HTTPS=on

 

    <Directory /var/www/html>

        Options Indexes FollowSymLinks

        AllowOverride All   # 고유주소 변경을 위한 .htaccess 제어 권한 전면 허용

        Require all granted

    </Directory>

 

    ErrorLog ${APACHE_LOG_DIR}/proxy_error.log

    CustomLog ${APACHE_LOG_DIR}/proxy_access.log combined

</VirtualHost>

코드를 사용할 때는 주의가 필요합니다.

 

※ Apache 가상 호스트 파일설정은 당연히 아파치가 설치 되어 있어야 합니다. 만약 설치가 되어 있지 않다면 아래 명령어로

우분투 아파치 패키지 설치를 합니다.

우분투 터미널 창에 아래 명령어들을 한 줄씩 입력하세요.

bash

# 1. 우분투 패키지 목록 최신화

sudo apt update

# 2. 아파치2 웹서버 설치 (Y/N 물어보면 Y 입력)

sudo apt install apache2 -y

코드를 사용할 때는 주의가 필요합니다.

설치가 정상적으로 끝나고 나면 이제 아파치 설정 폴더(etc/apache2/...)들이 시스템 내부에 자동으로 생성됩니다.

 

③ 설정 활성화 및 아파치 재시작

작성한 설정을 활성화하고 아파치 서버를 새로고침합니다.

bash

# 기본 기본값 설정 해제 (선택사항, 충돌 방지)

sudo a2dissite 000-default.conf

 

# 새로 만든 프록시용 가상호스트 활성화

sudo a2ensite proxy-ubuntu.conf

 

# 아파치 재시작

sudo systemctl restart apache2

코드를 사용할 때는 주의가 필요합니다.

 

5. 마치며 & 요약 요령

모든 설정을 마치신 후에는 반드시 호스트 PC 명령 프롬프트(CMD)를 관리자 권한으로 열어 iisreset을 실행해 주어야 프록시 캐시가 완전히 갱신됩니다.

또한 인프라를 복잡하게 다중으로 엮을 때는 하나의 파일에 여러 규칙을 합치는 것보다, 위 매뉴얼처럼 각 프록시용 가상 디렉토리마다 web.config 파일을 독립적으로 격리 분리하여 운영하는 것이 디버깅과 유지보수 측면에서 압도적으로 유리합니다.

동일한 네트워크 아키텍처를 구상 중이신 분들에게 유용한 가이드가 되었기를 바랍니다.

[도움말]본 매뉴얼의 IP 주소(192.168.0.200), 도메인(example.com), 포트 번호(5443, 9443)는 독자분들의 이해를 돕기 위한 보안 가공용 가상 예시이므로, 실제 로컬 환경에 적용하실 때는 본인의 네트워크 서브넷 대역과 할당받은 도메인 명의에 맞게 수정하여 적용하셔야 정상 작동합니다.

 

댓글목록

profile_image

최고관리자님의 댓글

최고관리자 작성일

• 현재의 완벽한 성공 상태 통째로 백업해 두기 (호스트 PC CMD 관리자 권한 실행):

cmd
%windir%\system32\inetsrv\appcmd add backup "Proxy_Perfect_Backup_Success"
코드를 사용할 때는 주의가 필요합니다.

(나중에 포맷을 하거나 설정이 심하게 깨졌을 때 %windir%\system32\inetsrv\config_rollback.cmd /restore "Proxy_Perfect_Backup_Success" 명령 한 줄로 이 완벽한 상태로 1초 만에 복구할 수 있습니다.)

profile_image

최고관리자님의 댓글

최고관리자 작성일

<URL Rewrite>
https://www.iis.net/downloads/microsoft/url-rewrite

<Application Request Routing> 설치하려면 위의 URL Rewrite를 먼저 설치후 설치해야합니다!
https://www.iis.net/downloads/microsoft/application-request-routing

profile_image

최고관리자님의 댓글

최고관리자 작성일

우분투 내부 방화벽(UFW)이 80 포트를 막고 있는지 확인
우분투는 기본 보안 설정으로 인해 외부(호스트 PC)에서 들어오는 80번 포트 요청을 자체 방화벽으로 차단하고 있을 수 있습니다.
우분투 터미널에 아래 명령어를 입력하여 방화벽에서 아파치 포트를 허용해 줍니다.
bash
# 아파치 기본 포트(80) 통신 허용
sudo ufw allow 80/tcp

# 방화벽 설정 적용을 위해 방화벽 재시작
sudo ufw reload
코드를 사용할 때는 주의가 필요합니다.
________________________________________

우분투 내부 Nginx(엔진엑스) 충돌 가능성 점검
우분투에 Nginx가 설치되어 있고 현재 켜져 있다면, 아파치와 동일한 80 포트를 두고 서로 점유하려다가 아파치가 정상 작동하지 않을 수 있습니다.
우분투 터미널에서 아래 명령어를 쳐서 Nginx 상태를 확인하고 확실하게 정리해 줍니다.
bash
# Nginx가 켜져 있는지 상태 확인 (Active: active (running)이 뜨면 켜진 상태)
sudo systemctl status nginx

# 만약 켜져 있다면, 아파치와 충돌하지 않도록 Nginx 서비스 중지 및 자동 시작 끄기
sudo systemctl stop nginx
sudo systemctl disable nginx
코드를 사용할 때는 주의가 필요합니다.
• 결론: Nginx 서비스를 수동으로 꺼주시면 아파치와 충돌할 가능성은 완벽히 사라집니다.
________________________________________

우분투 아파치가 '진짜 80 포트'로 켜져 있는지 최종 확인
우분투 내부에 방화벽(UFW)은 열어두셨지만, 정작 아파치 웹서버가 80 포트를 제대로 움켜쥐고 대기 중인지 명령어로 직접 눈으로 확인해야 합니다.
우분투 터미널을 열고 아래 명령어를 입력합니다.
bash
sudo ss -tulpn | grep apache2
코드를 사용할 때는 주의가 필요합니다.
• 정상 결과 예시: tcp LISTEN 0 511 *:80 *:* users:(("apache2",pid=... 형태로 *:80 번이 명확하게 리슨(LISTEN) 상태로 떠 있어야 합니다.
• 만약 이 명령어를 쳤는데 아무런 글자도 나오지 않거나 *:5443 같은 엉뚱한 포트가 찍힌다면, 우분투 아파치가 정상 구동되지 않은 것이므로 sudo systemctl restart apache2를 다시 해보셔야 합니다.
________________________________________


사이트 정보

회사명 : 회사명 / 대표 : 대표자명
주소 : OO도 OO시 OO구 OO동 123-45
사업자 등록번호 : 123-45-67890
전화 : 02-123-4567 팩스 : 02-123-4568
통신판매업신고번호 : 제 OO구 - 123호
개인정보관리책임자 : 정보책임자명

접속자집계

오늘
14
어제
2
최대
28
전체
656
Copyright © HeyWEB. All rights reserved.