Node.js 에서 80 or 443 포트 사용하기

duo2208·2024년 1월 11일
0

Solution

목록 보기
3/3
post-thumbnail

Node.js 에서 80 or 443 포트 사용


낮은 포트번호는 이미 OS단에서 예약이 되어있기 때문에 80포트를 노드에게 허락해주지 않는다. 노드에서 80포트를 사용하고 싶은데 Error: listen EACCES: permission denied 0.0.0.0:80 에러가 발생할 때는 포트포워딩 명령어를 사용해준다.

# http 사용
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 5354
# https 사용
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 5355

등록된 정책 조회 명령어

$ sudo iptables -t nat -L PREROUTING --line-numbers

$ sudo iptables -t nat -L

등록된 정책 삭제 명령어

$ sudo iptables -t nat -D PREROUTING 4

등록된 정책 저장 명령어

서버 재기동 후, http 혹은 https 적용이 안되는 경우는 iptables 정책이 저장되어 있지 않아서 일 수 있습니다. iptables 설정 내용을 저장해주세요.

$ sudo sh -c "iptables-save /etc/iptables.rules"


Cerbot - 무료 SSL 인증서


1. 설치 및 인증서 생성

2. Node.js 설정 예시

  • server.js
import config from 'config';
import http from 'http';
import https from 'https'
import { app } from './components/app.js';
import { Logger } from './lib/logger/logger.js';
import { promises as fs } from 'fs';

const logger = Logger(import.meta.url);

logger.info(`PORT: ${config.get('app.port')}`);
logger.info(`NODE_ENV: ${process.env.NODE_ENV}`);
logger.info(`NODE_CONFIG_ENV: ${config.util.getEnv('NODE_CONFIG_ENV')}`);
logger.info(`Elasticsearch Host: ${config.get('elasticsearch.nodes')}`)

const port = config.get('app.port');
const https_port = config.get('app.ports');

try {
    http.createServer(app).listen(port);
    logger.info(`HTTP server listening on port: ${port}`);
} catch (err) {
    logger.error('Error setting up http servers:', err);
}

// certbot
try {
    const key = await fs.readFile(config.get('app.https_certbot.key'))
    const cert = await fs.readFile(config.get('app.https_certbot.cert'))
    const ca = await fs.readFile(config.get('app.https_certbot.ca'))
    const options = {
       key: key,
       cert: cert,
       ca: ca
    };

    https.createServer(options, app).listen(https_port);
    logger.info(`HTTPS server listening on port: ${https_port}`);
} catch (err) {
    logger.error('Error setting up https servers:', err);

}

  • config.js
"app": {
    "host": "http://yourhost.com/",
    "port": 5354,
    "ports": 5355,
    "https" : {
      "key": "/yourpath/ssl/server.key",
      "cert": "/yourpath/ssl/server.crt"
    },
    "https_certbot" : {
      "key": "/yourpath/ssl_certbot/privkey.pem",
      "cert": "/yourpath//ssl_certbot/cert.pem",
      "ca": "/yourpath/ssl_certbot/chain.pem"
    },
...
}

0개의 댓글