일상의 정리

Reverse Proxy 뒤의 Spring Boot가 http로 redirect되는 문제

리눅스/설치

Reverse Proxy 서버로 Nginx를 사용하고, Application Server 로 tomcat / spring boot 를 사용 시, https 요청에 대해 웹앱에서 발생되는 redirection을 무조건 http로 처리하게 된다.

https/http 2개의 포트를 동시에 열어서 http를 https 로 자동 redirection 하는 경우에는 문제를 못 느끼지만 http(80) port를 열지 않고 https(443) port만 열어서 운영을 하게 될 경우 웹앱의 redirection 은 모두 connect 에러가 발생되게 된다.

해결방법

  • 인터넷을 검색해 보면 여러가지 해결 방법이 나오는데 나의 경우에는 일반적인 방법이 실제로 되지 않았다.
  • 실행 환경은 Nginx v1.20.1 / Tomcat 10.1.13 / OpenJDK 17.0.6 이었다.
  • 해결을 위해서는 nginx.conf 와 spring boot 의 application.properties 2군데에 설정을 추가해 줘야 한다.

nginx.conf 에는 아래 구문이 설정 되어 있어야 한다.

location / {
    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_set_header X-Forwarded-Host $server_name;
    proxy_set_header X-Forwarded-Proto $scheme;
}

application.properties 에는 맨 아래 아래 구문이 필요하다.

server.forward-headers-strategy =FRAMEWORK

이렇게 설정하고 nginx 와 tomcat을 모두 재시작 하면 http, https 에 맞게 변경되어서 redirection 된다.

Informix 정리

프로그래밍/C++

docker 로 Informix developer 실행하기 (아래 사이트 참고)

https://github.com/informix/informix-dockerhub-readme/blob/master/14.10.FC9W1/informix-innovator-c.md

docker run -it --name ifx -h ifx --privileged -p 9088:9088 -p 9089:9089 -p 27017:27017 -p 27018:27018 -p 27883:27883 -e LICENSE=accept ibmcom/informix-developer-database:latest
docker start ifx
docker stop ifx

[[docker shell]]
docker exec -it ifx bash
$ dbaccess - -

 

개발 시 환경 설정

먼저 Informix SDK 를 압축을 풀어서 설치하고 설치한 위치를 INFORMIXDIR 환경 변수에 넣어 줘야 한다.

그 후 $INFORMIXDIR/etc/sqlhosts 파일에 Informix 서버의 정보를 설정해 준다.

만약 CLI 모드로 접속을 할 경우에는 odbc.ini 에 설정 정보를 넣어 주고 환경 변수도 설정해 주어야 한다.

 export INFORMIXSERVER=informix
 export INFORMIXDIR=/opt/IBM/Informix_Client-SDK
 export LD_LIBRARY_PATH="$INFORMIXDIR/lib:$INFORMIXDIR/lib/esql:$INFORMIXDIR/lib/cli"
 export ODBCINI=$INFORMIXDIR/etc/odbc.ini

 

IKE v2 server port 바꾸기

리눅스/설치

Orange-pi 에 설치한 방화벽이 어떤 이유인지 막히는 경우가 있는 듯 하다.

이런 경우 포트를 막는 경우가 많아서 서버 Port 변경방법에 대해 정리한다.

아래 내용은 8081 포트로 접속을 하도록 변경하는 것임

/etc/strongswan.d/charon.conf 파일에 아래 내용 추가 (charon { } 사이에 추가)
port=8080
port_nat_t=8081

/etc/ipsec.conf 에 아래 내용추가 (rightauth 아래 넣으면 됨)
rightikeport=8081

iptables 의 UDP Access rule에서 500/4500 을 8080/8081 로 변경

strongswan 재시작

Iptables rule reload

 

위와 같이 한 후 Android의 VPN 프로파일 수정에 가서 Advanced setting 을 선택 후

server port 에 8081을 입력한 후 저장

접속 테스트를 하면 8081 포트로 접속된다.

GDB 디버깅 시 SIGPIPE 무시하기

프로그래밍/C++

GDB로 네트워크 프로그램을 디버깅 할 경우 SIGPIPE 시그널로 로 멈추는 경우가 발생한다.

SIGPIPE는 끊어진 소켓에 대해 쓰기 동작을 실행할 경우 발생하며, 실제로 처리를 제대로 했다면 에러가 아니므로 디버깅할 때는 무시하는 게 편하다.

이 때 디버그 실형 명령 전에 아래 명령을 입력해 주면 해당 시그널을 무시해 준다.

handle SIGPIPE nostop noprint pass
handle SIGINT nostop noprint pass

debconf: unable to initialize frontend: Dialog

리눅스/설치

apt update 시

debconf: unable to initialize frontend: Dialog
debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76.)
debconf: falling back to frontend: Readline

위와 같은 메시지가 나올 경우 아래의 패키지를 설치해 준다.

apt -y install dialog

 

CentOS 7 에 redis 최신버전 (7.0.4) 설치

