几个日夜,无数坑。

背景是:

  • 目前有备案的域名只有一个,而这个已经在生产环境采用。所以如果要采用这个域名,将不得不用三级泛域名证书,形如*.dev.aaa.com。
  • 由于首要目的是开发用(微信小程序),后台语言是asp.net core,出于开发方便考虑,Web服务器用Kestrel。(当然,最终解决方案于此无关)
  • 阿里云服务器,CentOS 7.4,域名也在阿里云。

一开始用ngrok但始终不能成功,后改用Frp,确实比ngrok好很多,但依然无法配置成功https访问。

最终,采用Nginx + Frp的方案,网站无需实现https,SSL在Nginx处用反向代理实现。

GO!

一、域名解析:

二、安装Frp:

参考:

Frps一键安装脚本,带Frpc Windows便捷启动脚本

来自 <https://www.moerats.com/archives/797/>

三、配置Frp:

(1) 服务器端:

用f.sh命令修改,或直接改文件:

# vim /usr/local/frps/frps.ini

主要要改:

vhost_http_port = 8090 #避开nginx要用的80

vhost_https_port = 8443 #其实没什么用,因为靠Nginx来处理https

dashboard_user = admin

dashboard_pwd = admin

token = IamPassword

subdomain_host = dev.aaa.com

如果是直接改的ini文件,保存后别忘了用systemctl restart frps重启服务。

(2)安全组或防火墙配置

Frps.ini文件中配置的端口确保在阿里云的安全组中打开。当然,还包括默认的7000,7500等端口。如果不是云主机,那就是防火墙同样操作。

(3) 客户端

Frpc.ini文件:

[common]

server_addr = 服务器IP

token = IamPassword

server_port = 7000

# protocol = kcp   这个不知道为什么,一开就连不上

log_file = ./frpc.log

log_level = info

log_max_days = 3

[testdevhttp]  #注意,这个名称不能重

type = http

local_port = 5000

subdomain = test

# http_user = admin

# http_pwd = admin

……

同样,5000端口要打开妨火墙。

这个时候内网网站就应该监听5000端口,确保http://localhost:5000能打开网站。

执行start.bat打开客户端。

(4)验证:

访问http://服务器IP:7500,能进入管理界面(需要输入dashboard_user和pwd);

访问http://test.dev.aaa.com:8090 能打开网站

四、安装nginx

sudo yum install nginx

vim /etc/nginx/nginx.conf

把server_name _;改成:server_name *.dev.aaa.com;

保存退出。

用sudo nginx -t验证修改正确,然后用

sudo systemctl reload nginx 重载nginx。

确保安全组或防火墙配置的80和443端口是打开的。

此时打开http://*.dev.aaa.com, 应能看到nginx的默认站点。 *可以是任意字符组合。

五、安装Let's Encrypt

参考:

Let's Encrypt 安装配置教程,免费的 SSL 证书

来自 <https://segmentfault.com/a/1190000017194280>

但要注意,把其中:

./certbot-auto certonly  -d *.you.cn --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory

替换成:

./certbot-auto --nginx -d *.dev.aaa.com  --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory

(是不是certonly要去掉忘了——应该是要去掉,关键是要加上--nginx,去掉--manual)

执行后会有一系列问题,回答即可。关于nginx的,会询问是否全部自动redirect http 为 https,之后会对nginx.conf文件做一系列修改等等。

其中和nginx无关的一些内容可以参考上文。

六、设置反向代理

Vim nginx.conf

看到nginx.conf文件已经发生了很大变化,找到:

