由于自己的服务器又新开了几个服务,又需要80端口的映射又需要HTTPS来保证安全的,无法通过lnmp的证书直接签发,于是参考了好几篇文章并且尝试了好多次,这里就把自己的做法贴一下

环境配置

  • centos 7.6
  • lnmp 1.5

步骤

安装CertBot软件

wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
./certbot-auto

Nginx初次配置

CertBot在验证服务器域名的时候,会生成一个随机文件,然后通过HTTP访问你的这个文件,因此要确保你的Nginx配置好。

一般可以通过lnmp自带的命令添加一个与要生成证书的域名相同的vhost,指令如下

lnmp vhost add

然后编辑你的vhost对应的conf文件,一般在/usr/local/nginx/conf/vhost下,添加如下内容:

 location ~ /.well-known {
                allow all;
        }

检查语法错误并重载配置文件:

sudo service nginx reload

生成证书

参考指令如下:

~/certbot-auto \
certonly \
--agree-tos \
--webroot \
-w /home/wwwroot/{你的vhost名} \
-d {你的域名}

一般配置无误的话会提示

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
 /etc/letsencrypt/live/your.domain.com/fullchain.pem. Your cert
 will expire on 20XX-09-23. To obtain a new or tweaked version of
 this certificate in the future, simply run certbot again. To
 non-interactively renew *all* of your certificates, run "certbot
 renew"
 - If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
 Donating to EFF: https://eff.org/donate-le

这样证书就生成好了

配置conf文件并启用ssl

依旧打开之前的nginx配置文件,参考如下配置,将80端口重定向到https

server{
    listen 80;
    #listen [::]:80;
    server_name {你的域名} ;

    root  /home/wwwroot/{你的vhost名};

    location ~ /.well-known {
        allow all;
    }

    location / {
        return 301 https://leanote.kurolatz.me$request_uri;
    }
...ommitted
}

配置完成后在后面新增加一个server,监听443端口:

server {
    listen 443 ssl; 
    server_name {你的域名};

    ssl_certificate /etc/letsencrypt/live/{你的域名}/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/{你的域名}/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/{你的域名}/fullchain.pem;

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

    ssl_protocols TLSv1.2;
    ssl_ciphers EECDH+AESGCM:EECDH+AES;
    ssl_ecdh_curve secp384r1;
    ssl_prefer_server_ciphers on;

    ssl_stapling on;
    ssl_stapling_verify on;

    add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload";
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;

    root  /home/wwwroot/leanote.kurolatz.me;
    index index.html index.htm index.php default.html default.htm default.php;

    location / {
        proxy_pass http://127.0.0.1:{你的服务实际所用的端口};
        proxy_set_header Host $host:80;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

需要说明的是,这里我同时把自己原先放在80端口上的nginx端口转发也移动到了这边:

    location / {
        proxy_pass http://127.0.0.1:{你的服务实际所用的端口};
        proxy_set_header Host $host:80;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

这部分可以参考我之前的文章
全部修改完成后,再次重载配置文件:

sudo service nginx reload

参考链接

LNMP自动更新的免费SSL证书
私人云笔记 Leanote 服务端搭建指南 让自己的笔记无处不在
Docker 搭建私有云 Nextcloud
Nginx端口转发与Let’s Encrypt增加SSL认证
笔记:Let’s Encrypt 获取 TLS 证书(Webroot + Nginx)

发表评论

电子邮件地址不会被公开。 必填项已用*标注