리눅스/설치

CentOS 7 에 redis 를 설치할 경우 기본 설치는 3.x 대이다.

최신 버전인 7.0.4 를 설치하려면 소스 컴파일을 하거나 아래의 방법을 이용하면 된다.

1. 먼저 리눅스를 최신버전으로 업데이트 한다.

sudo yum -y update

2. REMI Repository를 추가한다.

sudo yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

3. REMI 리포지트리의 Redis를 설치한다.

sudo yum --enablerepo=remi install redis

설치가 끝난 후 설치 정보는 아래와 같다

rpm -qi redis
Name        : redis
Version     : 7.0.4
Release     : 1.el7.remi
Architecture: x86_64
Install Date: 2022년 09월 14일 (수) 오후 02시 03분 20초
Group       : Applications/Databases
Size        : 5356920
License     : BSD
Signature   : DSA/SHA1, 2022년 07월 18일 (월) 오후 11시 27분 20초, Key ID 004e6f4700f97f56
Source RPM  : redis-7.0.4-1.el7.remi.src.rpm
Build Date  : 2022년 07월 18일 (월) 오후 11시 26분 14초
Build Host  : builder.remirepo.net
Relocations : (not relocatable)
Packager    : Remi Collet
Vendor      : Remi's RPM repository <https://rpms.remirepo.net/> #StandWithUkraine
URL         : http://redis.io
Bug URL     : https://forum.remirepo.net/
Summary     : A persistent key-value database

Ubuntu 20.04 redis 최신버전 (7.0.4) 설치하기

리눅스/설치

Ubuntu 기본 레파지토리의 redis 버전은 5.x 이므로 아래와 같이 redis 최신 버전을 설치할 수 있다.

sudo add-apt-repository ppa:redislabs/redis
apt update
apt install -y redis-server

vs code + CMake 디버깅 인수 전달하기

프로그래밍

vs code 프로젝트를 CMake로 구성 시 vs code F5로는 CMake 프로젝트 디버깅이 안된다.

따라서 Ctrl-F5로 디버깅을 진행해야 하는 데 이 때 인수 전달이 필요할 경우 아래 방법을 사용해야 한다.

1. .vscode 폴더에 settings.json 파일을 생성

2. 아래 내용과 같이 전달할 인수를 지정

{
    "cmake.debugConfig": {
        "args": [
            "arg1", "arg2", "arg3"
        ]
    }
}
이 후 Ctrl-F5 로 디버깅을 할 수 있다.

우분투 Strongswan 설치 시 접속 후에 인터넷 안될 때

리눅스/설치

Ubuntu 20.04 에 Strongswan 설치한 경우

설치 참고 : https://tdoodle.tistory.com/59

클라이언트에서 정상적으로 접속은 되지만, 그 이후 인터넷이 안될 때 

구글링을 해 보면 거의 모든 경우 마스커레이딩 설정 + sysctl 에 net.ipv4.ip_forward 설정을 체크하라고 되어 있다.

사실 99% 위의 문제라고 볼 수 있지만,

우분투 최신 버전 중 일부 기본 iptables 설정에 아래와 같은 라인이 들어 있는 경우 아래 라인이 문제가 될 수 있다.

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

/etc/iptables/rules.v4 파일에서 위 구문을 코멘트 하고 재실행 하면 정상적으로 실행된다.

CMake Error: Could NOT find PostgreSQL 발생 시 해결방법

프로그래밍/C++

CentOS 8 기본 Cmake 에서 postgresql를 찾도록 할 경우 아래와 같은 CMake Error 가 발생할 수 있다. (주로 OS 디폴트 rpm을 설치한 경우에 발생한다).

CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
  Could NOT find PostgreSQL (missing: PostgreSQL_TYPE_INCLUDE_DIR) (found
  version "12.4")

위와 같은 경우 발생 시 아래 명령으로 파일을 수정한다.
아래서 파일의 위치는 위 에러메시지에 표시된 링크에 나와 있는 위치에 있다.

vi /usr/share/cmake/Modules/FindPostgreSQL.cmake

파일을 열어서 아래 부분을 찾는다.

set(PostgreSQL_KNOWN_VERSIONS ${PostgreSQL_ADDITIONAL_VERSIONS}
    "10" "9.6" "9.5" "9.4" "9.3" "9.2" "9.1" "9.0" "8.4" "8.3" "8.2" "8.1" "8.0")

위 부분을 찾으면 아래와 같이 위에 포함되어 있지 않은 버전을 수동으로 추가해 준다 ("13 "12" "11" 부분).

set(PostgreSQL_KNOWN_VERSIONS ${PostgreSQL_ADDITIONAL_VERSIONS}
    "13" "12" "11" "10" "9.6" "9.5" "9.4" "9.3" "9.2" "9.1" "9.0" "8.4" "8.3" "8.2" "8.1" "8.0")

위와 같이 수정 후에 다시 cmake 를 해 주면 정상적으로 작동한다.