개발업무/개발

Nginx reverse proxy 설치 및 구성

NickTop 2023. 11. 18. 22:05

설치

Nginx

다운받기 원하는 경로에 들어간후,

curl https://nginx.org/download/nginx-1.24.0.tar.gz --output nginx.tar.gz
tar -zxvf nginx.tar.gz

버전은 nginx.org 들어가서 확인해야 합니다

 

Dependencies

https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/#installing-nginx-dependencies

위 사이트 가서 dependency 확인합니다

cd nginx-1.24.0
mkdir dependencies
cd dependencies

 

1. zlib

다음 버전 넘어가면 이전 버전 경로가 없어지니 zlib.net 들어가서 버전 확인해줍니다

wget http://zlib.net/zlib-1.3.tar.gz
tar -zxf zlib-1.3.tar.gz
cd zlib-1.3
./configure
make
sudo make install

 

2. openssl

wget http://www.openssl.org/source/openssl-1.1.1v.tar.gz
tar -zxf openssl-1.1.1v.tar.gz
cd openssl-1.1.1v
./Configure linux-x86_64 --prefix=/usr
make
sudo make install

 

make에서 컴파일 안되면 아래 명령어 치고 ./Configure [linux-x86_64] 부분을 적절하게 바꿔줍니다.

./Configure LIST | grep -i linux

 

다 설치되고 나서 명령어로 openssl 쳤을 때

libssl.so.1.0.0: cannot open shared object file: No such file or directory 에러나면

vi ~./bashrc

[맨아래줄]
export LD_LIBRARY_PATH=/usr/lib64:$LD_LIBRARY_PATH

또는,

/usr/lib64에 libssl.so.1.0.0 파일 자체가 없다면 openssl 압축 연 경로에 있으니 복사해서 넣으면 됩니다

 

3. PCRE

wget github.com/PCRE2Project/pcre2/releases/download/pcre2-10.42/pcre2-10.42.tar.gz
tar -zxf pcre2-10.42.tar.gz
cd pcre2-10.42
./configure
make
sudo make install

 

nginx 설치

nginx-1.24.0 설치한 경로 들어가서

nginx-1.24.0/
|-- depencendies/
|   |--openssl-1.1.1v/
|   |--pcre2-10.42/
|   |--zlib-1.3/
이 상태가 되어야함

cd /nginx-1.24.0경로/nginx-1.24.0

./configure \
--prefix=설치하고싶은경로/nginx \
--sbin-path=설치하고싶은경로/nginx \
--conf-path=설치하고싶은경로/nginx.conf \
--pid-path=설치하고싶은경로/nginx/nginx.pid \
--error-log-path=설치하고싶은경로/nginx/log/error.log \
--http-log-path=설치하고싶은경로/nginx/log/error.log \
--with-pcre=/nginx-1.24.0경로/nginx-1.24.0/dependencies/pcre2-10.42 \
--with-zlib=/nginx-1.24.0경로/nginx-1.24.0/dependencies/zlib-1.3 \
--with-http_ssl_module \
--with-openssl=/nginx-1.24.0경로/nginx-1.24.0/dependencies/openssl-1.1.1v \
--with-stream

make
sudo make install

 

저는 [설치하고싶은경로/nginx]라는 경로에서 모든 파일을 관리하고 싶어서 이런식으로 구성했습니다

[설치하고싶은경로/nginx]에 nginx가 설치됩니다

prefix로 지정한 경로에서 정적파일 서빙하니 참고해주세요

 

구성

정적파일은 nginx가 서빙하고 was는 reverse proxy를 통해 서빙하게 합니다.

다른 예제에서는 정적파일도 reverse proxy를 통해 별도의 web서버에서 서빙하는데 굳이 그럴 필요는 없을 것 같습니다.

 

/conf/nginx.conf를 열어 몇 줄 추가합니다

user root;  # 첫줄에 추가 (Nginx worker processes가 실행될 user group 지정인데 root 대신 다른 group으로 하는게 좋긴 하다)
...

http{
	...
    include conf.d/*.conf; # 프록시 구성을 conf.d라는 별도 폴더에서 설정하겠습니다
    charset utf-8; # 이게 없으면 한글 깨짐
    ...
}

 

/conf/conf.d/was.conf 경로 및 파일 생성 후

프록시를 설정할 파일을 작성합니다

upstream sentiment_was {
        server my.test.com:7080;
        keepalive 100;
}

server {
        listen       80;
        server_name  my.test.com;

        access_log /home/jun/server/nginx/log/was/access.log;
        error_log /home/jun/server/nginx/log/was/access.log;

        location /search {
                proxy_set_header Host $host;
                proxy_pass http://sentiment_was;
        }
}

nginx가 80번 포트에서 /search라는 경로로 요청받으면 upstream서버로 요청을 전달합니다

proxy_set_header 없으면 bad request 뜹니다

 

저는 별도 서버 구성은 하지 않고 /etc/hosts 파일 열어서 my.test.com에 private IP로 설정했습니다

같은서버 7080 포트에서 was 서버 돌려줍니다

upstream에 서버 여러개 등록하면 LB로 구성가능합니다

 

마지막으로 정적파일을 nginx/html 경로에 하나 생성합니다

vi static_file.html

<!DOCTYPE html>
<html>
<body>

<h1>My First Heading</h1>

<p>My first paragraph.</p>
<a href="https://jjjjqqq.tistory.com">블로그 보기!</a>
<a href="http://my.test.com/search/history/detail/12">was호출하기!</a>

</body>
</html>

 

실행

예제에서는 service 등록해서 실행하지만

저는 nginx경로에서만 관리되기 원하기 때문에 nginx 폴더 들어가서 실행합니다

 

sudo ./nginx : 실행

sudo ./nginx -t : conf 문법확인

sudo ./nginx -s stop : 중지

sudo ./nginx -s restart : 재실행

sudo ./nginx -s reload : 중지 없이 재실행

ps -ef | grep nginx : nginx 프로세스 확인

 

실행성공하고 외부에서 접속이 안되면 방화벽 뚫어줍니다

저는 우분투 서버로 구성되어있습니다

sudo ufw allow 80/tcp

 

테스트

윈도우에서도 my.test.com로 리눅스 서버 ip hosts파일 등록 후 접속

정적 파일 확인
동적 파일 확인