[Oracle Cloud] 7. CentOS 8 VM인스턴스 nginx reverse proxy
설치한 nginx를 리버스 프록시 서버로 셋팅한다.
위 그림에서의 Internet이 브라우저를 통해 서버에 접속하는 client일 것이고,
example.com이 내 서버, VM 인스턴스
proxy가 nginx,
Web server가 Spring boot 내장 톰캣 (WAS)가 될 것이다.
원하는 flow를 간단히 하면 이렇다.
1. 브라우저에서 http:// ${ 내 도메인 } 접속 요청
2. nginx에서 요청을 proxy-pass로 WAS로 넘김
3. Web server에 있는 자원을 client까지 response
1. conf 파일 설정
sudo vim /etc/nginx/nginx.conf
nginx.conf 파일을 열어서 보면 중간에 80 port를 listen하는 server 정의 부분이 있다.
이 위 쪽으로 upstream을 정의해준다.
upstream ${ upstream 명 } {
server 127.0.0.1:${ WAS 포트 번호 };
}
그리고 location / 부분에는 아래와 같이 정의한다
location / {
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://${ upstream 명 }
}
이 서버의 루트에 접속했을 때, 내부에 위치한 WAS로 포워딩한다는 의미이다.
이렇게 설정 후
sudo systemctl restart nginx
명령어로 nginx 서비스를 재기동시켜준다.
그 후 브라우저로 서버에 접속해보자.
2. 502 에러
한 방에 좀 되면 좋을텐데,,,
여지없이 에러가 난다.
요 키워드로 검색해서 답을 찾았다.
nginx proxy 502
Nginx Reverse Proxy 설정시 502 Bad Gatway 문제
결론 setsebool -P httpd_can_network_connect true 요 명령어로 해결! : ) 원인 (SELinux 의 보안 모듈에 의해) 기본적으로 httpd 프로세스에 의해 네트워크 연결 허용 여부가 false 이다. 현상 우선 nginx를..
papababo.tistory.com
SELinux 보안 모듈에 의해 기본적으로 httpd 프로세스에 의한 네트워크 연결 허용 여부가 false라고 한다.
cat /var/log/nginx/error.log
이제 에러로그를 살펴볼시간~
2022/05/12 02:29:39 [crit] 46293#0: *1 connect() to 127.0.0.1:${ port } failed (13: Permission denied) while connecting to upstream, client: ${ 비밀입니다 }, server: bbyuk-dev.com, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:${ port }/", host: "${ 비밀입니다 }"
야무지게,,, 13 Permission denied 나는걸 볼 수 있다.
setsebool -P httpd_can_network_connect true
이 명령어로 바로 해결 되었다.
WAS를 직접 호출하지 않고, 웹서버에 접근하더라도 백그라운드에 올려놓은 Spring Boot앱을 잘 호출하는 것을 볼 수 있다.