본문 바로가기

STUDY/ECT

CentOS 7 nginx install, ReactJS 배포

yum에 nginx를 위한 외부 리포지토리를 추가한다.
/etc/yum.repos.d폴더 내에 nginx.repo파일을 생성한다.

$ touch nginx.repo
$ vi nginx.repo

그 후 아래 내용 붙여넣기

[nginx]
name=nginx repo
baseurl=https://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

centOS의 버전이 5혹은 6이라면 $releassever에 직접 버전을 입력한다.

외부 리포지토리를 연결한 후, yum을 이용해 설치한다.

$ sudo yum install nginx



conf파일을 작성해야 하는데, 리액트를 기준으로 작성했다.
/etc/nginx/conf.d폴더 아래에 새로운 설정 파일을 생성한다. 해당 폴더 아래에 작성하면 자동으로 nginx.conf파일에 포함된다.

$ touch web.conf

필요한대로 설정 파일을 적는다.

server {
        listen 9000;
        server_name [domain or IP address];
        root /home/web/ui/build;
        index index.html index.htm;
        location / {
            try_files $uri $uri/ /index.html;
        }
}
  • listen 9000;은 9000포트에 대한 요청을 받는다. 보통 80을 사용하는데, http의 기본 요청 포트가 80이기 때문.. 아래처럼 적으면 http://domain.com:9000이런식으로 오는 요청에 대해 처리하게 된다.
  • server_name은 도메인이나 아이피 주소를 적는다.
  • rootindex.html이 위치한 폴더의 path를 적는다.
  • index는 적힌 순서대로 찾는다. 먼저 index.html을 찾고 그 다음.. 리액트는 index.html로적으면 됨
  • location / {}/다음에 오는 모든 요청을 받아들인다. 분기해서 적을 수 있고, 정규식으로 필터링 할 수도 있다.
  • try_files부분이 중요한데, 저걸 적지 않으면 리액트라우터로 설정한대로 안되고 해당 경로의 파일을 찾으려 한다..

SSL설정이 필요하면, listen 9000 ssl;로 수정한 뒤, 인증서 설정만 추가하면 된다.
만약 80포트만 사용하면, redirect로 http요청(80)을 바로 https(443)로 보내버릴 수도 있다.


설정 파일까지 다 작성했으면 엔진엑스를 실행한다.

$ sudo systemctl start nginx

실패하면 systemctl status nginx로 확인하거나 에러 로그를 확인한다. 에러 로그는 따로 패스를 수정하지 않은 이상 /var/log/nginx/error.log로 확인할 수 있다.






배포하면서 만난 오류들은 보통 다 permission denied였다. nginx.conf파일을 살펴보면 user nginx;로 작성돼 있는데, 해당 유저에게 권한이 없기 때문에 nginx유저를 생성해 권한을 주거나 권한이 있는 유저로 변경해주면 된다.

root유저로 변경하는 것은 추천하지 않는다.

그리고 SSL 인증서도 권한 오류가 있었는데, 아래 명령어로 해결했다.

restorecon -v -R /인증서파일path