反向代理兼容处理

This commit is contained in:
小王 2024-09-14 10:25:39 +08:00
parent e441071d50
commit b2a4029f49
3 changed files with 40 additions and 87 deletions

View File

@ -1,79 +1,25 @@
![](https://www.thinkphp.cn/uploads/images/20230630/300c856765af4d8ae758c503185f8739.png) 可供配置的环境变量
-
|变量名|描述|默认值|必填|
|-|-|-|-|
|`NACOS_ADDR`| nacos注册地址 |`192.168.1.105:8848` |*|
|`SERVICE_PORT`| 指定外部可以向内访问的端口 |`8000`|*|
|`ORIGIN_URL`| 允许跨域的域名 |docker容器内ip|-|
ThinkPHP 8.0 内部暴露的端口
=============== -
|端口|描述|
|-|-|
|`80`| 服务端口 |
## 特性 容器内的工作目录
-
- /var/www/html
* 基于PHP`8.0+`重构 如何保存数据
* 升级`PSR`依赖 -
* 依赖`think-orm`3.0版本 将文件夹 `/var/www/html/public` 设置为映射到挂载点
* `6.0`/`6.1`无缝升级
注意事项
> ThinkPHP8.0的运行环境要求PHP8.0.0+ -
将外部文件夹映射到容器内的 `/var/www/html/public` 文件夹时,需要给对应的外部文件夹添加权限,否则上传的文件会无法保存。
现在开始,你可以使用官方提供的[ThinkChat](https://chat.topthink.com/)让你在学习ThinkPHP的旅途中享受私人AI助理服务
![](https://www.topthink.com/uploads/assistant/20230630/4d1a3f0ad2958b49bb8189b7ef824cb0.png)
## 文档
[完全开发手册](https://doc.thinkphp.cn)
## 服务
ThinkPHP生态服务由[顶想云](https://www.topthink.com)TOPThink Cloud提供为生态提供专业的开发者服务和价值之选。
## 赞助
全新的[赞助计划](https://www.thinkphp.cn/sponsor)可以让你通过我们的网站、手册、欢迎页及GIT仓库获得巨大曝光同时提升企业的品牌声誉也更好保障ThinkPHP的可持续发展。
[![](https://www.thinkphp.cn/uploads/images/20230630/48396092a0515886a3da6bd268131c8f.png)](http://github.crmeb.net/u/TPSY)
[![](https://www.thinkphp.cn/uploads/images/20230630/a12bd248beee0e7491dd0f79dc4dd5e9.png)](https://www.thinkphp.cn/sponsor)
[![](https://www.thinkphp.cn/uploads/images/20230630/e7f48d909d41dd5ebaf4a5aa982d0455.png)](https://www.thinkphp.cn/sponsor)
## 安装
~~~
composer create-project topthink/think tp
~~~
启动服务
~~~
cd tp
php think run
~~~
然后就可以在浏览器中访问
~~~
http://localhost:8000
~~~
如果需要更新框架使用
~~~
composer update topthink/framework
~~~
## 命名规范
`ThinkPHP`遵循PSR-2命名规范和PSR-4自动加载规范。
## 参与开发
直接提交PR或者Issue即可
## 版权信息
ThinkPHP遵循Apache2开源协议发布并提供免费使用。
本项目包含的第三方源码和二进制文件之版权信息另行标注。
版权所有Copyright © 2006-2023 by ThinkPHP (http://thinkphp.cn) All rights reserved。
ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。
更多细节参阅 [LICENSE.txt](LICENSE.txt)

View File

@ -25,7 +25,12 @@ class Index
$env = new Env(); $env = new Env();
// thinkphp里面无法获取SERVER_ADDR变量会被nacos拦截替换 // thinkphp里面无法获取SERVER_ADDR变量会被nacos拦截替换
$serverIP = $env->get('SERVICE_ADDR', '192.168.1.161:8000'); // 服务暴露的端口
$servicePort = $env->get('SERVICE_PORT', 8000);
// 服务可以访问到的IP
$serverIP = $env->get('SERVER_ADDR');
// 允许跨域的域名
$originUrl = $env->get('ORIGIN_URL', $serverIP);
// 组装保存路径 // 组装保存路径
$savename = \think\facade\Filesystem::disk('upload')->putFile('uploads', $file); $savename = \think\facade\Filesystem::disk('upload')->putFile('uploads', $file);
@ -36,7 +41,7 @@ class Index
'msg' => null, 'msg' => null,
'data' => [ 'data' => [
"name" => $trueName, "name" => $trueName,
"url" => 'http://' . $serverIP . '/' . $savename, "url" => '//' . $originUrl . '/' . $savename,
// "url" => 'http://192.168.1.105:8080/file/' . $savename, // "url" => 'http://192.168.1.105:8080/file/' . $savename,
], ],
// 'env' => $env->get(), // 'env' => $env->get(),

View File

@ -10,16 +10,19 @@ use think\Env;
// 读取环境变量 // 读取环境变量
$env = new Env(); $env = new Env();
// wokerman里面能准确获取SERVER_ADDR变量没有HTTP_HOST变量 // nacos的注册地址
$serverAddr = $env->get('SERVICE_ADDR', '192.168.1.161:8000');
$nacosAddr = $env->get('NACOS_ADDR', '192.168.1.105:8848'); $nacosAddr = $env->get('NACOS_ADDR', '192.168.1.105:8848');
// 服务可以访问到的IP
$serviceAddr = $env->get('SERVER_ADDR');
// 服务暴露的端口
$servicePort = $env->get('SERVICE_PORT', 8000);
$task = new Worker(); $task = new Worker();
// 定时触发邮件发送任务 // 定时触发邮件发送任务
// 开启多少个进程运行定时任务,注意业务是否在多进程有并发问题 // 开启多少个进程运行定时任务,注意业务是否在多进程有并发问题
$task->count = 1; $task->count = 1;
$task->onWorkerStart = function(Worker $task) use ($serverAddr, $nacosAddr) $task->onWorkerStart = function(Worker $task) use ($serviceAddr, $servicePort, $nacosAddr)
{ {
$client = new Client([ $client = new Client([
// nacos地址 // nacos地址
@ -27,21 +30,20 @@ $task->onWorkerStart = function(Worker $task) use ($serverAddr, $nacosAddr)
"timeout" => 5 "timeout" => 5
]); ]);
// 心跳检测每8秒执行一次 // 心跳检测每8秒执行一次
Timer::add(8, function() use ($client, $serverAddr) Timer::add(8, function() use ($client, $serviceAddr, $servicePort)
{ {
list ($serverIP, $serverPort) = explode(':', $serverAddr); $client->request("put", "/nacos/v1/ns/instance/beat", [
$response = $client->request("put", "/nacos/v1/ns/instance/beat", [
"form_params" => [ "form_params" => [
"serviceName" => "zeroerroa-file", "serviceName" => "zeroerroa-file",
"ip" => $serverIP, "ip" => $serviceAddr,
"port" => $serverPort, "port" => $servicePort,
"namespaceId" => "0a1c32f2-dea1-4ec1-b546-cb4635cd7db2", "namespaceId" => "0a1c32f2-dea1-4ec1-b546-cb4635cd7db2",
"groupName" => "DEFAULT_GROUP", "groupName" => "DEFAULT_GROUP",
"beat" => '{ "beat" => '{
"cluster": "DEFAULT", "cluster": "DEFAULT",
"ip": "' . $serverIP . '", "ip": "' . $serviceAddr . '",
"metadata": {}, "metadata": {},
"port": "' . $serverPort . '", "port": "' . $servicePort . '",
"scheduled": true, "scheduled": true,
"serviceName": "zeroerroa-file", "serviceName": "zeroerroa-file",
"weight": 1 "weight": 1