nginx 및 SSH를 사용하여 로컬 서비스를 노출하는 방법

2247 단어 sshnginxweb
동료 중 한 명이 실행 중인 로컬 앱을 외부 서비스에 노출해야 합니다. 단순한 제약 조건이 있었습니다. 서비스가 노출된 도메인 이름은 변경할 수 없으며(허용 목록에 추가되어야 하기 때문에) 회사 도메인의 하위 도메인이어야 합니다.

외부 IP 주소와 SSH 액세스가 실행되는 개발자를 위한 일부 가상 머신이 이미 있습니다. 나는 이 작업을 해결하기 위해 그것들을 사용할 것을 제안했습니다. 아래에서 적용할 수 있는 솔루션을 찾을 수 있습니다.

필요한 사항:
  • (GNU/)Linux 및 nginx가 있는 공개적으로 사용 가능한 서버(외부 IP)(이 게시물에서는 Ubuntu라고 가정함),
  • nginx 구성(sudo/root)을 변경할 수 있는 사용자 및 권한,
  • 해당 서버에 대한 SSH 액세스,
  • 예를 들어 - some.domain.tld - 서버 외부 IP를 가리키는 일부 도메인 이름.

  • 구성부터 시작하겠습니다 - /etc/nginx/sites-available/some.domain.tld 쓰기:

    server {
      listen 80;
      listen [::]:80;
    
      gzip on;
      server_name         some.domain.tld;
    
      location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_redirect off;
        proxy_set_header Host 127.0.0.1;
        proxy_set_header X-Original-Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
      }
    }
    
    


    이 구성은 some.domain.tld에 대한 요청을 서버의 로컬 포트 ​​8080으로 프록시합니다.

    활성화하려면 다음 명령을 사용하여 이 구성을 sites-enabled 디렉토리에 연결해야 합니다.

    ln -s /etc/nginx/sites-available/some.domain.tld /etc/nginx/sites-enabled/some.domain.tld
    
    


    그리고 nginx를 다시 시작합니다 - systemctl restart nginx . 이제 도메인some.domain.tld에서 방문자는 "잘못된 게이트웨이"라는 메시지가 있는 오류 페이지를 보게 됩니다. 모두 8080 포트에 아무것도 없기 때문입니다.

    이제 ssh 터널의 힘으로 원격 서버의 이 8080 포트가 로컬 시스템의 일부 포트를 가리킬 것입니다.

    로컬 서비스를 노출하려면 다음 명령을 사용할 수 있습니다.

    ssh -N -R $PORT_ON_SERVER:localhost:$LOCAL_PORT $LOGIN@$SERVER
    


    어디:
  • $PORT_ON_SERVER는 서버에서 요청을 전달하는 포트입니다.
  • $LOCAL_PORT - 무언가가 실행 중인 개발 시스템의 로컬 포트,
  • $LOGIN 및 $SERVER는 프록시를 실행하는 서버의 사용자 이름과 주소입니다.

  • 사용자 이름이 alice라고 가정하면 서버는 some.domain.tld 도메인에서 사용할 수 있고 로컬 서비스는 포트 4502에서 사용할 수 있습니다.

    ssh -N -R 8080:localhost:4502 [email protected]
    


    그게 다입니다. 브라우저에서 도메인을 열면 로컬 서비스가 표시됩니다. 인터넷상의 모든 사용자도 볼 수 있으므로 주의하세요! ;-)

    좋은 웹페이지 즐겨찾기