
nginx 및 SSH를 사용하여 로컬 서비스를 노출하는 방법
동료 중 한 명이 로컬 실행 앱을 외부 서비스에 노출해야 합니다. 단순한 제약 조건이 있었습니다. 서비스가 노출된 도메인 이름은 변경할 수 없고(허용 목록에 있어야 하기 때문에) 회사 도메인의 하위 도메인이어야 합니다.
그들은 이미 외부 IP 주소와 SSH 액세스가 실행되는 개발자용 가상 머신을 가지고 있습니다. 나는 이 작업을 해결하기 위해 그것들을 사용할 것을 제안했습니다. 아래에서 적용할 수 있는 솔루션을 찾을 수 있습니다.
필요한 것:
(GNU/)Linux 및 nginx가 있는 공개적으로 사용 가능한 서버(외부 IP)(이 게시물에서는 Ubuntu라고 가정함), nginx 구성을 변경할 수 있는 사용자 및 권한(sudo/root), 해당 서버에 대한 SSH 액세스, 일부 도메인 이름, 예를 들어 -
구성부터 시작하겠습니다.
이 구성은
활성화하려면 다음 명령을 사용하여 이 구성을
nginx를 다시 시작하십시오 -
이제 ssh 터널의 힘으로 원격 서버의 이 8080 포트가 로컬 시스템의 일부 포트를 가리키도록 만들 것입니다.
로컬 서비스를 노출하려면 다음 명령을 사용할 수 있습니다.
어디:
$PORT_ON_SERVER는 서버에서 요청을 전달하는 포트입니다. $LOCAL_PORT - 무언가가 실행되고 있는 개발 머신의 로컬 포트, $LOGIN 및 $SERVER는 프록시를 실행하는 서버의 사용자 이름 및 주소입니다.
사용자 이름이
그게 전부입니다. 브라우저에서 도메인을 열면 로컬 서비스가 표시됩니다. 그리고 인터넷상의 누구나 볼 수 있으므로 조심하십시오! ;-)
그들은 이미 외부 IP 주소와 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 [email protected]$SERVER
어디:
사용자 이름이
alice
라고 가정하면 서버는 some.domain.tld
도메인에서 사용할 수 있고 로컬 서비스는 포트 4502에서 사용할 수 있습니다.ssh -N -R 8080:localhost:4502 [email protected]
그게 전부입니다. 브라우저에서 도메인을 열면 로컬 서비스가 표시됩니다. 그리고 인터넷상의 누구나 볼 수 있으므로 조심하십시오! ;-)