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종류가 있음.)
/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/
/etc/nginx 폴더가 위와 같을 경우 conf.d 폴더에 들어가 <아무개>.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 설치는 공식문서에서 보고하면 된다.
이전에 생성한 <아무개>.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시가 마다 자동 갱신하는 코드이다.
아래 사이트에서 시간 설정 법을 익혀 볼 수 있다.
'서버 > Nginx' 카테고리의 다른 글
Amazon Linux 2에서 nginx 설치 (0) | 2022.06.14 |
---|---|
nginx 재시작 오류 (0) | 2021.10.17 |
댓글