카테고리 Archives: linux

brotli_module 활성화

httpd 에서 2.4.26 버전 이상에서 지원하는 데이터 압축 모듈이다.

deflate_module 의 경우 gzip 압축을 이용하여 데이터 전송을 하고 brotli_module 의 경우 br 으로 압축하여 전송한다.

 

brotli 압축 기술은 구글에서 공개한 압축기술중 속도 위주의 압축기술이다. (gzip 보다 압축률이 20–26% 더 좋다고 한다.)

https://opensource.googleblog.com/2015/09/introducing-brotli-new-compression.html

 

아파치에 mod_brotli 설치는 아래 github 내용을따라 설치할 수 있다.

https://github.com/google/brotli

 

설치가 된 이후에는 아래와 같이 defate 및 brotli 설정을 한다. (https://www.unixadm.org/needful-things/brotli)

설정은 브라우져 지원 여부에 따라 brotli 으로 전송하거나, gzip 전송을 선택하여 전송하게 되며

둘다 지원 못하는 브라우져의 경우 압축되지 않고 전송한다.

apache 2.4.27 버전 이상에서 Segmentation fault 오류가 발생.

apache 2.4.26 이하 버전에서 Important 취약점인 CVE-2017-9788, CVE-2017-9789 가 존재 하기 때문에

apache 버전을 최신화 한뒤에 apache error_log 에서 간헐적인 접속 끊김 증상이 확인이 되었다.

Segmentation fault, memory corrupted – core dump 에 의한 apache child 프로세스의 강제 exit 가 된다.

 

이와 같은 경우 메인 프로세스는 살아 있는 상태에서 child 가 죽는 현상이다 보니 실제 apache 는 설정에 따라

부족한 child 프로세스를 다시 생성하기 때문에 발생하고 있지만 모르고 있을 수 있다. – apache – error_log 를 꼭 점검해봐야 한다.

 

내용 추적이 되지 않아 한동안 고생을 하다가 이 에러가 특정한 상황에서만 발생하는것을 확인하였다.

조건1. https 프로토콜 사용

조건2. http/2 사용

조건3. mpm_worker 혹은 mpm_event 사용 (event 에서 더 심하게 발생함.)

조건4. mod_php 사용

 

기존에 apache 2.4.27 부터 worker 가 기본 mpm 이 되었고,

어떤 버전인지 부터는 모르지만 최신 버전의 2.4.38 버전은 event mpm 이 기본값으로 설정이 된다.

이를 prefork 방식으로 변경해서 운영을 해도 되지만 이럴 경우 http/2 는 지원이 되지 않는다.

 

기본이 event mpm 일 경우 권장 되는 운영 환경은 apache 2.4 –  fcgi_proxy – php-fpm 구조이다.

다만 php-fpm 의 경우 tomcat 처럼 별도의 WAS 환경이기 때문에 익숙치 않고 설정법을 새롭게 배워야 하는 단점이 존재 한다.

 

변경을 하는것은 맞는 방향이겠지만 이는 충분한 시간이 주어져야 한다는 단점이 존재한다.

하지만 서버는 당장에 문제가 발생하고 있기 때문에..

 

때문에 임시 방편으로 아래와 같은 설정(H2MaxWorkers)을 추가 하여 오류를 방지 하고 시간을 벌도록 한다. ‘ㅅ’a

H2MaxWorkers 설정을 1로 할경우 mpm_worker 의 경우 속도 저하가 체감이 될정도 이기 때문에 mpm_event 로 운영을 하도록 한다.

 

mpm 설정은 ……./httpd/conf.modules.d/00-mpm.conf 에 존재 한다.

 

현재 apache 의 mpm 은 아래 명령어로 확인할 수 있다.

 

GEOIP data 파일 업데이트

아래 스크립트는 배포 url 이 변경되어 동작 되지 않아요.

새로운 업데이트 방법 관련 글 : GEOIP database 파일 업데이트

 


 

GeoIP.dat 파일을 배포하는 maxmind (https://www.maxmind.com/) 사에서 레거시 파일 형태인 GeoIP.dat 파일을 2019-01-02 일로 부터 배포를 중단하였다.

기존에 apache 혹은 nginx 그리고 iptables 등에서 사용중인 국가별 구분 및 제한을 을 지속적으로 사용 하기 위해서는

GeoIP의 지속적인 업데이트가 필요로 한다.

– 주기적으로 ip는 로테이션이 되기 때문에 dat 파일이 갱신되지 않은채 1년 정도가 지나면 신뢰도가 떨어진다.

다만 과거 형태 .dat 파일만 배포 중단이며 .mmdb 및 .csv 형태의 배포는 지속되고 있다.

 

때문에 배포되는 csv 파일을 이용 하여 dat 파일을 직접 생성해 주는 방향으로 진행할 수 있다.

이미 github 에서 csv를 이용한 dat 파일을 만드는 게 몇몇 올라와 있다. 이중 https://github.com/sherpya/geolite2legacy 을 이용하여 생성할 수 있는 스크립트를 작성 하였다 ‘ㅅ’a

GeoLiteCity.dat 는 최상단의 config CITYDATA 를 Y 로 지정하면 생성한다. (일반적으로 불필요 하며, 생성시 2GB 이상의 메모리를 사용 한다.)

cron 등록은 /etc/cron.daily/ 혹은 /etc/cron.weekly/ 에 파일을 만들어 두면 anacron 이 알아서 주 or 일에 돌려주겠지요..

bash 스크립트의 실행 속도(간격) 한계

bash 로 작성된 스크립트의 경우 anacron 혹은 crond 에 의존하여 작동을 한다.

때문에 지정 할 수 있는 최소 시간은 1분이다.

즉 1분에 1회만 실행이 가능하다.

 

필요에 따라 5초 혹은 10초 단위 마다 재 실행 이 가능한 경우가 발생했다. (push 메세지 전송이라든가..)

 

이 한계를 넘기 위해 아래와 같이 작성하여 지정된 $TERM 동안 sleep 을 하고 excute-job 펑션을 재실행 하도록 작성 한다.

1~6 값을 지정함에 따라 알맞은 $TERM을 sleep 하고 재 실행 하게 된다.

TLS 1.3 활성화 (apache, nginx)

RFC 8446 이 발표 되고 TLS 1.3 의 표준이 제정 되었다. (https://tools.ietf.org/html/rfc8446)

아래의 조건을 만족하는 경우 TLS v1.3 를 사용할 수 있다.

openssl 1.1.1 이상 / nginx 1.13.0 이상 / apache 2.4.37 이상

 

openssl 이 웹서버 데몬(apache,nginx) 에 의존성이 있으므로 openssl 을 업데이트 하고 웹서버를 재설치 해야 하는 경우가 발생할 수 있다.

 

nginx.conf 에서의 SSL 관련 설정 방법

 

apache 의 SSL 설정 방법

 

2019-01-08_113231_001

 

브라우저 호환성 (https://caniuse.com/#feat=tls1-3)

TLS v1.3 이 나왔다고 TLS v1.2 끌 경우 많은 브라우져가 접속하지 못한다.

현재 TLS v.1.3을 지원하는 브라우져는 FireFox, Chrome, Safari, Opera, IOS Safari, Chrome for Android, FireFox for Android 정도 이다.