우분투 웹서버 만들기 3

우분투 웹서버 만들기

이제 우분투 웹서버 만들기 세번째...⚙️

오늘은 Let's Encrypt를 활용해 인증서를 발급 받은 뒤 https를 적용해 보자.

Let's Encrypt는 https 보급을 위해 무료로 ssl인증서를 발급해 주는 비영리 프로젝트라고 한다.

Let's Encrypt의 인증서 발급 방식은 3가지가 있다.

1 Webroot: 배포한 웹서버 내에 인증서를 위치 시키고 nginx에서 읽어오게 하는 방식인듯 하다.

2 webserver: Nginx 나 Apach 와 같은 웹서버의 옵션을 설정해 SSL 인증을 실시

3 StandAlone: 가장 간편, 빠르고 안전하지만 서비스를 중단해야 함.

4 DNS: DNS의 TXT레코드를 이용해 인증받는 방식

필자는 3번 standalone의 방식을 택했다.

서비스를 중단해야 하지만, 서비스의 중단에 별다른 타격이 없고 간편하게 적용 가능해서 선택 하였음.

version
ubuntu 20.04.6 LTS
nginx 1.18.0
certbot 0.40.0

1. certbot && Let's Encrypt 설치

$ sudo apt-get update
$ sudo apt-get install letsencrypt -y
//* certbot이 같이 설치 됨

2. 인증서 생성

//* nginx 서비스 중지
//* service 명령 혹은 systemctl(필자는 service)
$ sudo service nginx stop
$ sudo service nginx status
   
//* 권한 변경
$ sudo su
//* 여러개 도메인 등록 가능 하며 실제 도메인이 존재 해야 한다.(가비아, iteasy 등등에서 구매)
$  certbot certonly --standalone -d 도메인주소 -d www.example.me -d dev.example.me -d test.example.me 
//* 이메일 주소 입력하라면 하고 동의 하라면 한다

//* 이런 문구 나오면 성공
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
//* 밑에는 기부 어쩌고 

//* nginx 재시작
$ sudo service nginx restart

3. nginx 설정

$ sudo vim /etc/nginx/sites-available/default
//* 80 port를 https로 redirect
server {
    listen 80;
    listen [::]:80;
    server_name _;

    return 301 https://$host$request_uri;
}

//* 프로젝트 파일 설정
$ sudo vim /etc/nginx/sites-available/본인서버이름 혹은 프로젝트이름
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name 도메인주소;
    
    ssl_certificate "/etc/letsencrypt/live/도메인주소/fullchain.pem";
    ssl_certificate_key "/etc/letsencrypt/live/도메인주소/privkey.pem";
    ssl_prefer_server_ciphers on;

    location / {
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_set_header X-Real-IP $remote_addr;
                proxy_pass http://127.0.0.1:설정한포트;
        }
}

//* 링크
$ sudo ln -s /etc/nginx/sites-available/프로젝트파일명 /etc/nginx/sites-enabled/프로젝트파일명

//* nginx 설정 오류 검사
$ sudo nginx -t

//* nginx 재시작
$ sudo nginx -s reload

필자는 https 적용이 안되어서...

아니 적용은 되었는데 사설 ip 안에서 접속이 되어

외부에서도 접속이 되는 줄 알았는데 접속이 되지 않았다...

정확한 이유는 모르나 허망할 정도로 가까운 곳에 있었다...

필자와 같이 개인 서버 만들때 isp에서 접속을 차단하는 경우도 있다고 한다.

예전에 공인ip 분배기함에서 80 포트는 내부로 포트포워딩 해 놓았는데

443은 안해 놓은 것이 문제였다.....

개인 서버 운영하는 분들은 분배기 포트포워딩 ...신경 써야 한다...

# 우분투 웹서버 만들기
이제 우분투 웹서버 만들기 세번째...⚙️

오늘은 Let's Encrypt를 활용해 인증서를 발급 받은 뒤 https를 적용해 보자.

Let's Encrypt는 https 보급을 위해 무료로 ssl인증서를 발급해 주는 비영리 프로젝트라고 한다.

> Let's Encrypt의 인증서 발급 방식은 3가지가 있다.
> 
> 1 Webroot: 배포한 웹서버 내에 인증서를 위치 시키고 nginx에서 읽어오게 하는 방식인듯 하다.
>
> 2 webserver: Nginx 나 Apach 와 같은 웹서버의 옵션을 설정해 SSL 인증을 실시
>
> 3 StandAlone: 가장 간편, 빠르고 안전하지만 서비스를 중단해야 함.
>
> 4 DNS: DNS의 TXT레코드를 이용해 인증받는 방식
>
> 필자는 3번 standalone의 방식을 택했다. 
>
> 서비스를 중단해야 하지만, 서비스의 중단에 별다른 타격이 없고 간편하게 적용 가능해서 선택 하였음.
>
> ```
> version
> ubuntu 20.04.6 LTS
> nginx 1.18.0
> certbot 0.40.0
>``` 


### 1. certbot && Let's Encrypt 설치

```bash
$ sudo apt-get update
$ sudo apt-get install letsencrypt -y
//* certbot이 같이 설치 됨
```   

### 2. 인증서 생성
```bash
//* nginx 서비스 중지
//* service 명령 혹은 systemctl(필자는 service)
$ sudo service nginx stop
$ sudo service nginx status
   
//* 권한 변경
$ sudo su
//* 여러개 도메인 등록 가능 하며 실제 도메인이 존재 해야 한다.(가비아, iteasy 등등에서 구매)
$  certbot certonly --standalone -d 도메인주소 -d www.example.me -d dev.example.me -d test.example.me 
//* 이메일 주소 입력하라면 하고 동의 하라면 한다

//* 이런 문구 나오면 성공
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
//* 밑에는 기부 어쩌고 

//* nginx 재시작
$ sudo service nginx restart
```
### 3. nginx 설정
```bash
$ sudo vim /etc/nginx/sites-available/default
//* 80 port를 https로 redirect
server {
    listen 80;
    listen [::]:80;
    server_name _;

    return 301 https://$host$request_uri;
}

//* 프로젝트 파일 설정
$ sudo vim /etc/nginx/sites-available/본인서버이름 혹은 프로젝트이름
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name 도메인주소;
    
    ssl_certificate "/etc/letsencrypt/live/도메인주소/fullchain.pem";
    ssl_certificate_key "/etc/letsencrypt/live/도메인주소/privkey.pem";
    ssl_prefer_server_ciphers on;

    location / {
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_set_header X-Real-IP $remote_addr;
                proxy_pass http://127.0.0.1:설정한포트;
        }
}

//* 링크
$ sudo ln -s /etc/nginx/sites-available/프로젝트파일명 /etc/nginx/sites-enabled/프로젝트파일명

//* nginx 설정 오류 검사
$ sudo nginx -t

//* nginx 재시작
$ sudo nginx -s reload
```

필자는 https 적용이 안되어서...

아니 적용은 되었는데 사설 ip 안에서 접속이 되어

외부에서도 접속이 되는 줄 알았는데 접속이 되지 않았다...

정확한 이유는 모르나 허망할 정도로 가까운 곳에 있었다...

필자와 같이 개인 서버 만들때 isp에서 접속을 차단하는 경우도 있다고 한다.

예전에 공인ip 분배기함에서 80 포트는 내부로 포트포워딩 해 놓았는데 

443은 안해 놓은 것이 문제였다.....

개인 서버 운영하는 분들은 분배기 포트포워딩 ...신경 써야 한다...