Nginx 리버스 에이전트

Nginx 리버스 에이전트

2022-06-03 last update

5 minutes reading Nginx

역방향 에이전트는 무엇입니까?


프록시 서버는 인터넷과 대화하는 서버입니다.예를 들어 만약에 대학의 인터넷이 막혔지만 도메인 이름https://www.facebook.com/이 여전히 접근할 수 있다면 후자를 방문할 수 있다. 후자는 페이스북 서버에 대한 모든 요청을 페이스북에 전송하고 페이스북의 답장을 통해 브라우저로 보낼 수 있다.

요컨대, 프록시는 한 개 이상의 클라이언트가 인터넷에 있는 모든 서버에 요청을 보내는 것을 대표한다.리버스 에이전트의 동작 방식은 유사합니다.
리버스 에이전트는 하나 이상의 서버가 모든 클라이언트로부터 요청을 받는 것을 의미합니다.따라서 몇 개의 서버가 ww1을 호스팅하는 경우인스턴스com 및 ww2.인스턴스com 역방향 프록시 서버는 이 두 서버가 요청을 받아들이는 것을 대표하여 이 요청을 각자의 단점으로 전송하고 그곳에서 응답을 생성하여 역방향 프록시를 전송하여 클라이언트에게 전송할 수 있다.

설치


Nginx 구성 파일을 조정하고 리버스 프록시 서버를 만들기 전에나는 당신이 당신의 디자인을 실현하려고 할 때 그렇게 혼란스럽지 않도록 변함없이 나의 설정을 설정하고 싶습니다.
Digital Ocean 플랫폼을 사용하여 3개의 VP를 시작했습니다.모두 동일한 네트워크에 있으며 각각 고유의 전용 IP가 있으며 VPS 하나에만 정적 공용 IP가 있습니다.
VM/호스트 이름
전용 IP
공용 IP
역할
역산화
10.135.123.187
159.89.108.14
역방향 프록시, Nginx 실행
노드-1
10.135.123.183
해당되지 않음
첫 번째 웹 사이트 실행
노드-2
10.135.123.186
해당되지 않음
두 번째 웹 사이트 실행
실행 중인 두 사이트의 도메인 이름은 ww1입니다.란비스로.com 및 ww2.란비스로.com과 그들의 두 개의 A 기록은 모두 Reverseproxy의 공공 IP, 즉 159.89.108.14를 가리킨다
개인 IP 배후의 사상은 세 개의 가상 기기가 이 개인 IP를 통해 서로 통신할 수 있지만 원격 사용자는 자신의 공공 IP에서만 역방향 프록시 가상 기기에 접근할 수 있다는 것이다.이 점을 기억하는 것이 매우 중요하다.예를 들어, 개인 IP를 사용하여 ssh를 통해 VM에 연결할 수 없습니다.
그 밖에 Node-1과 Node-2는 모두 아파치 웹 서버를 가지고 있어 두 개의 다른 웹 페이지에 서비스를 제공한다.이것은 우리가 둘을 구분하는 데 도움이 될 것이다.
첫 번째 사이트에'사이트 1 유효!!!'라고 쓰여있어요.

마찬가지로 두 번째 웹 사이트는 다음과 같이 표시됩니다.

웹 사이트가 다를 수 있지만, 이 설정을 기점으로 복사하려면 Node-1과 Node-2에서 aptinstallapache2를 실행하십시오.그리고 파일/var/www/html/index를 편집합니다.html, 이렇게 하면 웹 서버에서 당신이 하고 싶은 말을 할 수 있습니다.
reverseproxy 가상 머신은 여전히 닿지 않았습니다.모든 가상 시스템은 Ubuntu 18.04 LTS를 실행하지만 원하는 다른 운영 체제를 자유롭게 사용할 수 있습니다.Docker 컨테이너를 사용하여 이를 시뮬레이션할 수도 있습니다.사용자 정의 Docker 브리지 네트워크를 만들고 컨테이너를 생성하여 각 컨테이너에 전용 IP를 할당하고 모든 HTTP/HTTPS 프록시를 하나의 컨테이너로 전달할 수 있습니다. 이것이 바로 우리의 Nginx 리버스 프록시 용기입니다.
지금까지 줄곧 괜찮았다.

Nginx 기본 구성


Nginx를 Reverseproxy 서버에 설치하는 것부터 시작하겠습니다. 저는 Ubuntu를 사용하기 때문에 apt는 제 패키지 관리자입니다.
$ sudo apt install nginx

Debian 기반 릴리스를 사용하는 경우 기본 구성을 삭제합니다.


