[AWS] Apache 서버와 PHP 모듈 설정 문제 해결

sookyoung.k·2024년 11월 18일
0

🌿 교보DTS TIL

목록 보기
30/39
post-thumbnail

🚨 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 모듈 재설치

온갖 시도 끝에 겨우 성공... 시행착오들을 정리하면 이렇게 되는듯 하다.

  1. PHP 패키지 재설치
  2. Apache 설정 파일 수정
  3. Apache와 PHP-FPM을 함께 사용하도록 설정 파일 수정
  4. PHP-FPM 서비스를 시작하고 활성화
  5. Apache 웹 서버 재시작

뭔가 설정을 수정하다가 아예 EC2를 터트려서 그냥 PHP 패키지를 전부 삭제한 뒤 재설치를 해줬다 ^^

1. 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

2. Apache 설정 파일 수정

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

3. Apache와 PHP-FPM 설정 파일 수정

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>

4. PHP-FPM 서비스를 시작하고 활성화

5. Apache 웹 서버 재시작

그리고 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가 함께 진행하는 챌린지입니다.

profile
영차영차 😎

0개의 댓글