본문 바로가기

개발관련 정보/서버

APM 에서 PHP7.X 사용시 다운로드되는 현상 해결

오랜만에 APM을 설치할 일이 생겨서 서버를 설정하고 테스트하던 중 

아주 어이없게 html 이나 php가 다운로드되는 일이 발생하였다.

이것은 php 7.x  이전 버전의 설정방법으로 설정하는 경우 발생되는 현상으로 7.x 버전 이상에서는 설정 방법이 달라짐을 알 수 있었다.

 

보통 html이나, php 파일의 확장자를 갖은 웹 소스를 작성하는 경우가 많고, 이 두파일은 URL을 통해 직접 호출되는 형태라

AddType 에 지정하여 php가 파싱한 결과를 웹에 연결하도록 하는게 그동안의 방법이였다.

언제부터 바뀐건지 정확히는 모르겠으나(이 환경으로 개발할 일이 요즘 없어서...)

많은 답변에서 다들 알 수없다는 글들을 많이 봐온 관계로, 이 글에 직접 해결방법을 제시하고자 합니다.

 

설치환경은 Apache 2.X, php 7.x 등 기타 조합이다

1. yum으로 설치하는 경우 /etc/httpd/  폴더가 apache 루트폴더가 된다.

2. /etc/httpd/conf/httpd.conf 에서 도큐먼트 서비스를 위한 설정을 적절히 하고, AddType에 어떤 설정을 하지 않도록 한다.

3. /etc/httpd/conf/httpd.conf 아래쪽에 보면 /etc/httpd/conf.d/* 의 파일들을 로드하는게 있는지 확인한다.

4. /etc/httpd/conf.d/php.conf 파일을 열어 아래와 같이 수정한다.

<IfModule !mod_php5.c>
  <IfModule !mod_php7.c>
    # Enable http authorization headers
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1

    <FilesMatch \.(php|phar)$>
        SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
    </FilesMatch>
  </IfModule>
</IfModule>

이 부분을 찾아 아래처럼 수정한다.

<IfModule !mod_php5.c>
  <IfModule !mod_php7.c>
    # Enable http authorization headers
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1

    <FilesMatch \.(php|phar|html)$>
        SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
    </FilesMatch>
  </IfModule>
</IfModule>

마찬가지로 아래부분을 찾아 "|html"을 추가해준다.

<IfModule  mod_php7.c>
    #
    # Cause the PHP interpreter to handle files with a .php extension.
    #
    <FilesMatch \.(php|phar|html)$>
        SetHandler application/x-httpd-php
    </FilesMatch>

 

5. php-fpm 에서도 html 파일에 php 코드를 담을 것이란것을 선언해줘야한다.

# vi /etc/php-fpm.d/www.conf

;security.limit_extensions = .php .php3 .php4 .php5 .php7
security.limit_extensions =

위와같이 php-fpm 의 환경설정을 변경한다. 변경하지 않으면 php 코드는 .php 파일만 허용된다.

변경 후에는 php-fpm 서비스와 apache를 재구동한다.

# service php-fpm restart
# service httpd restart

 

6. 추가로 리눅스 시스템이 apache 가 파일을 읽어 서비스할 수 있도록 DocumentRoot 폴더의 권한을 허용해준다.

chcon -v -R --type=httpd_sys_content_t /home/www/html

또 웹 소스에서 서버의 특정 폴더에 파일을 저장하는경우가 있다면 아래와 같이 저장할 수 있도록 권한을 허용해야한다.

chcon -v -R --type=httpd_sys_rw_content_t /home/www/attached

 

이제 필요한 페이지가 잘 열리는 것을 확인할 수 있다.

'개발관련 정보 > 서버' 카테고리의 다른 글

기상청 동네예보 활용하기 php 소스  (0) 2021.05.11