如果不是打算使用域名映射,直接使用公网IPV4地址,则第一步和第二步可以忽略。
作者由于需要给微信小程序提供数据端口,而微信小程序不支持请求ipv4地址,只能购买和备案域名…( _ _)ノ|
一、购买域名
在阿里云购买域名,如果服务器是在中国大陆境内还需要备案
二、域名解析
将购买的顶级域名及其子域名解析到DNS服务器
三、宝塔面板新建站点
新建站点data.gdyzx.xyz,并测试公网是否能够访问到初始页面
四、启动json-server服务器
- 启动tmux并将会话与窗口分离,避免关闭远程连接后进程被关闭:
# tmux
启动tmux窗口
具体内容Tmux 详解及使用教程 - 进入到json文件存储的文件夹
# cd /www/wwwroot/lotdata.gdyzx.xyz/
- 启动json-server服务
# json-server --watch --port 53000 /www/wwwroot/lotdata.gdyzx.xyz/test.json < /dev/null &
注意&
符号一定要有,用于后台运行进程,否则无法输入其他指令 - 将会话和窗口分离,退出窗口,会话仍在执行(json-server一直在执行)
# tmux detach
将窗口与会话分离
- 即使使用了
&
,仍然会显示Stopped表明该进程被中止了。原因是json-server程序执行后,试图继续读取终端输入,此时如果输入窗口被关闭则会关闭进程。使用重定向将输入定向到/dev/null,使用# jobs
命令发行进程仍在Running后,再进行会话分离。 - 在《Unix 环境高级编程》第9.8节作业控制中讲到,“如果后台程序试图读取终端,这并不是一个错误,但是终端驱动程序将检测这种情况,并向后台作业发送一个特定信号SIGTTIN,该信号会停止此后台程序,并向用户发送通知”。
- 参考资料
五、nginx进行反向代理
1.在宝塔面板站点的配置文件
2.修改内容为如下代码,配置文件含义参考Nginx 配置详解
server
{
listen 80; #监听端口,不需要改动
#监听的域名,如果客户端这些域名访问,则由此配置文件接管并反向代理到proxy_pass
server_name lotdata.gdyzx.xyz www.lotdata.gdyzx.xyz;
#访问默认页面 从根目录中寻找以下文件 由于设置了proxy_pass所以失效
index index.php index.html index.htm default.php default.htm default.html;
#站点文件根目录
root /www/wwwroot/data.gdyzx.xyz;
location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
proxy_pass http://localhost:53000; #!!!求转向的服务器列表!!!
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
}
}
3. 其中proxy_pass是最核心最重要的参数,要与json-server映射的端口一致。
整个工作流程为:
- json-server将json文件内容映射到以下本地端口
http://localhost:53000/posts
http://localhost:53000/comments
http://localhost:53000/test
http://localhost:53000/profile
- 当网络上有人访问lotdata.gdyzx.xyz/test时,DNS服务器将其请求引导到本服务器;本服务器检测到来自lotdata.gdyzx.xyz的请求时,根据nginx的配置文件,将其反向代理到
http://localhost:53000
(proxy_pass设置内容) - 本地端口收到
http://localhost:53000/test
请求,返回数据。 - 用户收到数据
六、json-server深入教程
转载自json-server 详解
非常好,非常详细