0、前言
对于一些网站上的资源,直接调用容易引发跨域问题,而且还需要考虑对方设置的防盗链,因此可以使用反向代理,将访问域名换成自己的。
然而,部分网站设置了某些规则,无法直接用NGINX反代,因此采用jshensh的phpReverseProxy项目。
1、关于此项目
已支持的功能:
- 转发用户的 GET 请求
- 转发用户的 POST 请求
- 转发用户的 PUT 请求
- 转发用户的 DELETE 请求
- 转发用户发送的所有 Header(除 Accept-Encoding 和 Host)
- 转发服务器返回的所有 Header(除 Content-Length 和 Content-Encoding)
- 替换服务器返回的内容
2、搭建
在网站目录下拉取项目:
1 | git clone https://github.com/jshensh/phpReverseProxy |
如果访问GitHub也困难,参考本站文章:
搭建GitHub镜像站
https://blog.tsinbei.com/tw/archives/152/
安装依赖:
1 | composer require jshensh/php-curl-class |
3、配置
替换index.php
第六行的源站访问协议、第七行的源站域名、第八行的当前站点域名。
从154行开始的输出替换数组按实际情况修改。
例如:
1 | $originProtocol = 'https'; $originSite = 'a.com'; $thisSite = 'b.com'; |
即可反向代理https://a.com
,而b.com
的访问协议可在宝塔中自定义,不在此处设置。
如果需要支持默认文件,例如index.html
,可以加入一行:
1 | $_SERVER['REQUEST_URI']=str_replace('index.html','',$_SERVER['REQUEST_URI']); |
即回源时,把请求URI中的index.html
去掉。在一些默认文件不是index.html
,但是可以通过根目录访问的网站,这个方法奏效。
该程序默认把目标网站替换成自己的网站,例如反向代理a.com
,其中的a.com
会被修改为b.com
再返回。如果需要添加其他替换,可以按照以下示例修改:
1 | try { new ReverseProxy([ 'replace' => [ [ $originSite, '[email protected]' ], [ $thisSite, '[email protected]' ] ], 'originProtocol' => $originProtocol, 'originSite' =>$originSite, 'thisSite' => $thisSite ]); } catch (\Exception $e) { echo '<h1>Proxy Error</h1><p>' . $e->getMessage() . '</p>'; } |
示例中,将把[email protected]
替换成[email protected]
。
4、伪静态
伪静态规则:
此处内容需要评论回复(自动审核)或加入 QQ 技术交流群(立即获得内容)后方可阅读。赞助(二维码在文章下方)后联系作者可一次性解锁所有(包括之后的新文章)。
使用开源 PHP 项目反向代理网站
评论