Nginx 구성에 대해 더 자세히 논의하기 전에 주의하십시오.모든 각종 프로필은/etc/nginx에 저장됩니다.nginx를 포함합니다.conf 파일, 주 프로필입니다.이 파일의 내용 (http 블록 내) 을 보면 다음 두 줄을 알 수 있습니다.
...
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
...
두 번째 줄은 Nginx가 설정한 사이트 enabled 디렉터리의 모든 파일을 포함합니다.이것은 대부분의 Debian 기반 릴리스의 표준 방법입니다.예를 들어 기본 "Nginx 사용을 환영합니다"웹 페이지는/etc/Nginx/sites available/default 위치에 default라는 대응 파일이 있습니다. 이 파일의 기호 링크는/etc/Nginx/sites enabled/를 가리키지만, 이 기본 웹 페이지는 필요하지 않기 때문에 안전하게 기호 링크를 삭제할 수 있습니다.사이트의 사용 가능한 디렉토리에서 원래 버전을 찾을 수 있습니다.
$ rm /etc/nginx/sites-enabled/default
단, 우리가 역방향 프록시 설정을 만들 때, 우리는 conf.d 디렉터리에서 진행할 것이다. (파일 이름의 확장자는.conf) 이것은 일반적인 것이며, 모든 버전에 적용되며, 데비안이나 Ubuntu뿐만 아니라.

다른 릴리스의 기본 구성 삭제 중


Debian 기반 릴리스를 사용하지 않으면/etc/nginx/conf.d/default에서 기본 시작 페이지 설정을 찾을 수 있습니다.conf 나중에 사용하려면 파일을 안전한 곳으로 이동하십시오. 기호 링크가 아니기 때문입니다.
$ mv /etc/nginx/conf.d/default.conf ~/default.conf
때때로/etc/nginx/default에서 그것을 찾을 수 있습니다.왜냐하면 사람들은 간단한 기준에 합의할 수 없기 때문이다!따라서/etc/nginx 디렉터리에서 발굴을 해야만 이 점을 알 수 있습니다.

리버스 프록시 블록 추가


앞에서 말한 바와 같이, 내가 이 대리 뒤에서 위탁 관리하는 두 개의 다른 도메인 이름은
  • 란빌스론.com(사이트 1), IP 10.135.123.183
  • 란빌스론.com(사이트 2), IP 10.135.123.186
  • 따라서/etc/nginx/conf.d/폴더에서 모든 사이트에 파일을 만듭니다.그래서 우리는 조직을 잘 조직했다.
    $ touch /etc/nginx/conf.d/ww1.conf
    $ touch /etc/nginx/conf.d/ww2.conf
    파일이 하나만 있으면 필요에 따라 이름을 지정할 수 있습니다.conf는 이름 끝에 있습니다.
    첫 번째 파일 ww1에서conf 다음 행을 추가합니다.
    server {
    listen 80;
    listen [::]:80;
    
    server_name ww1.ranvirslog.com;
    
    location / {
    proxy_pass http://10.135.123.183/;
    proxy_buffering off;
    proxy_set_header X-Real-IP $remote_addr;
    }
    }
    listen 문구는 Nginx가 포트 80에서 IPv4와 IPv6의 상황을 정탐하는 것을 알려 줍니다.그런 다음 server\u 이름이 ww1인지 확인합니다.란비스로.com 그리고 위치 블록을 시작하고 요청 에이전트를http://10.135.123.183/버퍼를 닫을 때.또한 proxy\uset\uheader...행은 클라이언트의 원시 IP가 프록시 서버로 전송되는 것을 확보합니다.유일한 방문자의 수 등을 계산하려면 도움이 됩니다. 그렇지 않으면 프록시 서버에 방문자-Nginx 서버가 하나밖에 없습니다.
    buffering 옵션과 set\uheader 옵션은 완전히 선택할 수 있습니다. 에이전트를 최대한 투명하게 하기 위해 추가된 것입니다.제2차 세계대전.란비스로.com 사이트에서 저는/etc/nginx/conf.d/ww2에 다음 설정을 추가했습니다.형태:
    server {
    listen 80;
    listen [::]:80;
    
    server_name ww2.ranvirslog.com;
    
    location / {
    proxy_pass http://10.135.123.186/;
    proxy_buffering off;
    proxy_set_header X-Real-IP $remote_addr;
    }
    }
    두 파일을 저장하고 전체 구성이 유효한지 테스트합니다.
    $ sudo nginx -t
    오류가 있으면 위의 명령의 출력을 사용하여 오류를 찾고 수정할 수 있습니다.서버 재부팅:
    $ service nginx restart
    브라우저의 다른 도메인 이름에 액세스하고 결과를 확인하여 해당 도메인의 유효성을 테스트할 수 있습니다.

    결론


    사람마다 용례가 다르다.위에서 언급한 설정은 약간의 조정이 있어야만 당신의 장면에 적용될 수 있습니다.같은 호스트에서 여러 서버를 실행하고 있을 수도 있지만, 다른 포트에서, 이 경우, proxy\upass...행은http://localhost:portNumber/그 가치로
    이러한 세부 사항은 어느 정도에 당신의 용례에 달려 있습니다.추가 옵션 및 조정 가능한 방법에 대한 자세한 내용은 https://exampleproxy.com 을 참조하십시오.