태그 Archives: .htaccess

php-fpm 서버에서의 php_value 를 선언하는 방법.

기존에 mod_php를 사용하는 php 4.x ~ 7.2 까지의 버전에서는 .htaccess 파일에서 php_value 를 설정해서 쓰는 경우가 많았다.

다만 php-fpm의 경우 별도의 데몬으로 작동을 하기 때문에 해당 값을 입력할 경우 500 에러가 발생한다.

아울러서 Apache 의 디렉토리 보안설정의 AllowOverride 설정이 All 또는 Options 으로 설정 되어 있어야 했다.
주: AllowOverride All 은 하위에서 위험한 값들을 변조 가능성을 열어 주기 때문에 보안상 매우 좋지 않으니 되도록이면 하지 말아야 한다.

 

기술적으로 php 5.6의 경우에도 php-fpm 을 사용 할 수 있기 때문에 버전으로 나누기 보다 phpinfo() 에 선언된 값을 보고 php-fpm 인지 판단해야 한다.

20240326_140656

위 캡춰 이미지와 같이 php-fpm 으로 구성된 서버에서는 php 코드 안에서의 ini_set 을 선언하거나 .htaccess 에서 php_value 선언을 해도 무시되거나 500 에러가 발생 한다고 생각 하면 쉽다.

권고 되는 방법은 apache 웹서버내에서 선언되거나 php-fpm 에서 선언 되거나 user.ini 를 불러오도록 설정해서 하는 방법이다. 다만 이경우 서버 설정을 건들이기 때문에 직접 수정이 불가능한 경우가 많겠다.

 

먼저 php.net 에서 공개해둔 메뉴얼 https://www.php.net/manual/en/ini.core.php을 보게 되면 아래와 같이 Changeable 이 공개 되어 있다.

20240326_141221

php_value 으로 변경 할 수 있는 값은 INI_PERDIR 또는 INI_ALL 이다.

INI_SYSTEM 의 경우 PHP_ADMIN_VALUE 으로 선언이 가능하지만.. 일반 계정에서의 선언은 되지 않고 웹서버(apache conf 파일) 에서 선언해야만 인식 한다.

설정 방법은 아래와 같다.

주의 할점은 $_SERVER 으로 전달 하는 부분이기 때문에 하나의 SetEnv만 인식 한다는 부분이다. 여러 가지의 PHP_VALUE 를 선언 하기 위해서는 vi 에디터로 수정을 해야 한다.

Ctrl + v 를 누르면 ^ 부분이 vi 에디터에 입력이 되는데 이후 Enter 를 입력하면 파란색의 ^M 표시기를 입력할 수 있다.
ftp를 이용하려 전송할때 ascii 파일을 binary로 전송했을때 칸 구분에 붙은 그 표기가 맞다.

이를 아래와 같이 입력하면 여러개의 PHP_VALUE 를 사용할 수 있다.

20240326_154447

wordpress 커스텀 port로 보안서버 적용.

wordpress 의 경우 https 프로토콜을 지원한다.
다만 기본포트인 443 포트만 지원하고 있다.

 

웹호스팅을 쓸때는 꽁수 ‘ㅅ’a 로 커스텀 포트를 적용하는 법이 필요하다.
먼저 wp-config.php 에 아래와 같이 define 을 설정한다.
/* That’s all, stop editing! Happy blogging. */ 위에 설정해야 한다.

 

.htaccess 파일에서 아래와 같이 추가를 해준다.

HSTS 를 설정했기 때문에 구형 브라우져를 사용해서는 접속이 되지 않겠다. 장점으로는 SSL 적용으로 굼떠진 사이트 속도가 빨라진다.
Strict Transport Security (HSTS) 설정을 하면 보안서버가 만료되거나 제거 되었을때 설정된 max-age 까지 클라이언트의 캐쉬가 비워지지 않을경우 접속 되지 않을 수 있으니 주의가 필요하다.
HSTS는 브라우져에 향후 이 사이트에 대한 접속에 일반 http를 사용하지 않겠다는 선언이다.

 

아파치의 SSL 프로토콜 및 칩퍼는 아래와 같이 설정 하였다.
(ps. 2016-03-11 추가 SSLHonorCipherOrder on: 이설정은 보안 등급이 높은 방식을 우선시 사용한다는 설정이다.)

 

https://www.ssllabs.com/ssltest/index.html 에서의 테스트 스코어는 A+ 이며 IE6/XP 조합을 지원하지 못하는 설정이다.

20160314_PicPick_094231IE6/XP 를 지원하기 위해서는 프로토콜 SSLv3만 허용 처리, 그리고 HSTS를 꺼줘야 한다. 다만 등급은 C 로 떨어진다.

php 5.4 paser error

php 5.4 이후부터는 php.ini 에서 E_ALL 을 설정하더라도 paser fatal 오류를 표기 하지 않는다.

보안적인 측면이라고 생각된다. 다만 이부분은 php 개발자를 괴롭힐 것이다 ‘ㅅ’a

 

이때 php.ini 를 수정하거나 php 문안에 ini_set 을 넣어도 동작하지 않는다.
(php.ini 직접 설정은 기본적으로 표시하지 않도록 되었고,
php문서에서의 ini_set 설정은 fatal 에러시 입력한 ini_set역시 무시되기 때문.)

아래와 같은 내용을 .htaccess 파일에 넣으면 fatal 오류를 볼수 있다.

모든 에러표시는 위와 같이 설정한다.

E_ALL  (32767)

 

일반적인 서비스제공용 설정의 설정값은 22519이다.

E_ALL & ~E_STRICT & ~E_NOTICE & ~E_DEPRECATED
E_ALL  (32767) – E_STRICT (2048) – E_NOTICE (8) – E_DEPRECATED(8120) = 22519

 

아래는 Error Level Constants 별 번호 이다.
E_WARNING(2)
E_NOTICE(8)
E_STRICT(2048)
E_DEPRECATED(8192)
E_ERROR(1)

E_PARSE(4)
E_CORE_ERROR(16)
E_CORE_WARNING(32)
E_COMPILE_ERROR(64)
E_COMPILE_WARNING(128)
E_USER_ERROR(256)
E_USER_WARNING(512)
E_USER_NOTICE(1024)
E_RECOVERABLE_ERROR(4096)
E_USER_DEPRECATED(16384)
계산기 : http://www.bx.com.au/tools/ultimate-php-error-reporting-wizard