[Nginx] Openssl과 Nginx 수동 설치 후 서비스 등록

건미누·2025년 4월 10일
2

TrobleShooting

목록 보기
3/3
post-thumbnail

프로젝트 사이트에서 RedHat 7.x대의 OS에서 TLSv1.3을 사용하기를 원했는데 기존 OpenSSL의 버전이 낮아 사용할 수가 없었다. 폐쇄망 환경이기 때문에 필요한 라이브러리 rpm파일과 tar.gz 파일도 모두 찾아서 가야했다.

우선 버전업 전에 테스트를 위해 기존 서버에 수동설치를 해보았다.

필요 라이브러리

필요한 파일은 다음과 같았다.

  • gcc 4.8.x
  • openssl-1.1.1k.tar.gz
  • nginx-1.26.x.tar.gz
  • zlib-devel
  • pcre-devel
  • perl

대부분 구글링을 통해서 찾게 되었고, nginx는 공식 홈페이지에서 다운로드 할 수 있다.
필요한 내용들은 중간중간마다 발생하는 Error 로그를 보고 참조했기 때문에 외에 필요한 내용이 있다면 그건 설치 중에 로그가 발생할 것이기 때문에 나중에 생각하기로 했다.

Openssl 설치

수동으로 설치하기 때문에 사용자 계정의 홈 디렉터리에 OpenSSL과 Nginx를 설치했다.
gcc가 필요하긴 했지만 서버에 이미 설치되어있는 상태였기 때문에 바로 OpenSSL을 설치했다.

우선 openssl을 설치하기 위한 설치 과정은 다음과 같았다.

tar -zxvf openssl-1.1.1k.tar.gz
cd openssl-1.1.1k
./config --prefix=/home/kmw/ssl --openssldir=/home/kmw/ssl shared zlib

이렇게 하면 make 명령을 위한 config가 구성된다.

이후 make & make install 을 통해 make파일을 만들고 설치를 진행할 수 있게 된다.

cd /home/kmw/ssl을 통해 이동하면 openssl-1.1.1k가 설치된 것을 확인할 수 있다.

이제 사용을 위해 conf파일에 lib를 지정해줘야한다.

vi /etc/ld.so.conf.d/openssl-1.1.1k.conf/home/kmw/ssl/lib를 넣고 저장한다.

# 심볼릭 링크 생성
`ln -s /usr/local/ssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1`
`ln -s /usr/local/ssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1`

그럼에도 bash에 openssl -version을 입력하면 기존 버전이 나오는데 이는 1.1.1k버전 설치 이전에 기본적으로 사용하던 openssl이 /usr/bin에 잡혀있기 때문이다.

기본적으로 openssl을 bash에 입력하면 1.1.1k를 사용하도록 하기위해서는
ln -s /home/kmw/ssl/bin/openssl /usr/bin/openssl로 심볼릭 링크를 생성해 주면 된다.

이 때, 기존에 설치된 openssl는 mv 명령으로 이름을 바꿔 백업한 다음 심볼릭 링크를 생성해주었다.
이후 openssl version을 입력하면 버전이 바뀐 것을 알 수 있다.

Nginx 설치

nginx 수동 설치도 과정은 비슷하다. 설치 과정은 다음과 같았다.

tar -zxvf nginx.1.26.3.tar.gz	# tar 압출 풀기

cd nginx.1.26.3					# nginx 설치 폴더 이동
./configure --prefix=/home/user/apps/nginx/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_realip_module \
--with-openssl=/home/kmw/openssl-1.1.1k \
make && make install

proxy_pass를 사용하기 위해서 필요한 모듈을 추가한다. 이 때, with-openssl의 path는 openssl을 수동설치하기 위해 압축해제했던 openssl-1.1.1k 디렉터리로 지정하면된다. user는 nginx를 실행 시 어떤 권한으로 실행되는지를 결정하기 때문에 root 권한으로 진행할 것이라면 기재하지 않아도 된다.

처음에는 실행파일을 입력해야하는 줄 알고 /usr/bin/openssl로 지정해줬었지만 이렇게하면 정상적으로 make가 이루어지지 않았다.

install까지 이루어졌다면 prefix로 지정한 위치에 nginx가 생성되었을 것이다.sbin 폴더에 nginx로 기동이 가능하며 conf에서 config 설정이 가능하다.

Nginx 서비스 등록

수동으로 설치하게되면 systemd에 자동으로 등록이 되지 않는다.
이 때, shell 파일이 아니라 systemctl 명령으로 관리하고 싶다면 수동으로 서비스에 등록해줘야한다.

vi /etc/systemd/system/nginx.service

[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/home/user/apps/nginx/nginx -t
ExecStart=/home/user/apps/nginx/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true

[Install]
WantedBy=multi-user.target

user 모드로 service에 등록하고 싶다면 /etc/systemd/user에 파일을 만들어주고 rootful로 service를 등록하고 싶다면 /etc/systemd/service에 파일을 등록해주면 된다.

나는 sudo 권한으로 nginx를 기동 및 중지할 것이기 때문에 vi /etc/systemd/service/nginx.service 명령으로 service 정보를 생성하고 위 스크립트를 등록했다.

이후 systemctl start nginx 명령으로 기동하여 정상적으로 동작하는 것을 확인할 수 있었다.

profile
꺾여도 해야지

0개의 댓글