It works!
, 웹 페이지 표시 문제 해결하기되긴 뭐가 돼
EC2 인스턴스를 생성하고 아파치 서버가 잘 돌아가나 확인을 해보려 했으나! It works라는 문구만 뜬 사연...
여러 시행착오 끝에 (EC2가 터지는 등 난리가 났었지만...) 결과적으로는 정상적인 웹 페이지가 표시되었다. 나의 경우에는 경로와 PHP 설정 등의 문제가 있었다.
웹 페이지가 뭔 이상한 것이 뜬다?! 보통의 경우 경로 문제다.
먼저 아파치의 설정 폴더를 확인해준다.
# httpd.conf
#
# Relax access to content within /var/www.
#
<Directory "/var/www">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
# Further relax access to the default document root:
<Directory "/var/www/html">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.4/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None
#
# Controls who can get stuff from this server.
#
Require all granted
</Directory>
#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
/etc/httpd/conf/httpd.conf
파일의 일부이다. 이 부분을 찾아서 보면 된다. 기본적으로 보여지는 웹 페이지들의 저장 경로는 /var/www/html
이라는 것을 확인할 수 있다. Apache 웹 서버는 기본적으로 index.html 파일을 찾는다. 따라서 /var/www/html
경로에 index.html
이 있는지 확인을 해준다.
[ec2-user@<내 ip> html]$ ls
__MACOSX get-cpu-load.php index.php menu.php rds-initialize.php rds-write-config.php rds.php style.css
db-update.php get-index-meta-data.php load.php put-cpu-load.php rds-read-data.php rds.conf.php
하지만 ls 명령어로 해당 디렉토리의 파일을 확인했을 때... index.html 파일이 실종되었다는 것을 확인할 수 있음...!
그렇다면 어떻게 해주어야 하냐...
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
이렇게 수정을 한 뒤, PHP 설정을 다시 해주어야 한다. 이렇게 수정하면 아파치가 index.php
를 찾고 없으면 index.html
을 찾게 된다.
파일 저장 후 sudo systemctl restart httpd
를 해준다.
하지만?... 뭔가 페이지 이름은 바뀌었는데 화면이 제대로 뜨지 않는다. 이 얘기는 PHP 모듈에 문제가 있다는 것!!
온갖 시도 끝에 겨우 성공... 시행착오들을 정리하면 이렇게 되는듯 하다.
- PHP 패키지 재설치
- Apache 설정 파일 수정
- Apache와 PHP-FPM을 함께 사용하도록 설정 파일 수정
- PHP-FPM 서비스를 시작하고 활성화
- Apache 웹 서버 재시작
뭔가 설정을 수정하다가 아예 EC2를 터트려서 그냥 PHP 패키지를 전부 삭제한 뒤 재설치를 해줬다 ^^
# 패키지 삭제
sudo dnf remove php php-cli php-fpm php-mysqlnd php-zip php-devel php-gd php-mbstring php-curl php-xml php-pear php-bcmath php-json
# 패키지 재설치
sudo dnf install php php-cli php-fpm php-mysqlnd php-zip php-devel php-gd php-mbstring php-curl php-xml php-pear php-bcmath php-json
그리고 Apache PHP 모듈을 설치해준다.
sudo dnf install php-fpm
Apache 설정을 수정한다. (sudo nano /etc/httpd/conf.modules.d/00-mpm.conf
)
# mpm_prefort_module 활성화
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
# mpm_event_module 비활성화
#LoadModule mpm_event_module modules/mod_mpm_event.so
Apache 설정 파일을 수정한다. (sudo nano /etc/httpd/conf.d/php.conf
)
# PHP-FPM을 사용하도록 변경하는 설정
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>
PHP-FPM 설정 파일을 생성하고 아래의 내용을 추가해준다. (sudo nano /etc/httpd/conf.d/php-fpm.conf
)
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>
그리고 PHP-FPM 서비스를 시작하고 활성화해준 후 Apache도 다시 시작해준다.
# PHP-FPM
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
# Apache
sudo systemctl restart httpd
위 과정을 전부 거치면! 페이지가 성공적으로 로드된다!
It works! 메시지는 apache의 기본 페이지다. 정상적으로 작동은 하지만, 원하는 php 애플리케이션이 실행이 안되었기 때문에 이 문구가 뜬 것이다. PHP 모듈에 문제가 있거나, Apache 설정에서 PHP 모듈을 찾지 못한 문제이다.
나의 경우에는 PHP 패키지를 재설치하고, Apache와 PHP-FPM을 함께 사용하도록 설정을 바꿨다. Apache 설정 파일(/etc/httpd/conf.d/php.conf
)에서 PHP 처리를 PHP-FPM에 위임하도록 한 후, PHP-FPM과 Apache 서비스를 재시작했다! 이를 통해서 PHP 애플리케이션이 정상적으로 실행될 수 있도록 해줬다.
아무튼 서버는 돌아가는거니까 그리 크게 중요한 문제는 아니라 생각하긴 하지만!
문제가 생겼을 때 어디로 찾아가야 하는지, 어느 부분을 고쳐야할지 감을 잡아가는 경험이었다 생각한다. 아직 갈 길이 멀지만!!
본 포스팅은 글로벌소프트웨어캠퍼스와 교보DTS가 함께 진행하는 챌린지입니다.