웹사이트 검색

NGINX를 사용하여 HTTP(S), SSH 및 MySQL/MariaDB용 역방향 프록시 실행 가이드


이 페이지에서

  1. 시작하기\n
  2. 호스트 서버 준비\n
    1. 리버스 프록시 서버의 호스트 이름 설정.\n
    2. NGINX 설치

    1. 역방향 프록시 디렉토리 구조 구축\n
    2. 웹 서버 리버스 프록시(http) 구성\n
    3. SSH, MySQL/MariaDB 리버스 프록시 구성(스트림)\n
    4. 서비스별 구성 사용
    5. 호스트별 구성 파일 사용\n

    1. 역방향 프록시 구성을 활성화합니다.\n
    2. 트래픽을 위해 서버 열기\n

    1. 동일한 호스트의 NGINX 및 Apache2\n
    2. Apache2 수신 포트 변경

    이 가이드는 단일 공개 IP 주소 뒤에서 여러 물리적 서버, 가상 머신 또는 둘의 조합을 실행할 수 있도록 NGINX의 설치 및 구성을 안내합니다. 가상 머신에서 여러 웹 서버를 실행하고 로컬에서 관리하도록 선택하거나 각 호스트에 대한 SSH와 같은 원격 액세스 도구를 사용해야 할 수 있습니다. 예를 들어 정상 업무 시간 외에 로컬 액세스를 사용할 수 없는 경우입니다. 이 가이드는 두 시나리오를 모두 용이하게 할 수 있습니다.

    여기에 표시된 구성은 사용 가능한 공용 IP 주소에 제한이 있는 홈 랩 또는 소기업 네트워크에 가장 적합합니다. 호스팅 서비스에서 여러 대의 서버 또는 가상 머신을 임대한 경우 이와 같은 구성을 실행할 이유가 거의 없습니다. 어쨌든 각 서버 또는 호스트에 대한 공용 IP 주소가 할당됩니다.

    NGINX를 설치하고 서버가 HTTP(S), SSH, FTP 및 MySQL/MariaDB에 대한 리버스 프록시 역할을 할 수 있도록 구성하는 방법을 보여드리겠습니다. NGINX 호스트 서버의 경우 로컬 액세스, Ubuntu 18.04의 새로 설치 및 Ubuntu 서버 설치 단계 중에 SSH 서버 설치를 선택했다고 가정합니다.

    이 구성은 저에게 잘 작동하지만 귀하에게 적합하다고 보장할 수 없음을 이해해 주십시오. 물론 잘못된 부분을 발견하면 수정할 수 있도록 알려주세요. 시작하기 전에 전체 가이드를 읽으십시오. 두 가지 관리 방법을 보여주는 한 부분(스트림)이 있습니다.

    시작하기

    이 가이드에서는 다음 호스트 이름과 IP 주소를 사용합니다.

    rproxy.example.com  192.168.1.1
    web1.example.com    192.168.1.2
    db1.exmple.com      192.168.1.3

    설치 중에 만든 표준 Ubuntu 18.04 서버 설치를 위해 서버에 루트가 아닌 사용자 계정이 있어야 합니다. 해당 사용자로 NGINX를 설치할 서버에 로그인하여 시작합니다. 로컬 서버일 가능성이 높으므로 SSH 서버를 구성하기 위해 처음으로 서버에 직접 로그인해야 할 수도 있습니다. 물론 이렇게 하려면 서버에 연결된 키보드와 모니터가 필요합니다.

    참고: 나와 같이 브라우저 인터페이스가 포함된 VMWare와 같은 가상화 소프트웨어를 사용하는 경우 해당 시스템 내에 콘솔이 있어야 하며 "직접" 액세스 없이 이 단계를 수행할 수 있습니다. 해당 콘솔 내에서 이 전체 구성을 수행할 수 있지만 복사 및 붙여넣기와 같은 일부 기능은 브라우저에 따라 다를 수 있지만 브라우저 기반 콘솔에서는 작동하지 않는 것으로 나타났습니다. 당신은 할 수 있습니다.

    호스트 서버 준비

    콘솔 셸에서(브라우저 또는 직접 연결됨)

    sudo nano /etc/ssh/sshd_config

    행의 주석을 제거하십시오. Port는 포트 번호를 23456, ListenAddress와 같은 것으로 변경하고 0.0.0.0으로 변경하십시오. nano에 익숙하지 않은 사용자를 위해 CTRL + X를 누르고 y를 입력한 다음 Enter 키를 누릅니다. 이렇게 하면 파일이 저장되고 닫힙니다. 파일이 변경되지 않은 경우 CTRL + x를 누르면 저장하라는 메시지가 표시되지 않고 파일이 닫힙니다. 명령 프롬프트로 돌아갑니다.

    이 파일의 나머지 설정은 이미 상당히 긴 가이드이며 SSH 키 사용 및 루트 SSH 허용과 같은 여러 항목에 대해 변경해야 하는 설정을 보여주는 많은 가이드가 있기 때문에 이 파일 내의 나머지 설정을 파고들지 않겠습니다. 로그인. HowtoForge 웹 사이트에서 바로 여기 가이드를 찾을 수도 있습니다.

    변경이 완료되면 변경 사항이 적용되도록 ssh 서버를 다시 시작해야 합니다. 현재 로그인은 이 재시작의 영향을 받지 않습니다.

    systemctl restart ssh

    로컬 네트워크 내의 다른 컴퓨터에 있는 터미널에서 SSH를 사용하여 로그인할 수 있는지 확인하십시오.

    ssh  -p23456

    SSH를 사용하여 성공적으로 로그인하고 콘솔/서버에서 로그아웃한 후 이 터미널을 열어 두십시오. 이 가이드의 나머지 부분에서는 더 이상 사용할 필요가 없습니다.

    이 시점부터 터미널에서 루트 수준 명령을 실행하게 됩니다. 다음 명령을 사용하면 후속 명령 앞에 sudo를 추가할 필요가 없습니다.

    sudo -s

    Apt 패키지 데이터베이스를 업데이트하고 Ubuntu를 업그레이드하여 최신 패키지가 설치되어 있는지 확인하십시오.

    apt update && apt -y upgrade

    업그레이드 중에 새 커널이 설치되었다는 보고가 있으면 apt가 업그레이드를 완료한 후 재부팅하여 완전히 업데이트된 시스템에서 작업하고 있는지 확인해야 합니다.

    리버스 프록시 서버의 호스트 이름을 설정합니다.

    hostnamectl set-hostname rproxy.example.com

    가상 서버를 실행 중인 경우 여기에 설정된 호스트 이름을 유지하기 위해 수정해야 하는 cloud.cfg라는 파일이 있을 수 있습니다. 다음 명령은 콘텐츠가 있는 파일이나 빈 페이지를 표시합니다. 빈 페이지가 표시되면 CTRL + x를 누르고 수행할 작업이 없으므로 이 단계를 건너뛸 수 있습니다.

    nano /etc/cloud/cloud.cfg

    호스트 이름 보존 행을 true로 변경하고 파일을 닫거나 저장합니다.

    If your system is currently local only you will need to show this server where your other servers/virtual hosts are.
    nano /etc/hosts

    호스트 파일은 변경 후 다음과 같을 것입니다. IP 주소 및 호스트는 자체 인프라와 일치해야 합니다.

    127.0.0.1 localhost
    127.0.1.1  rproxy.example.com
    192.168.1.2    web1.example.com
    192.168.1.3    db1.example.com
    
    # The following lines are desirable for IPv6 capable hosts
    ::1     ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    

    NGINX 설치

    apt install -y nginx

    설치 후 NGINX 버전을 확인해야 합니다. SSH 및 MySQL/MariaDB에 대한 역방향 프록시를 허용하려면 버전 1.9 이상이 있어야 합니다.

    nginx -v

    보시다시피 Ubuntu 18.04(2019년 10월 10일)의 기본값인 NGINX 버전 1.14가 설치되어 있습니다.

    nginx version: nginx/1.14.0 (Ubuntu)

    리버스 프록시로 작동하도록 NGINX 준비

    이 구성을 사용하면 리버스 프록시 호스트 서버에서 직접 웹 사이트를 제공하지 않을 것입니다. /etc/nginx/ 아래에 새 디렉토리 구조를 생성합니다. 이렇게 하면 나중에 이러한 변경 사항을 되돌리거나 실제로 이 호스트에서 직접 웹 사이트를 제공하기로 결정한 경우 기본 NGINX 구성이 유지됩니다. 이러한 리버스 프록시 구성과 함께 기본 구성을 실행할 수 있지만 Apache2가 동일한 서버에 있는 경우 수신 대기할 대체 포트가 필요하며 이 Apache2 인스턴스가 제공하는 웹 사이트를 리버스 프록시해야 합니다.

    리버스 프록시 디렉토리 구조 구축

    cd /etc/nginx && mkdir rproxy && cd rproxy && mkdir http http/available http/enabled stream stream/available stream/enabled

    이제 구조가 준비되었으므로 구성 파일 생성을 진행할 수 있습니다. 저는 nano를 사용하지만 편하신 편집기를 사용하시면 됩니다. Nano는 저장 시 파일을 생성/업데이트합니다.

    Before you proceed, open an empty document on your computer or get a pen and paper to note down the ports you configure.

    웹 서버 리버스 프록시(http) 구성

    그에 따라 조정되는 웹 사이트에 대한 http 구성 파일을 만듭니다.

    nano http/available/example.com.conf

    그에 따라 nano를 조정하여 서버 블록을 터미널에서 열린 페이지에 복사합니다.

    # Note down ports 80 and 443
    
    server {
        server_name example.com www.example.com;
        listen 80;
        set $upstream 192.168.1.2;
        location / {
             proxy_pass_header Authorization;
             proxy_pass http://$upstream;
             proxy_set_header Host $host;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_http_version 1.1;
             proxy_set_header Connection "";
             proxy_buffering off;
             client_max_body_size 0;
             proxy_read_timeout 10000s;
             proxy_redirect off;
         }
    }

    SSH, MySQL/MariaDB 리버스 프록시 구성(스트림)

    진행하기 전에 호스트별 또는 서비스별로 활용할 항목을 결정하십시오. 호스트별로 단일 호스트 설정을 빠르게 변경하는 데 유용할 수 있는 각 호스트에 대한 구성을 생성합니다. 서비스별로 SSH, MySQL/MariaDB 및 FTP 각각에 대한 파일에 모든 서버에 대한 서비스 포트가 있습니다.

    서비스별 구성 사용

    SSH 구성을 추가합니다.

    nano stream/available/ssh.conf
    # Note down the listen ports
    
    upstream web1-ssh {
      server 192.168.1.2:22;
    }
    
    server {
      listen 22002;
      proxy_pass web1-ssh;
    }
    
    upstream db1-ssh {
      server 192.168.1.3:22;
    }
    
    server {
      listen 22003;
      proxy_pass db1-ssh;
    }
    
    # Add as many upstream and server block pairs as you will need for your remote accessed SSH servers.
    

    MySQL/MariaDB 구성을 추가합니다.

    nano stream/available/db.conf
    # Note down the listen ports
    
    upsteam db1-mysql {
      server 192.168.1.3:3306;
    }
    
    server {
      listen 33063;
      proxy_pass db1-mysql;
    }
    
    # Add as many upstream/server block pairs as you will need for your remote accessed MySQL/MariaDB servers to this file.
    

    이제 FTP 역방향 프록시 구성을 만듭니다.

    nano stream/available/ftp.conf
    upstream web1-ftp {
      server 192.168.1.3:21
    }
    
    server {
      listen 21002;
      proxy_pass web1-ftp;
    }
    
    # Add as many upstream/server block pairs as you will need for your remote accessed FTP servers.
    

    호스트별 구성 파일 사용

    nano /etc/nginx/rproxy/stream/available/web1.example.com.conf
    # Note down the listen ports
    
    upstream web1-ssh {
      server 192.168.1.3:22;
    }
    
    server {
      listen 22002;
      proxy_pass web-ssh;
    }
    

    db1.example.com에 대한 호스트 파일 생성

    nano /etc/nginx/rproxy/stream/available/db1.example.com.conf
    # Note down the listen ports
    
    upsteam db1-mysql {
      server 192.168.1.3:3306;
    }
    
    server {
      listen 33063;
      proxy_pass db1-mysql;
    }
    
    upstream db1-ssh {
      server 192.168.1.3:22;
    }
    
    server {
      listen 22003;
      proxy_pass db1-ssh;
    }
    

    보시다시피 약간 비정통적입니다. 비표준 방식으로 공용 포트를 사용하고 있으며 필요한 포트를 선택한 다음 NGINX로 지정합니다. 원격으로 액세스하려는 각 서버의 각 서비스에 대해 다른 포트를 사용하고 있다는 점을 제외하고는 정상입니다. 즉, 예를 들어 SSH를 사용하면 각 SSH 지원 호스트 22 222 2222 22222에 대해 서로 다른 포트 번호가 4개의 서로 다른 서버 또는 가상 머신에서 포트 22를 가리킵니다.

    이것은 NGINX가 웹사이트에 대한 프록시를 역방향으로 전환하는 경우가 아닙니다. NGINX에 웹사이트에 대해 정의된 서버 구성이 있는 한 포트 80 및 443만 전달되어 올바르게 작동합니다.

    이 시점에서 아마도 HTTP 단계를 사용하고 스트림 단계를 건너뛰고 대신 여러 서비스에 대한 여러 포트를 적절한 서버/IP 주소로 전달할 수 있다는 것을 깨달았을 것입니다. 실제로 이것은 할 수 있습니다. 그러나 ssh, mysql 및 ftp에 대해 각 서버의 기본 포트를 변경해야 할 수 있으므로 서버 수가 증가함에 따라 또 다른 복잡성 계층이 추가되고 유지 관리가 어려워집니다. 이 구성은 이미 복잡하지만 원하는 경우 수행할 수 있습니다.

    앞에서 설명한 방식으로 이러한 서비스에 역방향 프록시를 사용하면 이러한 구성을 변경할 수 있는 단일 위치를 제공하여 복잡성이 크게 줄어들고 전체 인프라에서 포트를 변경할 필요가 없습니다.

    이 구성에 대한 추가 보너스로 인프라의 다른 서버는 원하는 경우 로컬 인터페이스와 기본 포트에서만 수신 대기하면 됩니다. 로컬에서 관리하는 경우 로컬 IP 주소와 기본 서비스 포트를 사용하여 필요한 서비스에 액세스할 수 있으므로 올바른 포트를 기억하기 위해 메모를 참조할 필요가 없으며 IP 주소와 로그인 자격 증명만 알면 됩니다.

    모든 것을 하나로 모으기

    NGINX 역방향 프록시 구성을 사용하려면 기본 구성 파일을 일부 편집해야 합니다. http 블록의 현재 포함 줄을 주석 처리합니다(NGINX에서도 웹사이트를 직접 제공하지 않는 경우).

    cd /etc/nginx && nano nginx.conf

    아래 강조 표시된 부분을 참고하여 무엇을 변경해야 하는지 결정하십시오.

    user www-data;
    worker_processes auto;
    pid /run/nginx.pid;
    include /etc/nginx/modules-enabled/*.conf;
    
    events {
            worker_connections 768;
            # multi_accept on;
    }
    
    http {
    
            ##
            # Basic Settings
            ##
    
            sendfile on;
            tcp_nopush on;
            tcp_nodelay on;
            keepalive_timeout 65;
            types_hash_max_size 2048;
            # server_tokens off;
    
            # server_names_hash_bucket_size 64;
            # server_name_in_redirect off;
    
            include /etc/nginx/mime.types;
            default_type application/octet-stream;
    
            ##
            # SSL Settings
            ##
    
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
            ssl_prefer_server_ciphers on;
    
            ##
            # Logging Settings
            ##
    
            access_log /var/log/nginx/access.log;
            error_log /var/log/nginx/error.log;
    
            ##
            # Gzip Settings
            ##
    
            gzip on;
    
            gzip on;
    
            # gzip_vary on;
            # gzip_proxied any;
            # gzip_comp_level 6;
            # gzip_buffers 16 8k;
            # gzip_http_version 1.1;
            # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascri$
    
            ##
            # Virtual Host Configs
            ##
    
            include /etc/nginx/conf.d/*.conf;
    #       include /etc/nginx/sites-enabled/*;
    
            # Reverse proxy http configuration files.
            include /etc/nginx/rproxy/http/enabled/*.conf;
    }
    
    stream {
    
        # Reverse proxy stream configuration files.
        include /etc/nginx/rproxy/streams/enabled/*.conf;
    }
    
    
    #mail {
    #       # See sample authentication script at:
    #       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
    # 
    #       # auth_http localhost/auth.php;
    #       # pop3_capabilities "TOP" "USER";
    #       # imap_capabilities "IMAP4rev1" "UIDPLUS";
    # 
    #       server {
    #               listen     localhost:110;
    #               protocol   pop3;
    #               proxy      on;
    #       }
    # 
    #       server {
    #               listen     localhost:143;
    #               protocol   imap;
    #               proxy      on;
    #       }
    #}
        

    리버스 프록시 구성을 활성화합니다.

    먼저 모든 http 구성을 활성화합니다.

    ln -s /etc/nginx/rproxy/http/available/*.conf /etc/nginx/rproxy/http/enabled

    모든 스트림 구성 활성화

    ln -s /etc/nginx/rproxy/stream/available/*.conf /etc/nginx/rproxy/stream/enabled

    역방향 프록시로서의 NGINX 구성이 올바른지 테스트를 수행하십시오.

    nginx -T

    출력에는 이전에 만든 모든 사용자 지정 구성과 함께 성공 메시지가 표시되어야 합니다.

    역방향 프록시 구성을 실행하려면 NGINX를 다시 시작하십시오.

    systemctl restart nginx

    NGINX가 구성된 모든 포트에서 수신 대기하는지 확인하십시오. 모든 포트가 결과에 표시되는지 메모와 대조하여 확인하십시오.

    netstat -tulpn | grep nginx

    출력은 다음과 같아야 합니다.

    tcp        0      0 0.0.0.0:22           0.0.0.0:*               LISTEN      4964/nginx: master  
    tcp        0      0 0.0.0.0:22002           0.0.0.0:*               LISTEN      4964/nginx: master  
    tcp        0      0 0.0.0.0:22003           0.0.0.0:*               LISTEN      4964/nginx: master
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      4964/nginx: master  
    tcp        0      0 0.0.0.0:33062           0.0.0.0:*               LISTEN      4964/nginx: master  
    tcp        0      0 0.0.0.0:33063           0.0.0.0:*               LISTEN      4964/nginx: master  
    tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      4964/nginx: master  
        

    트래픽을 위해 서버 열기

    이제 NGINX가 듣고 트래픽을 허용하려는 모든 연결에 대해 역방향 프록시로 작동할 준비가 되었으므로 다음 단계를 진행하는 동안 일시적으로 UFW를 비활성화합니다. 제대로 작동하지 않는 경우 문제 해결이 더 쉬워집니다.

    ufw disable

    포워딩 포트

    유감스럽게도 여기에서는 안내를 드릴 수 없습니다. 이를 수행하는 방법을 알아보려면 라우터 설명서를 보거나 온라인에서 라우터를 검색해야 합니다. 그러나 요약하면 NGINX가 수신 대기 중인 각 포트를 NGINX 호스트 시스템으로 전달하려고 합니다. 내 특정 라우터에서 사용자 지정 "응용 프로그램"을 설정할 수 있습니다.

    이를 통해 할당되지 않은 포트 또는 포트 범위를 사용자 지정 애플리케이션에 할당할 수 있으며, 그런 다음 LAN IP 주소 또는 호스트 이름으로 식별되는 특정 연결된 장치에 할당됩니다. 어쨌든 이는 모든 포트를 삭제하고 다시 할당하지 않고도 해당 사용자 지정 응용 프로그램에 할당된 모든 포트를 내 네트워크의 호스트로 전환할 수 있음을 의미합니다. 이것은 훌륭한 옵션이며 이를 지원하는 라우터를 선택하는 것이 좋습니다.

    라우터 방화벽의 이 작지만 믿을 수 없을 정도로 유용한 기능은 활성 역방향 프록시의 구성을 미러링하는 두 번째 역방향 프록시를 설치하라는 메시지를 표시했습니다. 전원을 끄고 부팅할 수 있으며 검색 3분 이내에 포트를 전환할 수 있습니다. 재해 복구를 위한 처리 시간을 맞추기 위해 고군분투하는 전문 호스팅 회사가 있다고 상상합니다. 이 모든 것은 홈 네트워크에서 여러 서버를 실행하려는 욕구 때문에 발생했습니다.

    리버스 프록시 서버용 무료 Letsencrypt SSL

    Certbot 및 Certbot NGINX 플러그인을 설치합니다. 이 단계는 인증서에 나열된 모든 (하위)도메인 이름에 대해 작동하는 DNS가 있고 HTTP를 통해 도메인에 연결할 수 있을 때까지 인증서를 만들 수 없기 때문에 여기에서 수행됩니다. 포트를 리버스 프록시로 전달한 후 이 작업을 완료하면 구성에 대한 추가 테스트 역할도 합니다. 도메인에 연결할 수 없어 인증서가 실패하면 출력에 의미 있는 오류 알림이 표시됩니다.

    최신 certbot 버전을 받고 있는지 확인하려면 설치하기 전에 certbot 저장소를 추가하십시오. 우분투 리포지토리는 종종 소프트웨어 버전보다 한 버전 이상이며 구할 수 있다면 모든 소프트웨어의 최신 버전을 원합니다.

    add-apt-repository ppa:certbot/certbot
    apt install -y certbot python-certbot-plugin

    certbot 및 certbot nginx 플러그인이 설치되어 있으면 이제 NGINX용 인증서를 생성할 수 있습니다.

    SSL을 제공하려는 모든 도메인 및 하위 도메인에 대해 이 명령을 반복해야 합니다. certbot을 처음 실행하는 경우 이용 약관에 동의해야 합니다.

    certbot --nginx -d example.com -d www.example.com

    업스트림 호스트에 SSL을 사용하여 작동하는 서버 설정이 있는 경우 여기에서 선택한 옵션이 호스트 서버의 옵션과 일치하는지 확인해야 합니다. 특히 업스트림 서버에서 https로 리디렉션하는 경우 여기에서도 그렇게 해야 합니다. .

    명확히 하기 위해 example.com은 다른 서버에 존재하며 ISPConfig 내에서 http를 https로 리디렉션하도록 선택했으므로 여기서는 그렇게 하도록 선택합니다. 구성 파일이 업데이트되고 이제 Certbot이 자체 구성을 추가한 것을 볼 수 있습니다.

    작동하는지 확인합니다.

    이제 트래픽이 역방향 프록시로 흐를 수 있으므로 모든 것이 의도한 대로 작동하는지 확인해야 합니다. 웹사이트가 제대로 작동하는지 확인하고 SSH, FTP 및 MySQL/MariaDB 연결 및 작업을 수행합니다. 모든 것이 제대로 작동하고 있다고 만족하면 UFW를 활성화하고 각 포트를 허용하는 규칙을 추가합니다.

    리버스 프록시 서버 보안

    ufw enable

    어디에서나 80 및 443을 허용하고 싶을 것입니다. SSH, FTP 및 MySQL/MariaDB를 IP 주소 또는 호스트 이름으로 제한할 수 있습니다. 규칙에 주석을 달아 포트를 할당한 서비스/서버를 빠르게 식별할 수 있습니다.

    ufw allow 80
    ufw allow 443
    ufw allow from 1.2.3.4 to any port 22002 comment 'web1 SSH'
    ufw allow from somehost.domain.com to any port 33061 comment 'db1 MySQL/MariaDB'

    ufw reload
    ufw status numbered

    Apache2 업데이트

    역방향 프록시 뒤에서 실행할 때 Apache2 로그 파일은 웹사이트 방문자의 IP 주소 대신 역방향 프록시 서버의 IP 주소를 기록합니다. Apache2에 대한 일반 IP 주소 로깅을 복원하기 위해 모듈을 사용하여 이 동작을 수정할 수 있습니다.

    Apache2 인스턴스가 설치된 각 웹 서버에서 다음 단계를 완료하십시오.

    sudo apt install -y libapache2-mod-rpaf

    이제 Apache2가 올바른 IP 주소를 기록하도록 하려면 rpaf.conf 파일을 약간 수정합니다. Ubuntu 18.04는 이미 파일을 생성했으며 강조 표시된 IP 주소를 NGINX Reverse 프록시 호스트의 IP 주소로 변경하기만 하면 됩니다.

    nano /etc/apache2/mods-available/rpaf.conf
    <ifmodule rpaf_module="">
        RPAFenable On
    
        # When enabled, take the incoming X-Host header and
        # update the virtualhost settings accordingly:
        RPAFsethostname On
    
        # Define which IP's are your frontend proxies that sends
        # the correct X-Forwarded-For headers:
        RPAFproxy_ips 127.0.0.1 ::1
    
        # Change the header name to parse from the default
        # X-Forwarded-For to something of your choice:
    #   RPAFheader X-Real-IP
    </ifmodule>

    최종 참고 사항

    동일한 호스트의 NGINX 및 Apache2

    두 서비스는 서버 또는 가상 머신 내의 동일한 포트에서 수신 대기할 수 없습니다. NGINX가 Apache2 웹 서버와 동일한 서버 또는 가상 머신에 설치된 경우 Apache2가 청취하는 포트를 변경해야 합니다. NGINX는 HTTP 및 HTTPS의 기본 포트이므로 HTTP(S) 기능을 수행하려면 포트 80 및 443이 필요합니다.

    이 가이드의 http 섹션을 다시 참조하고 네트워크의 다른 서버와 동일한 방식으로 이 Apache2 인스턴스에서 제공하는 웹 사이트에 대한 역방향 프록시 구성을 추가합니다.

    Apache2 청취 포트 변경

    ISPConfig와 같은 서버 관리 시스템이 설치되어 있는 경우 이 시스템은 Apache2 vhost 파일을 처리하므로 Apache2가 수신 대기하는 포트를 변경하는 방법을 조사해야 합니다. ISPConfig 포럼을 검색한 다음 필요에 따라 조정하십시오. 그렇지 않으면 이러한 변경을 수행하는 방법에 대해 Ubuntu 포럼 또는 Apache2 웹 사이트를 확인해야 합니다.

    Note: Apache2 ports do not need to be altered when it is the only web server installed on server or virtual machine.