리눅스 서버 세팅을 하다가 NginX를 설치하고, 리버스 프록시 설정을 해줄 필요가 생겼다.

설치하기 전에 NginX 와 리버스 프록시에 대해 간략히 알아보자.

1.NginX 란?

Nginx 는 일종의 웹서버로서 흔히들 아는 Apache 웹서버와는 다르게

비동기 이벤트 기반 구조로 동작한다.

이로 인해 서버에 부하가 발생 시 성능 예측이 쉬운 편이다.

무엇보다, 내 기준으로는 Apache Web Server 보다 환경설정이 쉬운 편이었다.

2.Reverse Proxy 란?

리버스(역방향) 프록시, 즉 프록시 서버는 일종의 중계 서버이다.

클라이언트가 외부에서 서버로 접근해올 때, 프록시 서버는 내부 서버의 정보를 알고 있으므로,

클라이언트를 올바른 자리로 이동시켜주는 역할이라고 하겠다.

예를 들어

손님(클라이언트), 식당 종업원(프록시 서버), 식당 내부 상황(내부 서버)

이런 가정일 때,

손님이 들어오면 식당 종업원이 맞아, 빈 자리로 안내한다.

즉 식당종업원이라는 프록시 서버가 판단하여 내부 서버의 적당한 자리로 이동시킨다는 것이다.( 맞나 ..? )

1.NginX 설치 (CentOS)

sudo yum install nginx

만약 안될 경우, epel repository가 비활성이 의심되므로 활성화를 해준다.

yum install epel-release

2. Nginx 설치 경로

2-1) 최상위 경로로 이동하여 다음 명령어를 쓴다.

cd / cd etc/nginx ls -al

2-2) nginx 로 가서 파일 리스트를 조회하면 다음과 같이 나오는 데, 눈 여겨볼 것은 conf.d 디렉토리이다.

3. conf.d 로 접근하여 default.conf 조회 (없을 경우 파일을 만들어주세요.)

4. default.conf 파일 수정(중요)

sudo vi default.conf

 

server {
         listen 80 default_server;  // 설정 포트
         server_name m.proxy.com;  // 사용자에게 유입될 도메인
         location / {
                  proxy_pass http://m.proxy.com:3000; // 실제 사용될 도메인(내부서버)
                  proxy_set_header Host $host;
                  proxy_set_header X-Real-IP $remote_addr;
                  proxy_buffer_size          128k;
                  proxy_buffers              4 256k;
                  proxy_busy_buffers_size    256k;
         }
}

최초 유입 도메인인 m.proxy.com 으로 접근되면,

실제 사용될 내부서버인 m.proxy.com:3000으로 이동시킨다.

그에 따른 프록시 헤더값이며, 필요한 것이 있을 때마다 추가해주면 되겠다.

버퍼 사이즈를 설정한 이유는 버퍼를 설정하지 않을 경우 접근시간이 초과되 502 에러가 나오는 경우가 있어

설정했다.

5. Nginx 재시작

5-1) 현재 Nginx 상태 확인

nginx -t

이상이 있을 경우 에러코드가 발생하고, 없을 경우 success 라고 메시지가 나올 것이다.

5-2) Nginx 재시작

sudo systemctl restart nginx

별 이상이 없으면 여기서 끝나겠지만, 필자가 삽질을 하도 많이해서

그에 따른 대처방법을 작성하겠다.

* 삽질

1.site-available, site-enable 폴더 부재

구글링을 해보니 대부분 위와 같은 폴더 기준으로 설정을 하라고 하는데,

나의 경우 NginX 버전이 안 맞는 건지 없었다.

최근버전의 경우 conf.d 폴더 안에 있는 *.conf 폴더로 설정하는 거 같아

default.conf 폴더로 진행했다.

2. Bad not GateWay(502) 에러

1차적으로 default.conf 파일에 버퍼사이즈를 조정하면 된다고 언급되있지만,

나의 경우 해결되지 않았다.

위와 다른 문제가 있어 이방법으로 해결했다.

* 원인 SELinux 의 네트워크 보안 문제

리눅스 커널 모듈에서 기본적으로 httpd 에 의해

네트워크 연결 기본값이 false 로 되어 있다.

그러므로 우린 이것을 true 로 바꿔주면 된다.

sudo setsebool -P httpd_can_network_connect true

위와 같은 명령어를 작성하니 쉽게 해결 !

오랜만에 NginX 를 설정해보니 과거와 다른 점이 많아 

삽질을 많이 했다.

이걸 보시는 분은 삽질을 덜 하시길...

1단계는 끝났고, 마지막 2단계를 향해 가보자.

https://blog.naver.com/ohks486/222833865442

+ Recent posts