nginx proxy_pass 502 response

Articles 2020/09/08 21:49 용비
nginx를 reverse proxy로 사용하는 경우, 502 Bad Gateway Response가 발생하는 경우가 있다.

proxy_pass 설정이 제대로 되어 있고, proxy_set_header를 맞게 설정했을 경우는 SELinux 설정 문제이다.

다음과 같이 설정하여 문제를 해결한다.

# setsebool -P httpd_can_network_connect true

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/873

Cent OS 7를 minimal로 설치하고 nginx 를 설치했다.
다른 VM에 Cent OS 7을 설치하고, mattermost를 설치했다.

reverse proxy 설정하기 위해서 8065 포트를 설정하고, nginx를 재기동했더니...
nginx가 실행되지 않는다.
/var/log/nginx/error.log를 살펴보니...

bind() to 0.0.0.0:8065 failed (13: Permission denied)
SElinux에서 8065 포트는 사용하지 못하도록 막혀 있어서 발생한 오류.

1. SELinux에서 오픈되어 있는 http port 확인하는 방법
# semanage port -l | grep http_port_t
        만약 semanage command를 사용할 수 없다는 메시지가 뜨면, 다음으로 라이브러리를 확인하여 설치한다.
# yum provides /usr/sbin/semanage
# yum install policycoreutils-python -y

2. 특정 포트를 오픈하기 위해 SELinux에 추가
# semanage port -a -t http_port_t -p tcp 8065
3. nginx 재기동



TAG
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/872

nginx를 CentOS 7에 설치하고 난 후, 한국에서만 접속을 허용하도록 하기 위해서는 다음과 같은 방법으로 할 수 있다.

1. GeoIP 설치
yum install -y geoip #install location : /usr/share/GeoIP/
2. nginx module dynamic 설치
yum install -y nginx-module-geoip #install location : /etc/nginx/modules/
3. nginx 설정 변경
vi /etc/nginx/nginx.conf
#nginx 설정 파일의 맨 위에 다음 2줄 추가
load_module modules/ngx_http_geoip_module.so;
load_module modules/ngx_stream_geoip_module.so;
http {
......
# 아래 설정 추가
# geoip national data file location
geoip_country /usr/share/GeoIP/GeoIP.dat;
# geoip national code mapping, default no, korea yes
map $geoip_country_code $allowed_country {
    default no;
    KR yes;
}
 #log_format에 국가코드 출력
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent $proxy_host $upstream_addr "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for" "$geoip_country_code"';
4. nginx 설정 syntax check
nginx -t
5. nginx 재기동
service nginx restart
service nginx status



받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/868

Pre-Built Package를 이용하여 설치하는 경우

01. Install the prerequisites
sudo yum install yum-utils

02. Repository 생성
vi /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
03. Default로는 stable 버전으로 설정되어 있으나 mainline을 사용하고자 할 경우
sudo yum-config-manager --enable nginx-mainline

04. nginx 설치
sudo yum install nginx

소스코드로부터 설치하는 경우

01. Nginx 다운로드
wget https://nginx.org/download/nginx-1.14.2.tar.gz
02. 압축풀기
tar -xvf nginx-1.14.2.tar.gz
03. 의존성 라이브러리 설치
sudo yum -y install gcc gcc-c++ make zlib-devel pcre-devel openssl-devel

04. nginx 폴더 생성
mkdir nginx
mkdir log run sbin
05. Configuration Option 설정

./configure \
--user=nginx                          \
--group=nginx                         \
--prefix=$HOME/nginx                   \
--sbin-path=$HOME/nginx/sbin           \
--conf-path=$HOME/nginx/nginx.conf     \
--pid-path=$HOME/nginx/run/nginx.pid         \
--lock-path=$HOME/nginx/run/nginx.lock       \
--error-log-path=$HOME/nginx/log/error.log \
--http-log-path=$HOME/nginx/log/access.log \
--with-http_gzip_static_module        \
--with-http_stub_status_module        \
--with-http_ssl_module                \
--with-pcre                           \
--with-file-aio                       \
--with-http_realip_module             \
--without-http_scgi_module            \
--without-http_uwsgi_module           \
--without-http_fastcgi_module

06. Compile the nginx source

make
make install
07. nginx configuration 변경
기본적으로 80 포트는 root 계정으로 실행해야 하므로 nginx.conf 파일에서 listen 8080으로 변경.
vi nginx.conf
08. nginx oepration shell script 생성
[nginx 시작]
vi start.sh
#!/bin/bash
./sbin/nginx
[nginx 종료]
vi stop.sh
#!/bin/bash
./sbin/nginx -s stop

[nginx 재시작]
vi restart.sh
#!/bin/bash
./sbin/nginx -s reload

[nginx 설정 파일 확인]
vi check.sh
#!/bin/bash
./sbin/nginx -t

09. 확인
시작 : sh start.sh &
브라우저에서 localhost:8080 호출하여 [Welcome to nginx!] 내용 확인
종료 : sh stop.sh

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/833


Summary
(요약)

기존 어플리케이션을 마이크로서비스로 마이그레이션하는 과정은 어플리케이션 현대화의 한 형태이다. 어플리케이션을 처음부터 다시 작성하여 마이크로서비스로 옮기면 안 된다. 대신에, 어플리케이션을 일련의 마이크로서비스로 점차적으로 리팩토링해야 한다. 여기에 사용할 수 있는 3가지 전략이 있다. 새로운 기능을 마이크로서비스로 구현한다. 비즈니스 컴포넌트와 데이터 액세스 컴포넌트에서 프리젠테이션 컴포넌트를 분리한다. 기존의 모듈을 monolith에서 마이크로서비스로 변환한다. 시간이 지날수록 마이크로서비스의 수는 증가하고, 개발팀의 민첩함과 속도는 증가할 것이다.

more..


받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/785