콘텐츠로 건너뛰기
  • 홈
  • 카테고리
  • 최근
  • 태그
  • 인기
  • 사용자
  • 그룹
축소
브랜드 로고

AskFront 포럼

navystackN

navystack

@navystack
전역 중재자
소개
게시물
69
토픽
12
Shares
0
그룹
1
팔로워
1
팔로잉
0

게시물

최근 최고 찬반이 팽팽한

  • 작업 스케줄러를 통해서 인증서 자동갱신 관련 질문
    navystackN navystack

    @hojin0716 갱신은 한 달 전부터 됩니다. 강제로 하고 싶으면 --force를 붙이면 됩니다.
    당연히 정상적으로 종료 되었으니 로그에서 아무 문제가 없다고 뜨는 것이 정상인겁니다.
    강제 옵션을 넣지 않았으니, 갱신이 되지 않는 것도 정상이구요.

    #!/bin/bash
    
    ## SPDX-License-Identifier: MIT
    
    # 변수 설정
    ACME_HOME="/usr/local/share/acme.sh"
    DOMAIN="navystack.com"
    
    # SSL 인증서 갱신 및 로그 출력
    log_output=$($ACME_HOME/acme.sh --cron --home $ACME_HOME)
    
    # 다음 갱신 시간 파싱
    next_renewal_time=$(echo "$log_output" | grep -oP 'Next renewal time is: \K[^ ]+')
    next_renewal_time_kst=$(date -d "$next_renewal_time" +%Y-%m-%dT%H:%M:%S)
    
    # 갱신할 필요가 없는 경우
    if ! echo "$log_output" | grep -q "to force to renew"; then
        echo "$log_output"
    else
        # 인증서 갱신 생략
        echo "인증서 갱신을 생략합니다."
        echo "갱신 가능 시간은 한국 기준 $next_renewal_time_kst 입니다."
        echo "따라서, 인증서 배포를 생략합니다."
        exit 0
    fi
    
    # 인증서 배포
    deploy_output=$($ACME_HOME/acme.sh --deploy --home $ACME_HOME -d "$DOMAIN" --deploy-hook synology_dsm)
    
    # 배포 중 오류 처리
    if [ $? -ne 0 ]; then
        echo "인증서 배포 중에 오류가 발생했습니다:"
        echo "$deploy_output"
        exit 1
    fi
    
    echo "인증서 배포가 완료되었습니다."
    

    이렇게 수정해보세요 CA가 ZeroSSL 일 경우 입니다.
    구글 인증서 (google GTS), Let's Encrypt 라면 아래의 글을 참고해보세요.

    시놀로지 클라우드플레어 와일드 카드 인증서 발급 (acme.sh 사용)

    고맙습니다.

    뉴비를 위한 질문 공간

  • 가입인사는 어디서 하나요?
    navystackN navystack

    @busker 님 안녕하세요!
    가입 인사 카테고리는 아쉽게도 아직 없습니다.
    조금 부끄럽기도 해서요.

    @busker 님께 필요한 정보가 있는 포럼이 되도록 노력하겠습니다 :)

    입동이 다가오고 있습니다.
    늘 감기 조심하시고, 따뜻하게 입고 다니세요 :)
    또한, 편안한 밤 보내시길 기원합니다.

    감사합니다.

    Comments & Feedback

  • nodebb 잠깐 사용해본 경험담
    navystackN navystack

    생각해보니까 형태소를 색인하는 형태로 되어있는데, 단어의 일부분이면 검색이 안될수 있겠네요 로직을 고민해서 업데이트 해보겠습니다. 좋은 의견 감사합니다.

    CMS (콘텐츠 관리 시스템)

  • Wget 웹서버 캐시 최적화 Nginx FastCGI 등 (Preload Cache)
    navystackN navystack

    웹서버에서 캐시를 적극적으로 활용하는 경우, 처음에는 요청에 대한 응답이 느릴 수 있습니다. 이는 캐시에 저장된 내용이 없기 때문입니다.

    wget -m -p -E -k https://navystack.com/
    

    이렇게 긁어주면 해당 도메인에 대해서 모든 페이지를 다운로드 합니다.
    따라서 캐시도 새로 생성되며, 접속자는 보다 빠른 응답을 받을 수 있습니다.

    @hourly rm -rf /tmp/ramdisk/navystack.com/ && wget -m -p -E -k -P /tmp/ramdisk/ https://navystack.com/
    

    이렇게 Cron 작업으로 해주셔도 되구

    조금 더 우아하게 스크립트를 만들어 주어도 되겠죠.

    #!/bin/bash
    
    # 임시 디렉터리 설정
    tmp_dir="/tmp/ramdisk/navystack.com/"
    
    # 이전 캐시 제거
    rm -rf "$tmp_dir"
    
    # 웹사이트 다운로드
    wget -m -p -E -k -P "$tmp_dir" https://navystack.com/
    
    

    물론 /tmp/ramdisk/의 경로는 제가 램디스크를 미리 만들어둔 경로 입니다.

    Linux (리눅스) 웹페이지 속도 fastcgi 최적화 preload cache

  • nodebb 잠깐 사용해본 경험담
    navystackN navystack

    @busker 쨘 그런 당신을 위해 DB search 한국어용 만들어 두었습니다. 컨테이너 채로 사용하시는게 편하실거에요 :)
    docker pull netvpc/nodebb
    https://github.com/netvpc/nodebb

    docker-compose는 업데이트가 안되었네요.
    시간나면 업데이트 하겠습니다.
    일반 nodebb용 docker-compose와 같습니다.

    지금보니 mecab 사전을 업데이트 해야하네요.. ㅠㅠ
    곧 사전 추가하겠습니다

    CMS (콘텐츠 관리 시스템)

  • Wget 웹서버 캐시 최적화 Nginx FastCGI 등 (Preload Cache)
    navystackN navystack

    @busker Ramdisk 자체는 그렇지만, Wget으로 긁어주는 것은, 캐시를 생성해 주기 위함입니다.
    PHP를 사용하는 경우, FastCGI등을 사용하거등요 :)

    일반 CDN을 사용할 때도 캐시를 생성해 줄만 합니다.
    1순위도 캐시 2순위도 캐시입니다 :)

    Linux (리눅스) 웹페이지 속도 fastcgi 최적화 preload cache

  • NodeBB Nginx Configuration Optimization 엔진엑스 성능 최적화
    navystackN navystack

    Nodebb 성능 최적화를 위한 빠른 요약

    Nginx는 정적 파일을 직접 제공하고, 동적 요청은 Node.js 서버로 프록시

        location /socket.io/ {
            proxy_pass http://nodes;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            add_header pushed "wss";
         }
    
        location @nodebb {
            proxy_pass http://nodes;
        }
        
        
        
        location ~ ^/assets/(.*) {
            root /usr/src/app/;
        
            try_files /build/public/$1 /public/$1 @nodebb;
        
            add_header pushed "assets";
        
            add_header Cache-Control "max-age=86400";  # 1 day
        
        }
        
        
        
        location /plugins/ {
            root /usr/src/app/build/public;
            add_header pushed "plugins";
            try_files $uri @nodebb;
            add_header Cache-Control "max-age=86400";  # 1 day
        }
        
        
        
        location / {
        
            proxy_pass http://nodes;
        
            add_header pushed "main";
        
        }
    
      nginx:
        container_name: nginx-nodebb
        image: nginx:latest
        logging:
          driver: json-file
          options:
            tag: '{{.ImageName}}|{{.Name}}|{{.ImageFullID}}|{{.FullID}}'
            max-size: '10m'
            max-file: 100
        restart: unless-stopped
        volumes:
          - nodebb-build:/usr/src/app/build:ro
          - nodebb-uploads:/usr/src/app/public/uploads:ro
          - nodebb-modules:/usr/src/app/node_modules:ro     
          - ./nginx:/etc/nginx/conf.d/
        networks:
          - internal
          - traefik-network
        depends_on:
          - nodebb
    
    

    default.conf

    upstream nodes {
        ip_hash;
        server nodebb-askfront:4567;
        keepalive 32;
    }
    
    server {
        listen 80;
        server_name _;
    
        set_real_ip_from 0.0.0.0/0;
        real_ip_header X-Forwarded-For;
        real_ip_recursive on;
    
        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-Proto https;
        proxy_set_header Content-Disposition "attachment";
    
        proxy_redirect off;
        proxy_http_version 1.1;
    
        proxy_hide_header X-Powered-By;
        proxy_hide_header X-Dns-Prefetch-Control;
        proxy_hide_header X-Download-Options;
    
        location /socket.io/ {
            proxy_pass http://nodes;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            add_header pushed "wss";
    
        }
    
        location @nodebb {
            proxy_pass http://nodes;
        }
    
        location ~ ^/assets/(.*) {
            root /usr/src/app/;
            try_files /build/public/$1 /public/$1 @nodebb;
            add_header pushed "assets";
            add_header Cache-Control "max-age=86400";  # 1 day
        }
    
        location /plugins/ {
            root /usr/src/app/build/public;
            add_header pushed "plugins";
            try_files $uri @nodebb;
            add_header Cache-Control "max-age=86400";  # 1 day
        }
    
        location / {
            proxy_pass http://nodes;
            add_header pushed "main";
        }
    }
    
    
    
    1. upstream nodes: Node.js 서버의 업스트림을 정의.
      ip_hash는 세션 퍼시스턴스를 제공하기 위해 클라이언트 IP를 기반으로 한 서버로 트래픽을 라우팅

    2. server: HTTP 서버 블록을 정의. 포트 80에서 리스닝하며, 모든 도메인을 허용.
      (상황에 맞게 적절하게 수정)

    3. proxy_set_header: 프록시로 전달되는 요청 헤더를 설정. 실제 IP 주소와 포트, 프로토콜 등을 설정.

    4. proxy_hide_header: 프록시 응답에서 특정 헤더를 숨김.

    5. proxy_redirect: 프록시 리디렉션을 비활성화.

    6. gzip 및 brotli: Gzip 및 Brotli 압축을 사용하여 지정된 MIME 타입의 응답을 압축합니다. (nodebb 자체가 요청 횟수가 많으므로 최대한 적정한 크기만 압축)

    7. location 블록들: URL 경로에 따라 요청을 처리.

    • location @nodebb: @nodebb라는 이름의 location 블록으로 요청을 전달.
      프록시 패스를 사용하여 Node.js 서버로 요청을 전달.

    • location ~ ^/assets/(.*): 정규 표현식을 사용하여 URL 경로가 /assets/로 시작하는 요청을 처리.
      이 경우에는 정적 파일을 제공하기 위해 지정된 디렉토리에서 파일을 찾고, 없으면 Node.js 서버로 요청을 전달.

    • location /plugins/: /plugins/의 요청을 처리.
      이 경우에는 정적 파일을 제공하기 위해 지정된 디렉토리에서 파일을 찾고, 없으면 Node.js 서버로 요청을 전달.

    • location /: 기본적으로 모든 요청은 Node.js 서버로 전달.

    CMS (콘텐츠 관리 시스템) nginx nodebb 최적화
  • 로그인

  • 계정이 없으신가요? 등록

  • 검색하려면 로그인하거나 등록하세요.
이용약관
개인정보 처리방침
  • 첫 게시물
    마지막 게시물
0
  • 홈
  • 카테고리
  • 최근
  • 태그
  • 인기
  • 사용자
  • 그룹