검색

레이블이 httpd인 게시물을 표시합니다. 모든 게시물 표시
레이블이 httpd인 게시물을 표시합니다. 모든 게시물 표시

2022년 9월 13일

Let’s Encrypt SSL/TLS 인증서을 이용한 무료 SSL 구현하기

Let's Encrypt 로 알려진 비영리 서비스 공동 설립자인 호주 컴퓨터 과학자 Peter Eckersley 님의 부고 소식을 접하고 뜻한바가 있어 오라클 클라우드 환경에서 구동중인 개인 연구 목적의 웹에 SSL 기술을 적용하기로 했다.

Let's Encrypt 는 비영리 그룹 Internet Security Research Group 에서 제공하는 서비스이다. 이 서비스를 사용하면 무료로 TLS 인증서를 발급하여 사용할 수 있다. 관련 자료가 많아 구현에 어려움이 없었다. 

https://letsencrypt.org

환경

  • OracleCloud
  • CentOS Linux 7.9.2009 
  • Nginx 1.16.1 or HTTPD 


SSL 구현하기 ( Apache HTTPD )

① 무료 도메인 등록

SSL 을 적용을 위해서는 도메인이 필요한데  Duck DNS (https://www.duckdns.or) 를 방문하여 무료 도메인을 등록한다. 참고로 서비스를 이용을 위해서는 회원 가입이 필요하다.


https://www.duckdns.or
https://www.duckdns.or


② Let’s Encrypt Client 다운로드

도메인 등록이 완료 되었다면 인증서를 생성해보자. 먼저 관련 도구를 설치한다. (CentOS + HTTPD 환경)

  

sudo yum install epel-release
sudo yum install certbot python2-certbot-apache mod_ssl


③ Let’s Encrypt 인증서 생성

Let’s Encrypt 인증서는 다음과 같은 명령을 사용하여 간단하게 생성할 수 있다. 설정 역시 기존 HTTPD 서버의 가상호스트 설정에 선택하여 추가할 수 있기 때문에 거의 바로 사용이 가능하다. 


sudo certbot --apache -d 도메인이름


이제 자신의 환경에 맞도록 일부를 수정하고 웹서버를 재 시작하면 SSL 이 이용한 웹 서비스가 동작함을 확인할 수 있을 것이다. 

인증서 갱신은 아래와 같은 명령으로 간단하게 처리할 수 있다. 

sudo certbot renew


SSL 구현하기 ( NGINX )

위의 ① 무료 도메인 등록 부분은 동일하게 처리한다.

② Let’s Encrypt Client 다운로드 ( Nginx )

  1. sudo yum install epel-release
  2. sudo yum install certbot-nginx


③ Let’s Encrypt 인증서 생성

Let’s Encrypt 인증서는 다음과 같은 명령을 사용하여 간단하게 생성할 수 있다. 설정 역시 자동으로 추가 되기 때문에 서버만 재시작하면 바로 사용할 수 있다.

  1. sudo certbot --nginx -d example.com

참고자료

2021년 4월 2일

MPMs worker 를 이용한 아파치 웹서버 성능 업 !!

 yum 패키지 매니저를 사용하여 설치한 Apache 웹서버는 prefork 불리우는 방법으로 클라이어트의 요청을 처리하도록 되어 있다. prefork 는 Apache 2 부터 도입된 MPMs (다중처리 모듈들, Multi-Processing Modules) 중 하나이다. MPMs 는 Prefork, Worker, Event 가 있으며 이외에도 Threadpool, Perchild, Leader 등 여러가지가 있다.



CASE

prefork 방식으로 설정된 Apache 웹서버를 잘 사용하고 있었으나 클라이언트 수가 늘어나면서 응답이 현저하게 지연되는 현상이 반복되었다. 응답이 지연되는 경우에도 CPU, Memory 은 충분한 여유가 있었다.

  • CPU 2.0GHz (6Core),  32GB 
  • Redhat Linux 6.5 (64bit)
  • Apache 2.2.14 (64bit) 

SOLUTION

Prefork 방식의 성능 저하는 단일 스레드의 자식 스레드에서 한번에 하나의 요청을 순차적으로 처리하는 방식에 의한 한계로 추정하고 Worker 방식으로 변경하였다. 

① /etc/sysconfig/httpd 설정 파일의  HTTPD 값을  /usr/sbin/httpd.worker 으로 변경한다.

② /etc/httpd/conf/httpd.conf 파일에서 worker MPM 설정을 변경한다.

③ 마지막으로 아파치 서버를 다시 시작하면 worker MPM 방식으로 동작하게 된다.


성능은 기대이상으로 놀라웠다. Prefork 방식의 경우와는 다르게 지연 없이 응답에 빠르게 동작하고 있다. 많은 요청이 발생하는 경우 멀티스레드 방식의 유용함을 체험할 수 있었다.


참고

How To Install the Apache Web Server on CentOS 7

Understanding Apache 2 MPM

Apache MPMs Explained

2017년 4월 2일

CentOS 7.0 에서 아파치 & 톰켓 환경 구축하기

1. 아파치 설치

yum 명령를 사용하여 httpd, httpd-devel 패키지를 설치한다. httpd-devel는 httpd 와 tomcat 연결을 위한 Tomcat Connectors 빌드 & 배포를 위하여 필요한다.

yum install httpd

yum install httpd-devel


2. 톰켓 설치

톰켓 설치에 앞서 http://www.oracle.com/technetwork/java/javase/downloads/index.html 에서 설치파일을 다운로드하여 JAVA 를 설치한다. 문서에서는 JDK 1.8.0.121 64비트을 사용하였다.

chmod +x jdk-8u121-linux-x64.bin

./jdk-8u121-linux-x64.bin

톰켓 설치파일은 http://tomcat.apache.org 에서 최신 소스를 다운로드한다. 설치는 특별한 것을 요구하지 않으며 압축을 풀는 것으로 기본적은 설치는 완료된다. 문서에서는 /app 경로에 압축을 풀었으며 편의상 실재 설치된 경로를 /app/tomcat 경로로 심볼릭 링크를 생성하여 /app/tomcat 경로로 접근이 가능하도하였다. (tomcat 버전을 업데이트하는 경우에 유용하게 사용된다.)

tar -xvf apache-tomcat-8.5.12.tar.gz
mv apache-tomcat-8.5.12/   /app
ln -s /app/apache-tomcat-8.5.12 /app/tomcat


이제 톰켓 실행을 위하여 계정의 프로파일(.bash_profile)을 수정한다.

#자바설치위치
export JAVA_HOME= /app/jdk1.8.9_121

#톰켓설치 위치
export TOMCAT_HOME=/app/apache-tomcat-8.5.12

#자바실행옵션
export JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx2048m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:+DisableExplicitGC

export PATH=$JAVA_HOME/bin:$TOMCAT_HOME/bin:$PATH

#편의성을 위한 alias 설정

alias tboot='$TOMCAT_HOME/bin/startup.sh'
alias tdown='$TOMCAT_HOME/bin/shutdown.sh'
alias tlog='tail -f $TOMCAT/logs/catalina.out'



프로파일(.bash_profile)을 수정한 다음에는 반듯이 재로그인 또는 . .bash_profile 명령을 사용하여 적용한다.
이제 tboot 명령을 사용하여 tomcat 를 시작한다.

3. 웹 서버 연결을 위한 Tomcat Connectors 설치하기

Tomcat Connector 설치는 컴파일이 필요하며 소스는 http://tomcat.apache.org 에서 다운로한다. 컴파일을 진행하려면 Apr 라이브러리가 필요하며 이런 이유에서 앞서 httpd-devel 패키지를 설치하였다. 컴파일을 위하여 필요한 패키지들은 아래와 같다.


  • httpd
  • httpd-devel
  • gcc
  • libtool


참고로 CentOS 7.6.* 의 경우 apxs 파일이 /usr/bin/apxs 에 있다.

cd /app/source/tomcat-connectors-1.2.42-src/native
./configure --with-apxs=/usr/sbin/apxs

make
make install

정상적으로 설치가 완료되었다면 /etc/httpd/modules 경로에 mod_jk.so 파일이 존재한다.

4. 아파치 웹서버 설정하기

/etc/httpd/conf.d/tomcat.conf 과 workers.properties 파일 만들어 준다.

/etc/httpd/conf.d/tomcat.conf
LoadModule jk_module modules/mod_jk.so
JkShmFile "run/mod_jk.shm"
JkWorkersFile conf/workers.properties
JkLogFile "logs/mod_jk.log"
JkLogLevel info

/etc/httpd/conf/workers.properties
worker.list=worker1
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1


/etc/httpd/conf.d/vhost.conf 파일 만들어 준다. 본인에 환경에 맞게 수정하여 사용.

/etc/httpd/conf.d/vhost.conf
NameVirtualHost *:80


ServerName 서버 아이피 또는 도메인 
DocumentRoot 웹 프로그램 루트
JkMountFile conf/uriworkermap.properties
DirectoryIndex index.html index.jsp


어떤 요청들을 톰켓으로 전달할 것인가를 정의한는 uriworkermap.properties 생성한다.
/etc/httpd/conf/uriworkermap.properties
/*.do=worker1
/*.jsp=worker1
/logout=worker1


5. 서비스 시작하기

CentOS 7 부터는 서비스 관리를 위하여 Sys V init 를 버리고 Systemd 를 사용한다. 이러한 이유에서 기존 서비스 제어를 위하여 사용되었는 service 명령 대신에 systemctl 을 사용한다. (참고로 service 명령을 사용하면 자동으로 systemctl 명령으로 변경되어 처리됨)

systemctl start httpd.service

systemctl status httpd.service 




httpd 서비스를 자동으로 시작하게 하려면 아래의 명령어를 사용한다.

systemctl enable httpd.service

서비스 확인은 아래의 명령을 사용한다.

systemctl list-unit-files --type=service | grep httpd



참고자료
How to Install Apache on CentOS 7