1
taofoo 2023-06-21 09:14:37 +08:00
如果就这几个端口的话,location 就可以
|
2
nitmali 2023-06-21 09:18:31 +08:00
location ^~ /10111/
|
3
LLaMA2 2023-06-21 09:18:49 +08:00
location 中有路径,匹配到转发不同的端口,和楼上说的一样
|
4
swordne OP @taofoo #1 不是,以后会有很多。想找个方法让 nginx 根据路由上的端口号自动转发到对应的本地,这样就可以让组内的小伙伴自由的起服务,我就不去动 nginx 配置了。
|
6
xiaokanhongchen 2023-06-21 09:40:12 +08:00 via Android
chatgpt 帮你实现了,转:
是的,Nginx 可以实现这样的需求。您可以使用 Nginx 的反向代理和重写规则来实现将请求转发到相应的 Hyperf 服务的功能。 首先,您需要在 Nginx 的配置文件中设置反向代理规则,并根据请求的路径重写 URL 。以下是一个示例配置: ``` server { listen 80; server_name a.b.com; location / { rewrite ^/(\d+)/(.*)$ /$2 break; proxy_pass http://0.0.0.0:$1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` 在这个配置中,正则表达式^/(\d+)/(.*)$会匹配类似于 /10111/xxxxx 的 URL 路径,并将 10111 提取出来作为参数。然后,rewrite 指令将路径重写为 /$2 ,其中$2 是匹配到的第二个组(即 xxxxx 部分)。接下来,proxy_pass 指令将请求代理到 http://0.0.0.0:$1 ,其中$1 是第一个组(即提取的端口号)。最后,proxy_set_header 指令设置一些代理请求的头部信息。 请根据您的实际环境进行适当的修改,包括监听的端口号、服务器名称和 Hyperf 服务的地址。完成配置后,重新加载 Nginx 配置并启动服务,Nginx 将根据请求中的端口号将请求转发到相应的 Hyperf 服务上。 |
7
xiaokanhongchen 2023-06-21 09:41:02 +08:00 via Android
自己试试,稍微改改就行
|
8
swordne OP @xiaokanhongchen #7 我来试试,之前也搜过这种答案,貌似不行,看看是不是有哪里不一样。
|
9
XiFanL1 2023-06-21 10:26:48 +08:00
完全动态的话会不会有安全风险,一些仅对内网开放端口是不是也可以通过这种方式访问
|
10
swordne OP @XiFanL1 #9 不好,1 是测试服务器,2 是开放的全部是 hyperf 的项目转发端口,3 是其实主要是省事,要不天天去服务器上弄太麻烦了,也有安全隐患。
|
11
xixibb 2023-06-21 17:38:56 +08:00
@xiaokanhongchen #6 哥,真的假的,GPT 这么牛逼了吗?
|
12
swordne OP 已经可以了
location /api/ { set $uri_parts ''; if ($uri ~ "^/(?<uri_part1>[^/]+)/(?<uri_part2>[^/]+)/(?<param>.*)$") { set $uri_parts $uri_part1,$uri_part2; } proxy_pass http://0.0.0.0:$uri_part2/$param; } 这样配置就可以完成转发了。 |