본문 바로가기
서버/Nginx

nginx certbot 연동

by eclipse7727 2021. 10. 11.

location 블록에는 api 서버 쪽만 proxy pass 해서 쓰고 

다른 location 블럭에는 root path로 build 한 react 문서만 가져가게 한다.

 

위부터 추가 제거 iptables 와 firewalld 두 종류가 있다.

 

이 글에서는 iptables를 사용했다.

// 추가시
iptables -t nat -A PREROUTING -p tcp -d <X.X.X.X> --dport <PORT> -j DNAT --to-destination <X.X.X.X>:<PORT>

// 삭제시
iptables -t nat -D PREROUTING -p tcp -d <X.X.X.X> --dport <PORT> -j DNAT --to-destination <X.X.X.X>:<PORT>

<X.X.X.X>와 <PORT>만 수정해주면 된다.

 

ec2는 보안그룹에서 해당하는 포트를 열어주면 된다.

 

nginx 버전에 따라 조금 다르다. ( 2종류가 있음.)

1. nginx 폴더

 

/etc/nginx 폴더에 sites-available sites-enabled 가 있으면 sites-available 폴더에 <아무개>.conf 파일을 만들면 된다.

 

- etc/nginx/sites-available : 사용 가능한 사이트 목록 디렉터리

- etc/nginx/sites-enabled : 사용할 사이트 목록 디렉터리

 

파일을 만든 후 심볼릭 링크를 아래처럼 생성하면 된다.

sudo ln -fs /etc/nginx/sites-available/app.conf /etc/nginx/sites-enabled/

 

 

2. nginx 폴더

/etc/nginx 폴더가 위와 같을 경우 conf.d 폴더에 들어가 <아무개>.conf 파일을 만들면 된다.

conf.d 폴더 내부에 app.conf를 만들어 주었다.

 

 

내용물로는 certbot 설정을 하려면 server_name이 필수이다.

문장 끝에는 ; 를 끝에 붙여주자 없으면 오류 난다.

 

~/app.conf 파일 

server{

    listen 80;

    listen [::]:80;
    server_name <domain address>;

}

 

/etc/nginx 파일

...
http {
    ...

    include /etc/nginx/conf.d/default.conf;
    include /etc/nginx/sites-enabled/*.conf; // 이 부분이 추가되었다.
}

위 코드를 그림처럼 /etc/nginx/nginx.conf 파일에  sites-enabled/*.conf 를 include 하는 코드를 추가했다.

 

여기까지 한 후 nginx 재시작을 해준다.

sudo service nginx restart

 

 

다음에 certbot 설치해서 하면 443 포트 세팅을 자동을 해준다.

 

nginx 설치는 공식문서에서 보고하면 된다.

 

Certbot - Centosrhel7 Nginx

a project of the Electronic Frontier Foundation certbot instructions To use Certbot, you'll need... comfort with the command line command line ...and an HTTP website HTTP website that is already online already online with an open port 80 port 80 ...which i

certbot.eff.org

 

이전에 생성한 <아무개>.conf 파일에 # managed by Certbot 붙은 내용이 마구 써져있을 텐데

해당 부분만 건드리지 말고 수정하면 된다.

 

아래처럼 location 블록을 추가해야 한다. location 블록 코드만 긁어가서 붙여 넣기 하자.

https://<domain name> 경로로 오는 모든 요청을 원하는 프록시 주소로 넘긴다.

server_tokens off; 는 써주는 것이 좋다. 오류 페이지에 nginx 버전명이 없어진다. 

test@ubuntu:/etc/nginx/sites-available$ cat app.conf
server {
    if ($host = <domain name>) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
  listen 80 ;
  listen [::]:80 ;
  server_name <domain name>;
  return 404; # managed by Certbot
}

server {
  server_name <domain name>; # managed by Certbot
  server_tokens off;
  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 <proxy address>;
    proxy_redirect off;
  }
    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/<domain name>/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/<domain name>/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

 

certbot 갱신이 가능한지 확인 

sudo certbot renew --dry-run

 

certbot 자동 갱신

/etc/cron.d/certbot 파일을 다음과 같이 수정한다.

파일이 없다면 만들어 주자.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0 */12 * * * root certbot -q renew --nginx --renew-hook 'service nginx reload'

위 코드는 12시가 마다 자동 갱신하는 코드이다.

아래 사이트에서 시간 설정 법을 익혀 볼 수 있다.

 

Crontab.guru - The cron schedule expression editor

The quick and simple editor for cron schedule expressions by Cronitor loading...

crontab.guru

 

반응형

'서버 > Nginx' 카테고리의 다른 글

Amazon Linux 2에서 nginx 설치  (0) 2022.06.14
nginx 재시작 오류  (0) 2021.10.17

댓글