server {

server_name  *.dev.aaa.com;

root         /usr/share/nginx/html;

# Load configuration files for the default server block.

include /etc/nginx/default.d/*.conf;

location / {

#手动添加下面内容:

proxy_pass http://127.0.0.1:8090;

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 REMOTE-HOST $remote_addr;

add_header X-Cache $upstream_cache_status;expires 12h;

    #开启wss(参看https://gblog.sherlocky.com/websocket-jie-he-nginx-shi-xian-yu-ming-ji-wss-xie-yi-fang-wen/):

    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

}

error_page 404 /404.html;

location = /40x.html {

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

}

listen [::]:443 ssl ipv6only=on; # managed by Certbot

listen 443 ssl; # managed by Certbot

ssl_certificate /etc/letsencrypt/live/dev.aaa.com/fullchain.pem; # managed by Certbot

ssl_certificate_key /etc/letsencrypt/live/dev.aaa.com/privkey.pem; # managed by Certbot

include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

保存退出。

然后再继续

sudo nginx -t

sudo systemctl reload nginx

顺利的话,此时再访问站点,就应该能看到帅气的小锁。

七、续签与其他

参看:更新证书:

来自 <https://www.cnblogs.com/peteremperor/p/9994713.html>

更好的安全性方面,参看:

Step 5 — Updating Diffie-Hellman Parameters

来自 <https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-centos-7>

转载于:https://www.cnblogs.com/damnedmoon/p/10357033.html

Nginx + Frp + Let'sEncrypt 泛域名证书相关推荐

  1. Let‘sEncrypt快速颁发及自动续签泛域名证书实践指南

    文章目录 0x00 前言简述 0x01 快速安装配置 1.acme.sh 0x02 证书自动签发实践 1.acme.sh + Cloudflare 实现自动签发泛域名证书. 0x03 使用实例 1.简 ...

  2. let's encrypt部署免费泛域名证书

    环境说明 [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) [root@localhos ...

  3. CentOS 7配置Let’s Encrypt支持免费泛域名证书

    Let's Encrypt从2018年开始支持泛域名证书,有效期3个月,目前仅支持acme方式申请,暂不支持certbot. 1.安装acme.sh curl https://get.acme.sh ...

  4. 使用 Certbot 自动申请并续订阿里云 DNS 免费泛域名证书

    使用 Certbot 自动申请并续订阿里云 DNS 免费泛域名证书 首先安装 Python 3 yum install -y python39 创建并激活虚拟环境 mkdir -p /mnt/cert ...

  5. 基于 OpenSSL 生成自签名证书,数字签名,泛域名证书,ca证书,PKI等

    基于 OpenSSL 生成自签名证书_qhh0205-CSDN博客_openssl自签名证书 windows 下 nginx 双向认证自签名证书配置 windows 下 nginx 双向认证自签名证书 ...

  6. certbot泛域名证书申请

    前言 什么是Let's Encrypt? 目前世界上就只有为数不多的几家域名证书签发机构得到浏览器的认可,而Let's Encrypt 就是其中一家,并且你可以申请到免费的证书,当然你如果想要付费也行 ...

  7. acme.sh申请Let‘s encrypt泛域名证书Docker化部署

    acme.sh申请Let's encrypt泛域名证书Docker化部署 一:手动安装acme.sh 二:申请证书 2.1 DNSAPI申请方式 2.2 DNS手动校验方式 2.3 HTTP校验方式申 ...

  8. 泛域名证书ACME 阿里云域名

    不知道大家是否遇到,和我同样问题, (后端)?这个链接为什么不能使用了,api 错误,因为 https 过期了 为什么这个域名打不开呀,秘钥过期了, 监管麻烦,配置繁琐,二级域名多 SSL 泛域名证书 ...

  9. Let's Encrypt 泛域名证书申请

    泛域名 泛域名证书又名通配符证书是SSL证书中的其中一种形式,一般会以通配符的形式(如:*.domain.com)来指定证书所要保护的域名. OV证书和DV证书都会有通配符的域名形式提供,而EV证书一 ...

最新文章

  1. UVa12096.The SetStack Computer
  2. 【DIY】光剑(一):炽焰长剑的诞生
  3. Ubuntu14.04下FTP服务器的搭建配置
  4. Linux文件夹含义
  5. java同步转化成异步_Java 如何把异步调用模拟成同步调用
  6. iOS下载大型文件原理解析三
  7. html 图片剪裁压缩,HTML5 canvas实现图片拉伸、压缩与裁剪
  8. Git submodule 的笔记
  9. 最大后验估计_状态估计的基本概念(3)最小均方估计和最小均方误差估计
  10. 毕业论文查重过关最强最全规律
  11. 嵌入式软件架构的设计
  12. CSS3-3D变换 transform-style:preserve-3d
  13. 我的世界java怎么改随机刻度_我的世界随机刻速度指令是什么
  14. 固态和机械硬盘组raid_SSD+机械硬盘Raid 0成最佳搭配?_浦科特 PX-M5Pro_固态硬盘评测-中关村在线...
  15. MacOS High Sierra(10.13.6)上安装xcode10.2.1
  16. android studio try again,完美解决Android Studio在gradle上的各种问题
  17. 浅析Python文件操作
  18. 光模块单模和多模的区别
  19. MySQL连接查询—自身连接
  20. 小程序之任务发布与接单平台

热门文章

  1. python实现自动翻译剪切板
  2. Android 实现护眼模式
  3. 数据分析--数据清洗详解流程
  4. 华为3面,官网显示面试通过了...开始泡池子,进入漫长等待期
  5. IPTV用户今年或过亿 运营商转型+政策双驱动
  6. Num Lock 开机启动设置
  7. Cisco路由器实现远程访问虚拟专用网——Easy虚拟专用网(解决出差员工访问内网的问题)
  8. php ci框架查询数据库占用大量的cpu,CodeIgniter 性能优化
  9. Hansel and Grethel ACM pku http://acm.pku.cn/JudgeOnline/problem?id=1254
  10. 面试时您该做的事情 (一)