Syncope.T-*
article thumbnail
Published 2022. 10. 1. 23:24
Centos7에 Nginx 설치 Devops/Nginx
728x90

1. Install

/etc/yum.repos.d/ 에 nginx.repo로 Repository 등록

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

이후 Nginx 설치

yum install -y nginx

80포트 개방

firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --reload

2. 확인

systemctl enable nginx
systemctl start nginx
systemctl status nginx

conf 설정은 /etc/nginx/conf.d/default.conf에 있으므로 기본적으로는 80 포트에 /usr/share/html 에 존재한다.

이는 Repo에 따라 값이 바뀌므로 기본적인 Config은 아래 Reverse Proxy 설정할 때 수정하도록 하겠다.

사이트가 외부에서 잘 열리는지 확인하자.

 

혹여나 /var/log/nginx 의 error.log에서 13: Permission Denied 가 표시된다면 다음 중 하나가 문제 일 수 있다.

1) default.conf의 user가 root나 nginx로 되어 있으나, 해당 user가 document를 읽는 경로에 접근권한이 없을경우

chmod -R 755 [디렉토리명] // 하위의 모든파일 권한 변경
chown -R [사용자]:[그룹] [디렉토리명]  // 하위의 사용자및 그룹 변경

2) SELinux 확인

ls -lZd /home/유저디렉토리
drwxr-xr-x. 유저그룹 유저명 unconfined_u:object_r:home_root_t:s0 /home/유저디렉토리/

r:home_root_t를 httpd_sys_content_t로 변경해주면 된다. 물론 -R 옵션으로 하위 디렉터리까지 모두 변경

chcon -R -t httpd_sys_content_t /home/유저디렉토리/

위 작업이 싫다면, SELinux를 꺼버리면 되긴 하나, 추천은 하지 않는다.

 

3. Reverse Proxy

Reverse Proxy라는 건 한 사진으로 설명이 가능하다. Reverse Proxy라는 용어를 (RP)라고 칭하겠다.

사용자(Client)가 Network를 통해 Nginx인 RP Server에 접근하였을 때

Nginx는 내부 서버(외부에서 직접적으로 접근이 불가능한)에서 데이터를 받아, 다시 사용자에게 전달하는 방식이다.

 

여기서의 궁금증은 왜?이다. DMZ를 두고 이야기하면 쉽게 이해가 된다.

1) 보안

보통 서버를 구성할 때에 네트워크 환경은 DMZ라고 하는 IN-NAT(내부 네트워크)와 OUT-NAT(외부 네트워크) 사이에 위치하는 구간을 만든다. 위 사진에 있어서는 AWS나 NCloud 환경이라면 VPC를 설정하고, 각 인스턴스나 NAT, ELB에 DMZ 설정을 하는 것이다.

 

간단한 랜딩페이지를 배포/구성하려면 위 사진처럼 할 필요 없이, WAS를 DMZ에 놓고 운영해도 운영이야 되지만, WAS 자체를 최전방에 내놓게 되면, 그 WAS와 연결된 모든 서버가 털리는 거나 마찬가지다.

Nginx를 RP Server로 구성하여 DMZ존에 두고, WAS 같은 Application Server들은 내부망에 위치하게끔 하면 Nginx가 털려도, 2차 방화벽을 다시 뚫어야 하니 보안에 강력해진다.

 

2) 속도와 안정성

RP 서버를 두고서 앞에다 Cache Server나 SSL 하드웨어 가속기를 연동하면 설계적으로 성능 향상을 기대한다.

CDN을 연동하는 것을 생각하면 쉽게 이해할 수 있다.

 

3) 신뢰성

어떤 프로젝트에 투입이 되었는데 이런 RP가 하나 있다면 새로 추가하는 Application Server에 대한 걱정이 없다. 게다가 LB역할을 하기 때문에, 서버를 증설하는 것 또한 자유롭게 움직일 수 있다. (단지 요즘엔 L4나 LB를 따로 앞에다가 두긴 하지만)

 

말은 길었어도 설정 Config은 매우 단순하다.

설정하는 도메인이나 경로는 가상으로 예시를 들며 적어보았다.

본인의 웹 서버에 맞는 설정으로, 입맛에 맞게 수정하길 바란다.

여기에서는 예시의 설정을 아래 코드에서 주석은 적어두도록 하겠다.

 

server {
    listen 80;
    # 도메인은 예시로 naver.com
    server_name naver.com www.naver.com;
    # http 프로토콜로 오면 무조건 https로 redirect
    return 301 https://$host$request_uri;
}

server {
    listen      443     ssl;
    server_name naver.com www.naver.com;

    #ssl                 on;
    ssl_certificate     /usr/local/ssl/k2_kamico_or_kr_cert.pem;
    ssl_certificate_key /usr/local/ssl/PrivateKey.pem;
    # 패스워드가 없으면 안써줘도 된다.
    ssl_password_file   /usr/local/ssl/ssl.pass;

	# Client가 요청하는 Body 사이즈는 1GB로 (초과시 접근 X, 예시로 1Gb이상 파일 업로드)
    client_max_body_size 1000M;

	# 일반적으로는 Frontend Server로 데이터를 받아 뿌려주게끔 한다.
    location / {
        proxy_set_header        Host                    $host;
        proxy_set_header        X-Real-IP               $remote_addr;
        proxy_set_header        X-Forwarded-For         $proxy_add_x_forwarded_for;
        proxy_set_header        X-Forwarded-Proto       $scheme;
        # Nginx 서버에서의 접근이 가능하도록 Front Server의 8000포트를 접근 가능하게 설정해야 함.
        proxy_pass              http://10.10.10.5:8000;
    }

	# 주소에 /api로 시작하면 Backend Server의 데이터를 받아 뿌려주게끔 한다.
    location /api {
    	proxy_set_header		Host					$http_host;
        proxy_set_header        X-Real-IP 				$remote_addr;
    	proxy_set_header        X-Forwarded-For 		$proxy_add_x_forwarded_for;
        # 마찬가지로 Backend Server의 8080포트를 접근 가능하게 설정
        proxy_pass              http://10.10.10.8:8080;
    }
}

위 설정으로 Nginx에서 배포하는 주소로 연결하면 정상적으로 작동됨을 확인해보자.

 

Reference

https://www.lesstif.com/system-admin/forward-proxy-reverse-proxy-21430345.html

 

포워드 프록시(forward proxy) 리버스 프록시(reverse proxy) 의 차이

Web Server와 WAS 에 대해 연동하려면 Reverse Proxy 에 대한 이해가 필수입니다.

www.lesstif.com

https://m.blog.naver.com/happy_jhyo/222026743892

 

AWS로 DMZ/Private 구조 네트워크 구성하기

일반적인 네트워크를 구성할 때에는 위의 3가지 형태로 구성을 하게 된다. 개념적인 부분이지만 이렇게 하...

blog.naver.com

 

profile

Syncope.T-*

@Syncope

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...