만족
[React] Apache를 이용해 서비스하기 본문
[React] Apache를 이용해 서비스하기
FrontEnd/React Satisfaction 2020. 11. 5. 21:48http://test.com 에 배포하기로 했다고 해보자.
npm run build (yarn build)로 빌드한 후, 서버에 업로드했을때 정상적으로 표시되는 것으로 보인다.
그런데 /가 아닌 다른 경로로 처음 접속하면 404 페이지가 보인다.
리액트 프로젝트를 빌드하면 html파일은 index.html하나뿐이기 때문에 /, /index.html이 아니면
다른 경로로 접속했을 때 index.html을 읽어올 수 없기 때문이다.
즉, 어떤 경로로 접속하더라도 index.html 파일을 읽을 수 있도록 apache설정을 조금 만져주어야 한다.
Ubuntu 16.04, Apache 2.4.18을 기준으로 설명한다.
sudo nano /etc/apache2/apache2.conf
설정파일을 열고 (nano 대신 vi를 이용해도 상관없다)
...
<Directory /var/www/html>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
...
해당 부분을 찾아 AllowOverride 부분이 None으로 되어있다면 All로 바꿔준다
그리고 다시 프로젝트 폴더로 돌아와서, public 폴더에 .htaccess파일을 만든다.
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.html [QSA,L]
위의 내용을 추가한다
이 조건은 요청 경로에 파일이 존재하지 않을 경우 전부 프로젝트 루트의 index.html를 반환하도록 설정하는 코드다
만약 모두 /index.html로 보내고 싶은게 아니라 특정 경로에 html이 있는 경우 보존하고 싶다면,
Options -MultiViews
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^ index.html [L]
이 내용을 붙여넣는다.
(파일 또는 디렉터리가 존재할 경우 그대로, 존재하지 않을 경우 index.html 반환)
npm run build
프로젝트를 다시 빌드하고 /build폴더의 파일들을 서버에 업로드한다.
sudo service apache2 restart
서버에서 아파치를 재시작한다.
이제 http://test.com/뿐만 아니라, http://test.com/some_path 에 대해서도 정상적으로 index.html을 읽어올 수 있게 된다.
'FrontEnd > React' 카테고리의 다른 글
[React] 프로젝트 시작 시 설치하는 모듈 모음 (0) | 2020.12.28 |
---|---|
[React] Hooks 첫걸음 (0) | 2020.12.08 |
[React] package.json으로부터 version 가져오기 (0) | 2020.11.05 |
[React] 에러 경계 (Error Boundary) (0) | 2020.11.04 |
[React] Hook과 함께 HOC 사용해보기 (1) | 2020.11.04 |