服务器https证书配置

前置:需要域名托管到 cloudflare

今天下午终于申请到了oracle服务器,所以马上配置一下域名和https的证书,刚好写个文章记录下

安装 acme.sh

curl https://get.acme.sh | sh
source ~/.bashrc

这个时候会自动在根目录下生成 .acme.sh文件夹
以及自动安装创建crontab任务

去 cloudflare 创建token

这个主要是为了在生成证书的时候,acme.sh去检查域名的所有权,只有你有权限访问这个域名才会生成证书,程序会自动创建DNS记录检查

Cloudflare API Token 生成步骤

  1. 进入创建页面

访问 API Tokens 页面

  1. 创建自定义令牌

点击 “Create Token” → 选择 “Create Custom Token”

  1. 配置令牌
  • Token Name: 给令牌起个描述性名称(如 “DNS Management”)
  • Permissions: 选择所需权限
    • 例如:Account → Account Analytics → Read
    • 或 Zone → DNS → Edit
  • Account Resources: 选择要作用域的账户(可选)
  • Client IP Filtering: 可选,限制 IP 访问
  • TTL: 设置过期时间(可选)
  1. 确认并创建
  • 点击 “Continue to summary” 查看详情
  • 点击 “Create Token”
  1. 保存令牌

:warning: 重要:令牌只显示一次,立即复制保存到安全位置

把生成的 cloudflare token 保存到 .bashrc

export CF_Token="xxx"
export CF_Account_ID="xxx"

修改acme.sh使用letsencrypt

acme.sh 模式使用的不是这个,另外一个还要邮箱什么配置,太麻烦,我通常直接使用letsencrypt

acme.sh --set-default-ca --server letsencrypt

申请证书和安装

acme.sh --issue \
  --dns dns_cf \
  -d *.domain.com \
  -d domain.com

申请之后进行安装

acme.sh --install-cert -d *.domain.com \
--key-file       /[path]/domain.com.key \
--fullchain-file /[path]/domain.com.pem \

你可以把你的证书放到指定目录

如果直接本机安装的nginx,可以直接放到nginx目录 /etc/nginx/ssl

我使用的是docker,所以在nginx的docker-compose.yml同级目录创建一个 ssl 目录
然后把 [path] 替换成这个路径即可

docker 配置

version: "3.9"

services:
  nginx:
    image: nginx:latest
    container_name: nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./conf.d:/etc/nginx/conf.d # 配置目录
      - ./ssl:/etc/nginx/ssl # 证书目录
    restart: always

下面就可以在conf.d目录下创建你的配置,比如 openlist.conf


# OpenList

server {
    listen 80;
    listen [::]:80;
    server_name openlist.domain.com;

    return 301 https://$host$request_uri;
}

# HTTPS 主配置
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name openlist.domain.com;

    client_max_body_size 100m;

    ssl_certificate /etc/nginx/ssl/domain.com.pem;
    ssl_certificate_key /etc/nginx/ssl/domain.com.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;

    location / {
        proxy_pass http://172.17.0.1:5244;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

这样就大功告成

不过要注意 openlist.conf的 proxy_pass代理路径,要配置好
这个 http://172.17.0.1 路径可以访问到主机开放的端口,但是没找到参考文档,我在服务器上可以正常使用。

如果你的服务都是docker的话,可以创建一个公共网络,这样就不用担心路径错误

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容