AWS 서버(우분투, 데비안 계열) 한 대에 NginX + SSL(https) + PHP + Node.js를 구동해서 일반적인 처리는 PHP를 이용하고 데이터 수집/분석은 Node.js를 이용하도록 구성했습니다. 여기서는 PHP 부분을 제외한 나머지를 해보겠습니다.

결과 미리보기 :: PHP와 Node.js에 https 적용됨
– PHP: https://wonhada.com
– Node.js: https://n.wonhada.com
 
 
 
1. Route53 등에서 DNS를 설정합니다.

2. FTP를 이용하거나 SSH 접속 후 ‘/etc/nginx/sites-available’에 서버 블락(Virtual hosts) 생성
– ‘n.wonhada.com’ 파일 생성
– 아래와 같이 수정

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
    listen 80;
    server_name n.wonhada.com;

    location / {
        proxy_pass https://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

– SSH 접속 후 터미널에서 ‘/etc/nginx/sites-enabled’로 이동
– 심볼릭 링크 생성

1
ln -s /etc/nginx/sites-available/n.wonhada.com ./n.wonhada.com

 
 
3. EC2 서버에 SSH 접속
– Mac: https://blog.wonhada.com/?p=3307
– Windows: https://blog.wonhada.com/?p=1525
 
 
4. SSL(https) 설정: Apache2, NginX 모두 동일한 방법으로 적용할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
cd /usr/local/sbin
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
./certbot-auto

# Crontab (자동 갱신)
crontab -e
0 */12 * * * /usr/local/sbin/certbot-auto renew --quiet --no-self-upgrade  # 문서 아래쪽에 입력

/etc/init.d/nginx restart

도메인이 추가될 경우

1
2
3
4
cd /usr/local/sbin
./certbot-auto

/etc/init.d/nginx restart

도메인을 타 사이트에 적용한 경우 ‘너무 많은 요청’이라서 에러가 날 수 있습니다. 그럴 때는 개별적으로 적용하면 됩니다.

1
2
3
4
5
6
cd /usr/local/sbin
./certbot-auto -d www.wonhada.com
./certbot-auto -d n.wonhada.com
...

/etc/init.d/nginx restart

 
 
5. Node.js 프로젝트 생성
– 프로젝트 폴더 생성 및 이동

1
2
mkdir /www/n_wonhada_com
cd /www/n_wonhada_com

– npm 준비

1
2
3
apt-get install -y nodejs-legacy
apt-get install -y npm
npm install --save https

– app.js 파일 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
var https = require('https');
var fs = require('fs');

var options = {
  key: fs.readFileSync('/etc/letsencrypt/live/{{생성된 폴더 확인}}/privkey.pem'),
  cert: fs.readFileSync('/etc/letsencrypt/live/{{생성된 폴더 확인}}/cert.pem'),
  ca: fs.readFileSync('/etc/letsencrypt/live/{{생성된 폴더 확인}}/chain.pem')
};

https.createServer(options, function (req, res) {
  res.writeHead(200);
  res.end("hello Wonhada's Node.js world");
}).listen(3000);

– PM2로 서버 구동 및 재부팅 후 자동 시작 설정

1
2
3
4
npm install -g pm2
pm2 start app.js --watch
pm2 save
pm2 startup