php 是否能够实现将 http 请求转发到一个域名的指定 IP 下?比如 www.a.com 这个域名有多台服务器,IP 有 4 个,正常情况是随机的,如果我想在 PHP 层把访问的 IP 写死,有可能实现吗?
我知道改 hosts 可以实现,现在是想尝试直接在代码层面实现,不知道有没有可能性
1
jhdxr 2017-07-10 16:24:47 +08:00
为什么我觉得最近 PHP 话题下的帖子质量急剧下降,是有培训班老师把 V2EX 介绍出去了么。。。
系统告诉我『请尽量让自己的回复能够对别人有帮助』,但这帖子我实在没读懂。什么叫把请求转发到一个指定的 IP 下?是用户访问 http://www.a.com ,然后请求到了你的机器上,你想把这个请求转发到别的固定的某一台处理 http://www.a.com 的机器上?还是转发到另外一个域名 http://www.b.com 的机器上? |
2
mscb 2017-07-10 16:26:10 +08:00 via Android
可以是可以,但是如果能直接在 nginx 下配置一下,会不会更方便一点,省得开发?
|
3
alex321 2017-07-10 16:30:44 +08:00
都用了域名 IP 轮询了,何苦再回去呢;回退到低阶状态别轮询啊。
|
5
xxxpara OP @jhdxr 可能我表述不太清楚,我得意思是像修改电脑本地的 hosts 一样,通过 PHP 把域名的请求转发到 127.0.0.1 这个本地环境下,或者其他测试 IP
|
7
maojy1989 2017-07-10 16:37:25 +08:00
在你跑 php 程序的机器上把 hosts 改了即可
|
8
mscb 2017-07-10 16:38:10 +08:00 via Android
@xxxpara 这个和 php 没什么关系,给你个关键词吧,我看不太懂你的具体需求。“ nginx 负载均衡" "nginx 配置文档“ 你去搜索一下看看,应该就懂了
|
9
anyele 2017-07-10 16:40:59 +08:00
培训班老师把 V2EX 介绍出去了。。。。。。
|
13
ysjdx 2017-07-10 16:47:49 +08:00
curl 请求 ip header 里面加 Host:参数
|
14
xxxpara OP @g8287694 客户想访问我们某个测试环境,我们不可能每个客户都去给他手动改配置
所以在想能不能通过在请求中加一个参数让他们自己加上可以访问指定的环境 |
15
vus520 2017-07-10 16:56:07 +08:00
|
16
mscb 2017-07-10 16:58:02 +08:00 via Android
@xxxpara 在 php 程序开头,先判断一下当前服务器 ip,如果不是目标 ip,就用 socket 模拟 http 访问目标 ip 的服务器。
不过这样做没啥意义啊?拖慢了访问速度。而且你同一个域名访问的内容不应该是一样的吗? |
17
rootx 2017-07-10 17:00:08 +08:00 via iPhone
应该 nginx 层做的事情 不要在 PHP 层做 会影响性能的…当然如果不考虑性能就不谈了…
|
20
GreatHumorist 2017-07-10 17:11:24 +08:00
可以用 dns 解析进行负载均衡也可以用 nginx 进行负载均衡,用 php 本身的话效率不能保证,而且不科学。
|
21
Famio 2017-07-10 17:12:19 +08:00
这个问题就好像上午看到的 css 的问题一样,明明可以用 css 来完成布局,有些人非要用 js 来做。
|
22
xxxpara OP @Famio 原因我上面已经解释了..这个不是部署到生产环境的,临时用来做业务体验,但是测试 ip 有好几个,域名只有一个
|
23
UnknownR 2017-07-10 17:50:46 +08:00
看下 nginx 的介绍文档,里面有你这种情况的处理配置
或者你可以试一下设置 URL 头部, 域名改成 IP |
24
torbrowserbridge 2017-07-10 17:58:42 +08:00
13 楼正解
|
25
Tairy 2017-07-10 18:01:00 +08:00
刚看 Laravel 的时候看到这种神操作,惊呆了。
![]( ) |
26
eecjimmy 2017-07-10 18:16:21 +08:00 via iPhone
不如直接写个批处理自动更改和还原方便,本来就是少数临时体验用。
|
27
gouchaoer 2017-07-10 18:20:07 +08:00
那你为什么不直接用 ip 访问?
|
29
LoliconInside 2017-07-10 18:26:29 +08:00 1
curl -H 'Host:www.xxx.com' http://x.x.x.x
下 一 题 |
30
imcj 2017-07-10 18:32:57 +08:00 via iPhone
用 ReactPHP,支持 epoll 模型可以做这事。
统一回复楼上什么 php 不适合。php 就是一个语言,有各种可能,用 php 做转发,去实践一下,我觉得没错。 如果人失去了好奇心,失去了改变现状。v2ex 的逼格不正是创意?创意包含打破。包含好奇。 |
31
jasontse 2017-07-10 18:51:24 +08:00 via iPad 1
|
32
shyling 2017-07-10 19:49:39 +08:00 1
fsockopen(指定 ip); fwrite('Host: 域名')
|
33
fhefh 2017-07-10 21:42:33 +08:00
|
34
msg7086 2017-07-10 23:57:57 +08:00
要连接目标服务器 DNS 解析中的某一个特定 IP,
要么 hosts 写死 IP 地址, 要么代码里写死 IP 地址。 |
35
zhs227 2017-07-11 06:31:05 +08:00
假设你要访问的 IP 是 192.168.1.x, 然后平常是通过 www.example.com 来访问。采用 curl 自定义头部 Host,发送请求到 http://192.168.1.x/page, 带上 Host: www.example.com , 就可以了。如果是 nginx 负载均衡的,需要后端可以直接提供访问,把访问直接发送到后端,不要通过负载均衡转发。
|
36
suconghou 2017-07-11 13:40:34 +08:00 1
我觉得不是 PHP 的帖子质量下降了,是 v2 用心帮助别人的心态少了,一上来就喷,题主已经知道其他方式,但是需要了解自己需要的那种方式, 很少人能正面回答,一直强调一些另类方法, 题主也不是没有思考的人,自己就会清楚那种最合适.
顺便附上答案 <script src="https://gist.github.com/suconghou/e0bb202cdb8344105a4287e8eca8d12e.js"></script> |