JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

「 原创 」HTTPS 更加安全,但证书贵?手把手教你免费部署HTTPS

wys521 2024-10-21 10:40:32 精选教程 29 ℃ 0 评论


Docker 内部署的 Nginx,结合免费的SSL Let's Encrypt 部署 HTTPS,自动更新证书有效期,给你的浏览器地址栏加个绿色的锁,让你的站点更加安全。


镜像

docker pull certbot


配置

注:修改 nginx 配置,在 server 模块下新增如上配置,注意路径变更,且该路径为 docker 下的路径。

location ^~ /.well-known/acme-challenge/ {
    default_type "text/plain";
    root /www/makeit;
}
location = /.well-known/acme-challenge/ {
    return 404;
}


运行

注:这里采用 webroot 验证方式,--webroot -w 所配置的参数为 docker 下的目录。

docker run -it --rm --name certbot \
-v /makeit/docker/nginx/letsencrypt:/etc/letsencrypt \
-v /var/lib/letsencrypt:/var/lib/letsencrypt \
-v /makeit/web/home:/www/makeit \
certbot/certbot certonly --webroot -w /www/makeit \
--email makeit@makeit.vip \
-d www.makeit.vip


有效期

# 可根据如下命令查看证书有效时长
# -in 后面为刚刚生成时存放的证书路径
openssl x509 -noout -dates -in /makeit/docker/nginx/letsencrypt/live/www.makeit.vip/cert.pem


自动更新

新建脚本

touch renew.sh

脚本内容

#!/bin/bash

docker run -it --rm --name certbot \
-v /makeit/docker/nginx/letsencrypt:/etc/letsencrypt \
-v /var/lib/letsencrypt:/var/lib/letsencrypt \
-v /makeit/web/home:/www/home \
certbot/certbot certonly --webroot -w /www/home \
--force-renew \
--email makeit@makeit.vip \
-d www.makeit.vip

docker kill nginx

docker start nginx

修改权限

chmod +x /makeit/docker/nginx/renew.sh

定时任务(每月1号执行1次脚本)

crontab -e

0 0 1 * * /makeit/docker/nginx/renew.sh


PFS键值

PFS(perfect forward secrecy),中文可叫做完全前向保密。要求一个密钥只能访问由它所保护的数据;用来产生密钥的元素一次一换,不能再产生其他的密钥;一个密钥被破解,并不影响其他密钥的安全性

mkdir /makeit/docker/nginx/ssl/private -p
cd /makeit/docker/nginx/ssl/private
openssl dhparam 2048 -out dhparam.pem


配置示例

server {
    listen	80;
    listen	443 ssl;
    server_name	makeit.vip www.makeit.vip;

    root /www/makeit;

    access_log /var/log/nginx/access.log main;
    error_log /var/log/nginx/error.log warn;

    ssl_certificate             letsencrypt/live/www.makeit.vip/fullchain.pem;
    ssl_certificate_key         letsencrypt/live/www.makeit.vip/privkey.pem;
    ssl_protocols               TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers                 ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_prefer_server_ciphers   on;
    ssl_session_timeout         5m;
    ssl_session_tickets         on;
    ssl_dhparam                 ssl/private/dhparam.pem;

    location / {
        index   index.html index.htm index.php index.jsp;
    }

    error_page  500 502 503 504 /50x.html;
    location /50x.html {
        root /www;
    }

    location ~ /\. {
        return 403;
    }

    location ~* ^.+\.(jpg|jpeg|gif|png|bmp|css|js|swf)$ {
        access_log off;
    }

    location ~ \.php$ {
        root           /www/makeit;
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_param  PATH_INFO        $fastcgi_path_info;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    location ~ /\.ht {
        deny  all;
    }
}


NGINX

注:后3个 -v 映射的目录,请都映射在 nginx 容器的根目录下。

docker run \
--name nginx \
-d -p 80:80 -p 443:443 --restart=always \
-v /makeit/web:/www \
-v /makeit/logs/nginx:/var/log/nginx \
-v /makeit/docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \
-v /makeit/docker/nginx/conf.d:/etc/nginx/conf.d \
-v /makeit/docker/nginx/letsencrypt:/etc/nginx/letsencrypt \
-v /makeit/docker/nginx/ssl:/etc/nginx/ssl \
--link php nginx


查看效果

证书已经生效,浏览器已经加了“锁”标识,成功啦 ~

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表