#!/bin/sh set -eu NGINX_PORT="${NGINX_PORT:-8443}" NGINX_SERVER_NAME="${NGINX_SERVER_NAME:-_}" SSL_CERT_DIR="${SSL_CERT_DIR:-/etc/nginx/certs}" SSL_CERT_FILE_NAME="${SSL_CERT_FILE_NAME:-cert.pem}" SSL_CHAIN_FILE_NAME="${SSL_CHAIN_FILE_NAME:-chain.pem}" SSL_KEY_FILE_NAME="${SSL_KEY_FILE_NAME:-privkey.pem}" UPSTREAM_HOST="${UPSTREAM_HOST:-360-player}" UPSTREAM_PORT="${UPSTREAM_PORT:-8360}" GENERATED_DIR="/etc/nginx/generated" GENERATED_CERT_PATH="${GENERATED_DIR}/fullchain.pem" GENERATED_KEY_PATH="${GENERATED_DIR}/privkey.pem" mkdir -p "${GENERATED_DIR}" normalize_pem_file() { pem_path="$1" # 去掉 CRLF 並確保結尾有換行,否則 cert 和 chain 接起來會黏成一行、nginx 讀不到。 awk ' { sub(/\r$/, "") print has_content = 1 } END { if (has_content) { print "" } } ' "${pem_path}" } build_cert_bundle() { cert_path="${SSL_CERT_DIR}/${SSL_CERT_FILE_NAME}" chain_path="${SSL_CERT_DIR}/${SSL_CHAIN_FILE_NAME}" key_path="${SSL_CERT_DIR}/${SSL_KEY_FILE_NAME}" if [ ! -f "${cert_path}" ]; then echo "Missing certificate file: ${cert_path}" >&2 exit 1 fi if [ ! -f "${chain_path}" ]; then echo "Missing chain file: ${chain_path}" >&2 exit 1 fi if [ ! -f "${key_path}" ]; then echo "Missing key file: ${key_path}" >&2 exit 1 fi normalize_pem_file "${cert_path}" > "${GENERATED_CERT_PATH}" normalize_pem_file "${chain_path}" >> "${GENERATED_CERT_PATH}" cp "${key_path}" "${GENERATED_KEY_PATH}" # 到期日印在 log 裡,容器一起來就看得到憑證還剩多久。 openssl x509 -in "${cert_path}" -noout -subject -enddate 2>/dev/null || true } write_nginx_config() { cat > /etc/nginx/conf.d/default.conf </dev/null || true } trap cleanup INT TERM nginx -g 'daemon off;' & NGINX_PID=$! wait "${NGINX_PID}"