personalServer

Introduction: 用你的笔记本搭建公网可以访问的服务器
More: Author   ReportBugs   
Tags:

搭建免费私人服务器---用你的笔记本做服务器

首先去阿里云申请域名,并实名认证域名,否则无法解析域名到 IP

租用国内服务器需要备案,上传身份证,购买阿里云幕布,拍照,审核,特别麻烦,租用国外的虽然不用备案但价格贵,速度慢,若可以用自己的笔记本做服务器的话既不需要备案还划算,但由于 IP 不是固定的,每次手动修改 IP 太麻烦,杭州电信大概是每隔 4 天凌晨 3 点自动更换一次 IP,该工程可以每隔一段时间自动获取公网 IP,若发现 IP 改变则调用阿里云接口修改域名 IP,若你的笔记本连接的是路由器,则只需要去路由器设置界面开启 DMZ,ip 填写你的笔记本的内网 ip,或者开启端口转发,ip 填写你的笔记本的内网 ip,内网端口填写你笔记本中服务器监听的端口,若使用 https 的话外网端口填写 443,当然也可以填写除 80,8080 以外的端口。

使用方式

修改配置

  • 修改AutoBandDomain.DOMAINAutoBandDomain.SUB_DOMAIN为你的域名
  • 修改BandDomain.ID 和 BandDomain.SECRET为你的阿里云Access Key IDAccess Key Secret(如何获取 Access Key ID 和 Access Key Secret 见下文)

运行代码

  • mac 和 linux 用户命令窗口切换目录到工程跟目录,运行run.sh,windows 用户双击 run_wind.bat即可
  • 当然也可以把代码复制到 eclipse 等 java 编辑器中,同时加入commons-codec-1.10.jargson-2.8.1.jar依赖后运行AutoBandDomain

注意

  • 需要安装 JDK,下载地址
  • 建议代码编码采用 utf8
  • 支持 mac 和 linux,windows 暂未测试
  • 不支持 openJDK,若一定要使用 openJDK 可以把HttpRequestHttpURLConnection替换成其他 http 库,比如okhttp

按照上述操作后你的域名就解析到你的笔记本的公网 IP 了,若你的笔记本没有直接连接公网,而是连接了路由器的话,可以在路由器管理页面开启 DMZ 或者端口转发,这样即使你在内网,外网中的用户通过域名也能访问到你了,附 极路由设置方式,其他路由器略有不同。

img 我的笔记本的内网 IP 是192.168.199.249,我的笔记本中的 tomcat 服务器监听的端口是8443,只要外网用户 访问 http://你的域名:443 就可以请求到你的 tomcat 服务器了,另外我还设置了 1024 端口映射到路由器的 80 端口,这样我就可以远程登录我的路由器了。

由于运营商封锁了 80 和 8080 端口,所以外网用户没法通过 http 默认的 80 端口进行访问,所以只能通过非 80,8080 端口进行访问。若一定要通过默认端口的可可以参考下文

配置 Tomcat,开启 https

https 默认采用 443 端口,这个端口没有被运营商封锁,只要我们的服务器开启 https 的话外网用户就可以通过 https://你的域名 进行访问了,开启 https 需要 SSL 证书,你可以自己生成 SSL 证书,但浏览器会提示 SSL 证书有问题,所有我们可以去第三方申请免费的 SSL 证书,比如 腾讯云 或者 阿里云等等。

申请证书

以腾讯云为例,首先进入 https://console.qcloud.com/ssl ,然后点击申请证书 img 按照提示填写 域名和私钥密码,提交后会立即生成证书,可以下载下来放到 tomcat 服务器目录下,如果没有填写私钥密码,则不提供 Tomcat 证书文件的下载,需要用户手动转换格式生成。

可以通过 Nginx 文件夹内证书文件和私钥文件生成 jks 格式证书 转换工具:https://www.trustasia.com/tools/cert-converter.htm 使用工具时注意填写 密钥库密码 ,安装证书时配置文件中需要填写。

证书安装

以 tomcat7 为例 配置 SSL 连接器,将下载的 你的域名.jks 文件存放到 tomcat 下的 conf 目录下,然后配置同目录下的 server.xml 文件:

<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
    maxThreads="150" scheme="https" secure="true"
    keystoreFile="conf\你的域名.jks"
    keystorePass="申请证书时的私钥"
    clientAuth="false" sslProtocol="TLS" />

可选配置

http 自动跳转 https 的安全配置

到 conf 目录下的 web.xml。在</welcome-file-list>后面,</web-app>,也就是倒数第二段里,加上这样一段

<web-resource-collection >
    <web-resource-name >SSL</web-resource-name>
    <url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
    <transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>

这步目的是让非 ssl 的 connector 跳转到 ssl 的 connector 去。所以还需要前往 server.xml 进行配置:

<Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="443" />

redirectPort 改成 ssl 的 connector 的端口 443,重启后便会生效。

配置完后重启 tomcat 即可生效,若无法通过 https 访问可查看 tomcat/log/catalina.yyyy-mm-dd.log 日志文件

若使用 Apache、IIS、Nginx 服务器可以参考 https://www.qcloud.com/document/product/400/4143

如何获取 Access Key ID 和 Access Key Secret ?

登录阿里云,点击控制台,鼠标移动到用户名上会弹出如下窗口,点击 accesskeys 即可看到 Access Key ID 和 Access Key Secret

img

下面是搭建的私人服务器

https://auto.烫烫.xyz

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools