nginx를 사용하여 컨테이너로 요청 라우팅
이 게시물에서는 경로에 따라 요청을 다른 컨테이너로 라우팅하는 역 프록시로 nginx를 사용하는 방법을 살펴보겠습니다.
우리가 할 일
/app-first
경로를 사용하여 익스프레스 응용 프로그램을 만들고 컨테이너에서 시작합니다app-second
경로를 사용하여 익스프레스 응용 프로그램을 만들고 컨테이너에서 시작합니다디렉토리 생성
mkdir first-app
mkdir second-app
mkdir nginx-docker
첫 번째 애플리케이션 만들기
방금 아주 기본적인 nodeJ 응용 프로그램을 만들었습니다. app.js는 다음과 같습니다.
var express = require("express");
var app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.get("/app-first", function (req, res, next) {
res.send({ title: "Express", application: "Application 1" });
});
app.listen(3000, () => console.log("Running on http://localhost:3000"));
package.json은 다음과 같습니다.
{
"name": "express-with-env",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "~4.16.1"
}
}
이와 병행하여 Dockerfile은 다음과 같습니다.
FROM node:12-slim
WORKDIR /app
COPY ./package*.json ./
RUN npm install
COPY ./ ./
EXPOSE 3000
# Run the code
CMD [ "npm", "start" ]
두 번째 애플리케이션 만들기
두 번째 애플리케이션은 PORT 4000에서 실행되고 경로
/app-second
를 노출한다는 점을 제외하면 첫 번째 애플리케이션과 똑같습니다. app.js는 다음과 같습니다.var express = require("express");
var app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.get("/app-second", function (req, res, next) {
res.send({ title: "Express", application: "Application 2" });
});
app.listen(4000, () => console.log("Running on http://localhost:4000"));
Dockerfile은 다음과 같습니다.
FROM node:12-slim
WORKDIR /app
COPY ./package*.json ./
RUN npm install
COPY ./ ./
EXPOSE 4000
# Run the code
CMD [ "npm", "start" ]
packageJSON은 첫 번째 애플리케이션과 정확히 같습니다.
nginx 설정 생성
nginx-docker 디렉토리로 이동하여 nginx.conf 파일을 생성합니다.
upstream first-app {
server 172.17.0.1:3000 weight=1;
}
upstream second-app {
server 172.17.0.1:4000 weight=1;
}
server {
location /app-first {
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://first-app;
}
location /app-second {
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://second-app;
}
}
nginx용 dockerfile을 생성하면 다음과 같습니다.
FROM nginx
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d/default.conf
이미지 생성 및 컨테이너 실행
first-app
디렉토리로 이동하여 이미지를 빌드합니다.sudo docker build -t first-app .
두 번째 앱 디렉토리로 이동하여 이미지를 빌드합니다.
sudo docker build -t second-app .
지금 이미지 실행
sudo docker run -p 3000:3000 -d first-app
sudo docker run -p 4000:4000 -d second-app
이제 브라우저에서 http://localhost:3000/app-first을 열면 다음 JSON이 표시됩니다.
{
"title": "Express",
"application": "Application 1"
}
http://localhost:4000/app-second을 열면 다음을 얻을 수 있습니다.
{
"title": "Express",
"application": "Application 2"
}
응용 프로그램이 다른 포트에서 실행되고 있습니다. 목표는 동일한 포트에서 둘 다 노출하는 것입니다.
nginx-docker 디렉토리로 이동하여 nginx 이미지를 빌드하고 실행합니다.
sudo docker build -t nginx-proxy .
sudo docker run -p 8000:80 -d nginx-proxy
이제 다음과 같이 포트 8000에서 실행되는 두 응용 프로그램을 모두 볼 수 있습니다.
추신:
여기에 2개의 애플리케이션(첫 번째 앱과 두 번째 앱)에 대한 코드를 작성하고 세 번째(nginx)에 대한 구성을 작성했습니다. 우리는 그들의 도커 이미지를 만들고 그 이미지를 실행했습니다. 물론 이것들은 처리하기에는 너무 많은 명령입니다. , 우리는 이러한 이미지 구축 및 실행을 단순화하기 위해
docker-compose
를 살펴볼 것입니다.이 자습서의 코드는 https://github.com/tirthaguha/container-reverse-proxy에서 체크인됩니다.
Reference
이 문제에 관하여(nginx를 사용하여 컨테이너로 요청 라우팅), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tirthaguha/routing-requests-to-containers-with-nginx-49pn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)