使用Certbot开启https并保护所有二级域名-Nginx

序言

当不再满足使用域名+端口号访问一台服务器上不同项目时,我决定研究下如何实现二级域名方式访问。网上当然教程很多,但是我还是踩了不少坑,在此记录一下。

准备工作

按照官网的做法,安装EPEL等,有很多东西都是自带的,所以有可以跳过

yum -y install yum-utils
yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
yum install certbot python2-certbot-nginx

或者更简单,直接执行docker命令

docker run -it --rm --name certbot -v "/etc/letsencrypt:/etc/letsencrypt" -v "/var/lib/letsencrypt:/var/lib/letsencrypt" certbot/certbot certonly -d *.futatsu.fun -d futatsu.fun --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory

生成证书挂载进nginx

certbot certonly --standalone --email [email protected] -d *.futatsu.fun -d futatsu.fun

中间会要求你添加一条TXT记录在域名解析中,去添加。

主机记录 记录类型 线路类型 记录值
_acme-challenge TXT 默认 (certbot生成)

此时默认证书会生成在 ‘/etc/letsencrypt/live/你的域名/‘ 下,你可以选择重新挂载nginx把这个目录挂载进去,也可以手动cp,推荐重新挂载,这样将来更新证书时很方便。

设置二级域名

现在我希望把管理docker容器的portainer使用二级域名方式访问,即直接访问https://portainer.futatsu.fun,不需要访问9000端口,以下是设置

server {
    listen 80;
    listen 443 ssl;
    server_name  portainer.futatsu.fun;
#    old certs
#    ssl_certificate /cert/1_www.futatsu.fun_bundle.crt;
#    ssl_certificate_key /cert/2_www.futatsu.fun.key;

    ssl_certificate /cert/fullchain.pem;
    ssl_certificate_key /cert/privkey.pem;

    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header X-Xss-Protection 1;
    location / {
        proxy_pass https://futatsu.fun:9000;
    }
    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    }
}

同时又希望通过https://csv.futatsu.fun 访问csv转json工具

只需再配一个server即可,很简单。

#csv
server {
    listen 80;
    listen 443 ssl;
    server_name  csv.futatsu.fun;
    ssl_certificate /cert/fullchain.pem;
    ssl_certificate_key /cert/privkey.pem;

    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header X-Xss-Protection 1;

    location / {
        root   /usr/share/nginx/html/uploadcsv;
        index  index.html index.htm;
    try_files $uri $uri/ /index.html;
    }
    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    }
}

踩坑点

在设置http跳转https时,我遇到了坑点,我访问http://crv.futatsu.fun/abc,跳转成为https://crv.futatsu.fun/abcabc,原因如下。

#设置跳转时,不应该判断是否访问80端口,而应该判断是否scheme为https,否则会造成一次循环导致request_uri被添加两次。
#原来写法
    if ($server_port = 80) {
    rewrite 301 https://$host$request_uri;
    }
#现在写法
    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    }

目前面临问题

因为我是在域名解析-主机记录中,直接添加泛解析*,导致目前未被拦截的请求都会解析到主页上去,比如a.futatsu.fun相当于直接访问futatsu.fun。

解决方案1. 不适用泛解析,应该解析二级域名,这样其他直接没有解析即可,但是我不喜欢这样

接下来想做 访问不存在的二级域名,跳转到404页面。

原文地址:https://www.cnblogs.com/lizziuno/p/12160619.html

时间: 2024-08-02 15:48:57

使用Certbot开启https并保护所有二级域名-Nginx的相关文章

nginx开启https(免费的二级域名也可以)

来源:https://www.cnblogs.com/DouglasLuo/p/12258331.html 最近疫情很严重,开学也被延迟了.于是在家很闲啊.碰巧,前几天我租了个域名,就想用研究一下如何搭建https. 这篇文章将用到一下内容: 一个域名,DNS已经解析到vps的ip地址(免费的二级域名也可以). 一台vps(没有vps用网站空间也可以,但不在这篇文章的讨论范畴). nginx(httpd不在这篇文章的讨论范畴). 首先在vps上安装nginx,并开启端口实现可以在外网访问通过80

织梦开启二级域名(多站点)内容页图片无法显示的解决方法

