前言
基本上,所有在家庭数据中心部署的应用,最后都是通过反向代理对外进行统一发布的,这个和云主机上配置反向代理的意义是一样的,唯一的一点差别就是不能用443端口进行发布。由于我是使用的宝塔linux面板来实现反向代理,所以本文就以宝塔linux面板为例来简单描述一下如何为域名www.example.com
配置反向代理并启用https的步骤。
建议大家都使用https,http还是不要再用了,一方面http的确不安全,另一方面很多浏览器在访问http的时候都提示不安全,看着很糟心~~
添加站点
选择"网站"-"添加站点":
如果是有公网IP的云主机且域名已经备案,则443端口是可用的,上图的域名后面就不用带端口;如果是家庭宽带或者没有备案的云主机,则只能使用非443端口(44443只是示例,大家随意填非443和80以及其他比较敏感的的端口,端口可达即可,不过最好是好记的~),最后点击右下角的”提交“。
设置SSL证书
关于SSL证书的获取,有2种方式:
1、手动申请
在各个云供应商,只要购买了域名,就可以获得一定数量的免费的1年期证书额度(通常是20个),以下以阿里云和腾讯云为例说明申请位置。
阿里云:
申请位置在"数字证书管理服务"-"SSL证书"-"免费证书"-"创建证书":
阿里云一年有20个免费证书的额度,我已经用得只剩1个了。。
腾讯云:
申请位置在"SSL证书"-"我的证书"-"免费证书"-"申请免费证书":
写的是50个,但是腾讯域名只能用20个,和阿里云是一样的。
证书签发以后,要下载的话就下nginx的:
2、自动申请
这个主要是指的Let’s Encrypt,可以免费申请有效期3个月的证书,并可以自动续签,但是一个主域名168小时之内只能申请5次,达到以后就只能等168小时了。
站点成功创建界面如下:
在上图中点击右边红框中的”设置“,进入站点的设置界面:
点击上图左边红框中的SSL,界面如下:
如果是手动添加SSL证书,就在上图中"红框"的当前证书位置,将下载的nginx证书解压缩以后,用文本编辑器打开www.example.com.key
文件,将里面的内容全部复制到上图下方左边红框的秘钥(KEY)里;用文本编辑器打开www.example.com.pem
文件(其实.pem和.crt文件的内容是一样的),将里面的内容全部复制到上图下方右边红框的证书(PEM)里,然后点击下方绿色按钮"保证并启用证书"。
如果要用Let's Encrypt
自动申请SSL证书,点击Let’s Encrypt标签,如下图:
推荐验证方式使用DNS验证,因为如果正确设置了DNS服务提供商的的API,例如阿里云DNS以及腾讯云DnsPod的API,Let’s Encrypt可以在证书到期前自动续期,理论上就可以永远不担心SSL证书过期了。最后点击下方的绿色按钮"申请",正常的话等一会SSL证书就自动申请下来了:
修改站点配置文件(可选)
之所以是可选,就是前面提到过的是否有备案的合法443端口,如果有,则这一步就是不需要的,如果没有,这一步就是必须的了。
在上节中设置好了SSL证书以后,配置文件的内容如下图:
如上图右边红框中的内容所示,默认宝塔面板是将SSL的监听默认放在443端口上。如果是有合法的443端口,这样当然没问题,但是如果没有,这样直接导致外部浏览器访问无法建立SSL连接,所以,这样需要将443改为你配置的端口,在本文中是44443端口,所以修改后内容如下:
只需要改动这一个地方即可,然后点击下方的绿色按钮"保存"。
设置反向代理
终于进入本文的正题设置反向代理了。。前面都只是铺垫而已~。
点击上图左边红框中的反向代理,出现如下界面:
点击上图红框中的"添加反向代理",出现如下界面:
假如内网应用的IP为192.168.1.100,端口为8000,则正确的配置如下:
"目标URL"没什么好说的,这里提一下发送域名和内容替换。
发送域名默认值$host一般情况下可以不用动,这表示把你浏览器访问的域名,本文中是www.example.com
传递给目标URL对应的应用,很多应用并不关注这个。不过有一些特殊应用,比如用minio搭建cos(参见文章:docker系列 搭建基于minio的私人COS平台),它部署的docker只认host 127.0.0.1(很无语),所以对于minio,发送域名就不能用默认值,以下是我的配置:
还有一些其他应用,比如wordpress,nextcloud,都是直接要在应用内部写死访问域名的,这些可能就会需要修改发送域名。
内容替换,这个在一些特殊场合比较有用处,比如一些软件的免费版页面上有很多pro之类的字样,可以直接用内容替换将pro替换为空白或者其他字样,这个大家有兴趣可以尝试一下。
另:本文主要是描述使用宝塔linux面板搭建反向代理的具体操作步骤,没有涉及太多反向代理理论方面的阐述,如果要进一步了解方向代理的作用及工作方式,可以参加我的另外两篇文章:家庭数据中心系列 应用发布之反向代理篇(上)和家庭数据中心系列 应用发布之反向代理篇(下)。