ReserveProxy 를 이용해서 gitlab을 운영하면, gitalb site 안에 있는 링크가 깨지는 경우가 있습니다. 이를 해결하기 위해서는 아래 파일에 dns domain 주소로 변경하면 됩니다.

아래와 같이 시스템이 구성이 되어 있는 상태입니다.

flowchart TD
apache(gitlab.xxxxxx.com) --proxy--> gitlab(10.2.2.2:8000)

설정

apache 설정

<VirtualHost *:443>
    ServerName gitlab.xxxxxxxx.com

    ProxyRequests Off       # Reserve Proxy Mode
    ProxyPreserveHost On
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyPass / https://192.168.20.100/ nocanon
    ProxyPassReverse / https://192.168.20.100/

    <Location />
        Order Deny,Allow
        Deny from all
        Allow from 162.21
    </Location>

    AllowEncodedSlashes NoDecode
    ErrorLog logs/gitlab_error_log
    TransferLog logs/gitlab_access_log
    LogLevel warn

    SSLEngine on
    SSLProxyEngine On

    SSLCertificateFile "/etc/pki/tls/certs/xxxxxxxxxx.com.crt"
    SSLCertificateKeyFile "/etc/pki/tls/private/xxxxxxxxxx.com.key"
    SSLCertificateChainFile "/etc/pki/tls/RootChain/chain_all_ssl.crt"
    SSLCACertificateFile "/etc/pki/tls/RootChain/chain_ssl.crt"


    CustomLog "/etc/httpd/logs/gitlab_" \
              "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

도메인주소로 proxy 해서 사용해서 사용할 것이라 ProxyPass 부분을 https 로 설정해 주었습니다.
필수옵션:

  1. nocanon
  2. AllowEncodedSlashesgitlab.rb 설정
external_url 'https://gitlab.domain.net
puma['enable'] = true
puma['ha'] = false
puma['worker_timeout'] = 60
puma['worker_processes'] = 2
puma['min_threads'] = 1
puma['max_threads'] = 4
puma['listen'] = '127.0.0.1'
puma['port'] = 8001
puma['socket'] = '/var/opt/gitlab/gitlab-rails/sockets/gitlab.socket'
puma['somaxconn'] = 1024
puma['pidfile'] = '/opt/gitlab/var/puma/puma.pid'
puma['state_path'] = '/opt/gitlab/var/puma/puma.state'
puma['log_directory'] = "/var/log/gitlab/puma"
puma['exporter_enabled'] = false
puma['exporter_address'] = "127.0.0.1"
puma['exporter_port'] = 8083
letsencrypt['enable'] = false
  • external_url 에 domain 주소로 설정을 하면 letencrypt 기능이 자동으로 동작하는 것 같다. 그래서, 옵션으로 letsencrypt 부분을 false 처리 해 주었습니다.

Optional

위에 설정으로 gitlab 에 접속을 할 수 없을 경우에 아래와 같은 옵션을 사용할 수 있습니다.

1. /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml 에 있는 정보를 변경

nginx --> gitlab 으로 proxy로 연결해서 사용하게 되면, 링크가 깨지는 현상이 발생한다. 이를 해결하기 위해서 아래와 같은 설정으로 임시 해결할 수 있다. 단, 다른 기능이 또 안될 수 있다. (이 부분은 아직 해결을 못하고 있다.) 예를 들어 gitlab-runner 에 대한 설정을 하려고 들어가는 화면에서 링크가 깨진다.

production: base
  #
  # 1. GitLab app settings
  # ==========================

  ## GitLab settings
  gitlab:
    ## Web server settings (note: host is the FQDN, do not include http://)
    host: gitlab.xxxxxxxxxxxxx.com
    port: 443
    https: false

2. gitlab restart

gitlab-ctl restart
반응형

'개발' 카테고리의 다른 글

Mac이 AI PC로서 최고인 이유  (0) 2024.02.03
2024년 프로그래밍 랭킹  (1) 2024.01.02
elixir vs rust 비교  (1) 2023.12.27
vscode dev containers  (1) 2023.12.22
svn to git 마이그레이션 (맥)  (0) 2023.12.13

가난한 세팅으로 SSL 적용하기

Imgur

집 인터넷은 이렇게 구성되어 있습니다
따로 도메인을 구매하지는 않은 상태이고 외부에서 내부로 접속하기 위해서 기본 DDNS로 설정해서 사용하고 있습니다.

ASUS 라우터에서는 DDN 서비스와 동시에 Let's Encrypt를 통해서 SSL/HTTPS 인증을 해 주는 기능을 가지고 있습니다. 이 인증파일을 가지고 Raspberry Pi에서 운영하고 있는 NGINX 서비스에서 적용할 수 있습니다

SSH를 통해 ASUS 공유기에 접속을 하고 인증파일을 찾습니다.

find / -iname *pem
admin@BLUE_CAVE:/tmp/home/root# find / -iname *pem
/jffs/.le/********.asuscomm.com/fullchain.pem
/jffs/.le/********.asuscomm.com/cert.pem
/jffs/.le/********.asuscomm.com/chain.pem
/rom/dh2048.pem

경로는 /jffs/.le/[DDNS명]으로 기본설정이 되는 것 같습니다.
해당 폴더로 들어가 보면 검색되는 파일명들과는 달리 4개의 파일이 있습니다.

cert.pem
chain.pem
domain.key
fullchain.pem

이 파일들을 nginx 설정엥 삽입 해야 합니다.

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name ********.asuscomm.com; 

    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
    ssl_prefer_server_ciphers on;

    ssl_certificate /etc/nginx/ssl/********.asuscomm.com/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/********.asuscomm.com/domain.key;
    ssl_trusted_certificate /etc/nginx/ssl/********.asuscomm.com/chain.pem;

    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://127.0.0.1:3001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_next_upstream error timeout http_502 http_503 http_504;
    }
}

현재는 Proxy 형태로 서비스하고 있는 port를 연결하고 있습니다.

SSL/TLS 설정 파일을 세팅합니다.

반응형

+ Recent posts