用织梦建站时,有时候我们会给某栏目绑定二级域名,并开启织梦Dedecms开启多站点支持.但这样该栏目的文章中的图片就会无法显示了,这主要是因为织梦默认状况下,文章中调用图片的路径是相对路径,我们绑定了二级域名,导致图片路径错误,不能正常访问到图片. 解决方法很简单,思路就是让文章内容中的图片路径都用绝对路径调用.我们要做的操作主要针对两部分文章,第一部分是已经生成的文章图片路径更改.第二部分是让新生成的图片路径默认成绝对路径. 一.把已经生成的文章中的图片路径改成绝对路径 1.进入织梦后台--核

WordPress整站轻松开启HTTPS

近两年来HTTPS取代HTTP已经成为大势所趋.早在2014年google Chromium安全团队提议将所有的HTTP协议网站标注为不安全.现在,Chrome浏览器已经开始执行这一标准了.从 Chrome 56 开始,任何网页,如果有输入密码或者信用卡资料的,却没有使用 HTTPS,将被 Chrome 浏览器标识为不安全:逐步的,任何没有使用 HTTPS 协议的网页chrome浏览器都会被标识为”不安全”,或者 “Not Secure”. 从chrome 56 版本开始,查看网站的SSL证书的

Ubuntu下配置apache开启https

一.HTTPS简述随着网络的日常,信息安全越来越重要,传统的网站都是http协议明文传输,而HTTPS协议是由SSL+HTTP协议构建的可进行加密传输.身份认证的网络协议,比http协议安全. 那https到底是怎么开启的,随着疑问自己也了解https配置原理并在Ubuntu服务器上开启了https. 二.配置证书 配置https一个很重要的步骤就是配置证书. 1.创建证书 sudo apt-get install ssl-cert make-ssl-cert生成证书的方法有两种,一种是根据生成

为什么有必要对网站开启https?

-- 互联网HTTPS时代,开启HTTPS迫在眉睫!-- 2014年Google将未启用HTTPS传输的网站标记为不信任!2015年国内最大的搜索引擎百度率先实现了全站HTTPS加密!2016年淘宝天猫全站启用HTTPS!2016年360.搜狗等各大浏览器纷纷开启HTTPS加密!2016年微信小程序必须使用HTTPS!2017年苹果APP必须强制使用HTTPS传输!2018年...?HTTPS必将取代HTTP,成为互联网主流! 你还在等什么,赶紧开始部署吧. --互联网HTTPS时代,https

mac中apache开启https功能,本地发布安装app

mac中apache开启https功能,本地发布安装app 最近app进入收尾阶段,发包比较频繁.很多手机都不在测试证书中,所以使用的是企业证书打包. 每次上传到外网服务器都很慢,需要15分钟左右.想想还是自己本地mac做个服务器下载比较快一点. 所以学了下apache开启https的内容,本文记录了自己的学习过程. 1-先制作自己的签名证书 在前面的apache相关中,已经在mac上开启了apache,为了后面手机安装证书方便,我是在 /Library/WebServer/Documents/

Tomcat开启https

为了防止包监听,Https属于必须品,现在Web服务器基本上都有直接支持https的功能,这里记录一下在tomcat里面怎么开启https. 1. 生成Keystore (使用tomcat作为别名,RSA算法) Windows: %Tomcat_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA Unix: $Tomcat_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA 按照提示输入密码,公

Nginx实现ssl一级、二级域名证书部署并用https访问代理转发服务器

1.  规划 域名 解析IP Nginx代理 htpps://www.devcult.com 47.88.10.155   htpps://auto.devcult.com 47.88.10.155 https://www.automa.com htpps://www.automa.com 103.200.200.203   本次实验用了2个一级域名,1个二级域名,2个ip地址:实现功能如上图所示,要求全部使用https,并且一级域名实现自动补全www. 2. 前提准备 47.88.10.155

SpringBoot开启HTTPS(九)

springboot 默认只开启 http请求,若是要开启https 需要生成证书和配置 1.首先打开CMD命令行工具,在JDK/bin目录下 生成证书.keystore keytool -genkey -alias tomcat -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -keystore F:/tomcat.keystore -storepass 123456 相关参数: keytool -genkey -alias to