Nginx + Frp + Let'sEncrypt 泛域名证书

几个日夜,无数坑。

背景是:

  • 目前有备案的域名只有一个,而这个已经在生产环境采用。所以如果要采用这个域名,将不得不用三级泛域名证书,形如*.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 能打开网站

四、安装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;

}

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>

Nginx + Frp + Let'sEncrypt 泛域名证书

原文地址:https://www.cnblogs.com/damnedmoon/p/10357033.html

时间: 2024-10-20 23:00:11

Nginx + Frp + Let'sEncrypt 泛域名证书的相关文章

解读泛域名证书(通配符证书) 如何免费申请

泛域名SSL证书又叫通配符证书,Wildcard Certificates,申请这样的证书可以保护一个域名及该域名下的所有子域名.这样域名有证书加密传输的安全链接,也就形成了https加密链接形式,不但安全而且还不限制子域名的数量.一般会以通配符的形式(如:*.domain.com)来指定证书所要保护的域名. 例如,一个单独的通配符证书就可以保护 www.example.com a.example.com b.example.com api.example.com.通配符证书可以保护通用域名和您

轻松全站 HTTPS,还没用上 https (可申请泛域名证书)的朋友可以操练起来了

前言 注意:上 HTTPS 超级简单,写这么多,只是因为过程比较有趣,就多哆嗦了几句有了自己的博客:<极简博客搭建,搭建超级简单又好看>有了自己的图片处理服务:<搭建自己的图片处理服务 - 智能裁剪.旋转.占位一站搞定>都已经这么完美了,为什么还会有这篇文章呢?是对社会有什么不满意吗? 为什么要上 HTTPS 安全:你与用户之间的消息加密传输,防止中间人***(就是我遇到的问题)其它优点:当你在国内使用域名时,需要备案.有时你想测试一下你的站,用上未备案的域名,怎么办呢?https

lets encrypt 泛域名证书申请,使用acme,结合阿里云域名管理

第一步:下载acme.sh,以下四种方式都可curl https://get.acme.sh | sh wget -O - https://get.acme.sh | sh curl https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh | INSTALLONLINE=1 sh wget -O - https://raw.githubusercontent.com/Neilpang/acme.sh/master/acm

OpenSSL生成自签名的sha256泛域名证书

环境: CentOS 6.8 x86_64 安装 openssl openssl-devel cp /etc/pki/tls/openssl.cnf openssl.cnf 修改openssl.cnf [ req ] distinguished_name = req_distinguished_name req_extensions = v3_req  #取消这行注释 # 确保req_distinguished_name下没有 0.xxx 的标签,有的话把0.xxx的0. 去掉 [ req_di

Let&#39;sEncrypt 免费通配符/泛域名SSL证书添加使用教程

Wildcard certificate俗称野卡正式点一般称为通配符或泛域名证书,也就是为*.lnmp.org 签发包含所有子域名的SSL证书,从去年6.7月份左右就已经说过Let'sEncrypt将于2018年1月支持,但是几次放鸽子后最近终于证书支持了.通配符证书一般还是比较贵的一般最便宜的通配符证书5.60美元一年,只不过Let'sEncrypt的有效期是3个月,对于一般用户来说基本没差别. LNMP 1.5已经添加了对通配符证书的支持,生成通配符证书和Let'sEncrypt平常SSL证

SSL/TLS深度解析--在Nginx上配置证书链及多域名证书

生成私钥与自签根证书(这次使用aes256加密,密码是redhat) # 进行简单处理 [[email protected] ~]# cd /usr/local/openssl/ [[email protected] openssl]# mkdir root-CA sub-CA [[email protected] openssl]# cp -rf CA/* root-CA/ [[email protected] root-CA]# rm -rf root_cacert_ecc.pem crln

申请泛域名SSL证书保护所有子域名

通常一个企业会因为业务需要解析很多子域名,而SSL证书网如果为每一个子域名都申请一张SSL证书来实现 https 加密访问未免太过浪费精力和金钱.这个时间就会用到“泛域名SSL证书”,通常称这种泛域名证书为通配符证书. 网络安全事件频发,媒体的大力倡导,安全厂商的卖力宣传和教育.网民用户的呼吁.网络巨头们的以身作则等都使https得到加速普及,SSL证书正在逐渐成为网站建设的一个标配了. 那么问题来了. 通常一个企业会因为业务需要解析很多子域名,而SSL证书网如果为每一个子域名都申请一张SSL证

openssl签署自己的泛域名(通配符)证书

openssl自建CA默认签署的是单域名证书,因为单台服务器上有多个https域名,有的时候希望一个证书能解决所有问题,如果是同一个顶级域名,那么泛域名(通配符)证书正好适合你 不需要修改openssl.cnf,其他有的扩展最好都注释掉,不注释也不影响 只要在输入域名(CN)的时候,把www.baidu.com 改成 *.baidu.com!!这里要注意, a.b.baidu.com  要写成 *.b.baidu.com !!另外, 经过测试,泛域名可以和多CN方式同时使用,在多CN填写域名的时

Nginx中rewrite实现二级域名、三级域名、泛域名、路径的重写

最常见的: 静态地址重定向到带参数的动态地址 rewrite "^(.*)/service/(.*)\.html$" $1/service.php?sid=$2 permanent; 反过来: 带参数的动态地址重定向到静态地址 if ($query_string ~* id=(.*)) { set $id $1; rewrite "^(.*)/article.asp$" $1/article/$id.htm last; } 泛域名解析 view plaincopy