in 소프트웨어 개발

애저 php 서버 (워드프레스) 파일 사이즈 제한 풀기

문제

마이크로소프트 애저를 통해 생성한 워드프레스 서버의 업로드 용량 제한이 높여지지 않는다.

upload_max_filesize 와 post_max_size 를 수정하면, 페이지 표기 상으로는 업로드 가능 사이즈가 늘어나지만, 실제로는 30메가 이상의 파일이 http error 를 내면서 업로드 되지 않는다.

문제 배경

구글 클라우드와 마이크로소프트 둘다 ‘클라우드 런치’, ‘마켓플레이스’를 통해 미리 만들어진 서버 인스턴스를 즉시 생성할 수 있다.

구글 클라우드와 달리 마이크로소프트는 워드프레스 블로그를 인스턴스화 할때 리눅스가 아닌 윈도우 서버(IIS)를 사용한다.

 

원인

28.6MB 이상의 용량을 가진 파일을 애저 웹 앱에 업로드하려고 시도하면 HTTP 404.13 이나 HTTP 502 에러를 받게 된다.

해결을 위해서는 아래 두가지 원인을 동시에 수정해야 한다.

  1. 애저 웹 앱의 PHP 기본 upload_max_filesize 와 post_max_size 가 8,192KiB 로 지정되어있다. 8 메가 이상의 파일을 업로드 할 수 없다.
  2. 윈도우 인터넷 서버 서비스 IIS7.0 기준으로, 보안을 위해 기본 Request Limits 값인 maxAllowedContentLength 가 30000000 바이트 (대략 28.6MB)으로 지정되어 있다. 28.6 메가 이상의 파일을 업로드 할 수 없다.

해결 방법 요약

애저에서 워드프레스 혹은 기타 php 기반 프로그램의 업로드 사이즈 제한을 높이기 위해선 아래의 작업을 해야 한다.

  1. 윈도우 서버 측에서 콘텐트 업로드 용량 제한을 높인다.
  2. 마스터 php 의 용량 제한을 높인다.
  3. 로컬 php 의 용량 제한을 높인다.

첫번째 작업을 수행하지 않으면 눈에 보이는 사이트 상에서는 워드프레스 업로드 제한이 높아진 것으로 보이지만, 실제로는 30메가 이상 업로드가 되지 않는다.

해결 과정

마스터 php 설정 파일을 읽을 수 있게 준비하기

  1. 애저 포탈에서 원하는 웹앱의 Application Settings 로 이동
  2. App Settings 패널로 이동하여, Key 와 Value 설정에 아래 값을 추가하고 Save 버튼 클릭
    1. Key 는 PHP_INI_SCAN_DIR
    2. Value 는 D:\home\site\ini
  3. 이미지 예시php_ini_scan_dir

php 와 IIS 설정 파일을 쉽게 수정하기 위해 Kudu 콘솔로 진입하기

애저 웹앱 들은 Kudu 콘솔이 기본 설치 되어 있다.

  1. KUDU 콘솔로 진입:  https://<웹앱 이름>.scm.azurewebsites.net
  2. 콘솔 메뉴로 진입: Debug Console >PowerShell
  3. 콘솔 위의 GUI 브라우저를 통해 site 디렉토리로 이동한다.

마스터 php 설정값 수정

  1. site 디렉토리에서 + 버튼을 누르고 “ini” 폴더를 생성kudu_add
  2. ini 폴더로 이동한 다음 “extensions.ini” 파일을 생성
  3. 파일 옆의 편집 버튼 클릭
  4. 아래 코드를 추가하고 저장. 이 파일은 마스터 값을 수정하게 됨.
    (30메가는 예시이므로 원하는 크기의 값으로 대체하면 된다.

    upload_max_filesize=30M
    post_max_size=30M

로컬 php 설정값 수정

  1. 이번에는 site/wwwroot 경로로 이동.
  2. (파일이 없다면) “.user.ini” 파일을 생성
  3. 아래 코드를 추가하고 저장. 이 파일은 로컬 값을 수정하게 됨
    upload_max_filesize=30M
    post_max_size=30M

maxAllowedContentLength 를 변경하기

  1. wwwroot 경로에서 web.config 파일을 찾아 수정버튼을 누른다.
  2. 아래 코드를 끝에 덧붙이고 저장한다. <지정하고 싶은 값> 부분을 바이트 단위의 숫자로 대체한다.
    2GB 를 지정하는 예)  <requestLimits maxAllowedContentLength=”2000000000″ />

    <configuration>
       <system.webServer>
          <security>
             <requestFiltering>
                <requestLimits maxAllowedContentLength="<지정하고 싶은 값>"/>
             </requestFiltering>
          </security>
       </system.webServer>
    </configuration>

서버를 재시작한다.

애저 포탈에서 웹앱을 Restart 하면 변경된 사항이 적용된다. 더 높은 용량의 파일을 업로드 할 수 있다.