분류 Nodejs

Node.js 및 Express를 사용하여 HTTP 서버 작성

컨텐츠 정보

  • 조회 343 (작성일 )

본문

Node.js 방식으로 SSL 설정 및 HTTP 트래픽 리디렉션


SSL 인증서는 도메인 이름이나 클라우드 호스팅만큼 저렴하지는 않지만 훨씬 저렴합니다. SSL 인증서는 이전에 결제 (또는 전자 상거래) 전용 요구 사항으로 여겨졌지만 Google은 보안 사이트가 순위를 올릴 것이라고 발표 한 이후에 반드시 변경되었습니다.


자, 생각이 바뀌었고 SSL 인증서는 그 어느 때보다 저렴하며 사이트에 인증서가 설치되어 있으면 Google에서 부스트를 제공하지만 어떻게 설치합니까? 하나를 생성하는 방법? HTTP 트래픽은 어떻습니까?


이 기사는 Node.js를 실행하는 Linux 시스템에서 SSL 설치 방법을 안내합니다. Linux 터미널 명령과 Node.js에 익숙하다고 가정합니다.


https://contextneutral.com/story/creating-an-https-server-with-nodejs-and-express 


빠른 설치부터 시작합니다. 다음 명령은 express를 설치하고 node_modules 폴더에 저장합니다.

npm i express --save

완료되면 app.js라는 새 .js 파일을 생성합니다 (이름에 관계없이). 이 파일에는 몇 줄을 추가하겠습니다. 여기서 '요구'기능은 추가 사용을 위해 파일에 express 모듈을 포함 시켜 우리를 도와줍니다. express 인스턴스는 app로 생성됩니다. fs도 마찬가지입니다. fs (파일 시스템)은 Node.js가 디렉토리에서 파일을 읽고 쓰는 API입니다. fs를 사용하여 SSL 인증서 파일을 읽습니다.

var express = require('express');
var app = express();
var fs = require('fs');


이제 가장 중요한 부분입니다. SSL 인증서를 받으십시오. 표준 SSL 인증서에는 두 가지 중요한 파일 인 기본 인증서와 중간 인증서가 함께 제공됩니다. SSL을 얻으려면 유효성 검사를 위해 서버에서 CSR을 생성해야 합니다. 또한 서버와의 HTTPS 연결을 유지하려면 키 (개인 키)를 생성해야 합니다. Linux 환경에서 다음 명령을 실행하면 원하는 mydomain.csr 및 private.key 파일이 생성됩니다.


openssl req -new -newkey rsa:2048 -nodes -out mydomain.csr -keyout private.key

.csr을 사용하여 인증서를 생성하고 생성 된 인증서 파일 (.crt) 및 private.key 파일을 루트의 디렉토리 (예 : 암호화)에 저장하십시오.


이제이 파일들을 읽고 HTTPS 서버를 시작해야 합니다. 다음은 버퍼를 읽고 각 변수에 저장합니다. readFile이 아니라 readFileSync 함수로 파일을 읽습니다. 후자는 파일을 읽는 동안 io를 차단하는 경향이 있으며 연결을 시도하기 전에 모든 인증서 파일을 읽습니다.


var key = fs.readFileSync('encryption/private.key');

var cert = fs.readFileSync( 'encryption/primary.crt' );

var ca = fs.readFileSync( 'encryption/intermediate.crt' );


완료되면 다음과 같은 인증서 파일을 사용하여 옵션 변수를 만듭니다.


var options = {

key: key,

cert: cert,

ca: ca

};


443 포트 (https의 기본 포트)의 모든 연결을 수신하는 옵션과 앱 (이전에 만든 Express 인스턴스, 기억합니까?)을 사용하여 서버를 만듭니다.


var https = require('https');

https.createServer(options, app).listen(443);


파일을 저장하고 실행

node app.js

서버를 가리 키기 위해 사용 중인 도메인에 대해 모든 것이 올바르게 따르고 인증서가 올바르게 생성 된 경우 주소 표시 줄 왼쪽에 녹색 https 표시 줄이 나타납니다. 그러나 캐치가 있습니다. 아직 HTTP 트래픽이 HTTPS로 전달되는지 확인하지 않았습니다. 


HTTPS와 함께 실행되는 다른 서버를 만들고 리디렉션 합니다.


var http = require('http');

http.createServer(app).listen(80);


이렇게 하면 포트 80 (HTTP의 기본 포트)에서 수신 대기하는 HTTP 서버가 생성되고 도메인이 HTTP 및 HTTPS 웹 프로토콜 모두에서 실행됩니다. HTTPS를 강제하기 위해 요청이 TLS 연결을 통해 이루어 졌는지 확인합니다 (HTTPs 프로토콜 사용). 그것이 안전하다면, 우리는 요청을 전달합니다. 그렇지 않으면 우리는 클라이언트에게 다시 응답을 보내서 클라이언트는 다시 요청하지만 이번에는 안전하게 요청합니다.


app.use(function(reqresnext) {
if (req.secure) {
next();
else {
res.redirect('https://' + req.headers.host + req.url);
}
});



app.use (...)를 사용하여 리디렉션 미들웨어를 바인딩 합니다. 리디렉션이 발생할 특정 경로를 계획하려는 경우 app.all (...)을 사용할 수도 있습니다.


그게 다야 Express는 이제 우리가 HTTP 트래픽을 전달하고 이러한 요청을 미들웨어를 사용하여 HTTP로 변환 할 것임을 알게 됩니다.


당신은 여기에서 완전한 요점을 찾을 수 있습니다.