欢迎各位兄弟 发布技术文章
这里的技术是共享的
反向绑定域名,即用户A访问到B,B将A的请求转向C,最后实现A访问C的过程。反向绑定域名最初应该是应用在站点负载均衡和域名内网转发上,利用反向绑定域名的方法可以将用户的不同请求分发到不同的服务器上,从而实现性能均衡和减轻主服务器负担的目的。
反向绑定域名的好处有很多,比如实现动静分离,让nginx来处理静态文件,将动态内容请求分发到不同语言编写的后端程序,而这些不用语言编写的程序往运行在专门的服务器,如apache处理php,tomcat处理java,uwsgi处理python等等。
反向绑定域名在国内的应用也很广泛,有些购买了国内空间的朋友,域名没有BA的可以用一台美国的服务器充当反向绑定域名的服务器,强制将域名绑定到空间上。有些国外的空间或者网站无法访问了,也可以用反向绑定域名的方法实现空间的正常访问。
1、先找到一个支持自定义.htaccess,apache服务器,允许有反向代(^_^)理的权限的免费空间或者虚拟主机,将空间的.htaccess文件下载到本地,用记事本打开,将下列代码添加进去,再上传,如下:
RewriteEngine On RewriteBase / RewriteRule ^(.*)$ http://域名/$1 [P]
2、注意把代码中的网址替换成你想要反向绑定域名的域名,这里是强制将域名绑定到SAE空间上,用了SAE的二级域名地址
3、如果你找不到支持.htaccess的URL地址重写的虚拟主机或者空间,可以直接使用7ghost这个PHP程序,只要空间支持allow_furl_open和curl、容量至少要有500K即可。如果启用缓存的话需要 写权限和空间足够大。
这是7ghost程序设置界面(点击放大),利用它你可以反向Dai理任何网站,详细的操作方法
AMH是国内一个开源的主机面板,可以创建 LNMP、LAMP、LNMH 等不同WEB应用环境,新版本的AMH还支持apache2.4和HHVM。AMH相应的功能模块也非常地多,其中AMProxy就是一个反向绑定域名模块。
AMProxy的2.0版本支持缓存管理功能,支持在线关键字添加、替换,支持设置不同类型文件替换、与支持添加自定义首尾html代码块等。利用CDN智能解析功能,将不同路线、地理位置的用户解析到相应服务器,对用户访问进行缓存加速,同时减轻源站的服务器压力
利用AMH反向绑定域名并成功绕过白**名单的方法,首先是要求:一个有BA号的域名、一个没有BA号的域名、一台可以访问的境外主机,美国的VPS主机就可以。
使用 root 账号登录 Linux 服务器。执行 amh 安装脚本:wget http://amh.sh/amh.sh && bash amh.sh 2>&1 | tee amh.log,根据提示输入选择1~3选项。输入1回车,进入安装
极速安装方式大约只需要1至3分钟(以服务器性能为准),成功安装后系统会提示AMH与MySQL默认账号密码。可使用普通连接访问面板,http://ip:8888,或加密的连接访问面板,https://ip:9999
登陆后台找到 模块扩展 > 下载模块,大约在第3页找到 AMProxy-2.0 下载并安装。在管理模块中找到并进入设置界面,可以看到新增AMProxy反向代理网站一栏。绑定域名:输入没有BA号的域名(IP),反代域名:输入有BA号的域名(IP)
用上面的方法,默认是反代到国内主机的80端口上,可是有些主机反代到80端口后还是无法访问,下面说一下如何使用其他端口建站。这里以没有BA号的域名 bukets.net和有BA号的域名 demo.vsen.me来作演示,环境是upupw+amh。
先在国内的云主机上安装upupw,然后新建虚拟主机域名输入为 demo.vsen.me,目录自设。打开upupw目录进入 Apache2\conf,找到httpd-vhosts.conf并打开(注意不要使用系统的笔记本或文本文档打开,我用的是Notepad++)
找到刚刚新建的虚拟主机规则,并将 servername demo.vsen.me:80 改为 servername demo.vsen.me:8000,保存并关闭。继续打开目录下的http.conf文件,在最下方 # upupw apache conf end 前增加如下代码,保存并关闭。
# 新增监听端口
Include conf/httpd-listen.conf
在 Apache2\conf 目录下新建 httpd-listen.conf 文件,在里面写入 Listen 8000,保存并关闭。打开系统防火墙(控制面板中),选择 例外 选项卡,点击下方的 添加端口 按钮,名称自起,端口号写入8000,确定。回到upupw面板,重启
没有意外的话,访问bukets.net就可以成功打开网站了。上面只做了一个网站的例子,如果以后有多个网站,那就需要重复以上步骤了
Nginx反向配置非常地强大,默认我们一般是将A域名反向到B域名的80端口上,但是如果B域名的80端口无法使用了,我们可以自己指定一个端口,这样用户实际上访问的不是默认的80端口,但是用户体验上没有什么不同
在反向绑定域名方法-Nginx反向配置和kangle服务器反向设置一文中讲到了阿里的VPS主机不让未BA的域名绑定80端口,通过我们自定义端口成功解决此问题。
这里讲一下直接利用Nginx搭建域名内网转发平台的方法,原理各上面是一样的,即将一台主机设置为将监听域名的访问请求的服务器,根据不同的请求,将用户引导到不同的端口的内网服务器上。
先在服务器上安装并编译好Nginx,然后修改配置文件 nginx.conf,根据自己的实际情况进行相应的调整,代码说明如下:
user www www;worker_processes 1;error_log logs/error.log;pid logs/nginx.pid;worker_rlimit_nofile 65535;events { use epoll; worker_connections 65535;}http { include mime.types; default_type application/octet-stream; include /usr/local/nginx/conf/reverse-proxy.conf; sendfile on; keepalive_timeout 65; gzip on; client_max_body_size 50m; #缓冲区Dai理缓冲用户端请求的最大字节数,可以理解为保存到本地再传给用户 client_body_buffer_size 256k; client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; proxy_connect_timeout 300s; #nginx跟后端服务器连接超时时间(Dai理连接超时) proxy_read_timeout 300s; #连接成功后,后端服务器响应时间(Dai理接收超时) proxy_send_timeout 300s; proxy_buffer_size 64k; #设置Dai理服务器(nginx)保存用户头信息的缓冲区大小 proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置 proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2) proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传递请求,而不缓冲到磁盘 proxy_ignore_client_abort on; #不允许Dai理端主动关闭连接 server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }}
接着找到Nginx反向配置文件reverse-proxy.conf,配置示例如下:
server{ listen 80; server_name xxx123.tk; location / { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://192.168.10.38:3000; } access_log logs/xxx123.tk_access.log;} server{ listen 80; server_name xxx456.tk; location / { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://192.168.10.40:80; } access_log logs/xxx456.tk_access.log;
接着找到Nginx反向配置文件reverse-proxy.conf,配置示例如下:
server{ listen 80; server_name xxx123.tk; location / { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://192.168.10.38:3000; } access_log logs/xxx123.tk_access.log;} server{ listen 80; server_name xxx456.tk; location / { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://192.168.10.40:80; } access_log logs/xxx456.tk_access.log;
xxx123.tk、xxx456.tk是服务器监听的域名访问请求,192.168.10.38:3000、192.168.10.40:80是局域网服务器,重新加载nginx配置文件,使之修改生效。
把域名都解析到反向Dai理服务器上,来自不同的访问请求通过上面的配置就可以分别引向不同的内网服务器上了
因为用户所有的请求都是通过反向Dai理服务器中转的,内网服务器显示的访问IP都是反向Dai理服务器的,这里我们只要修改一下内网服务器的日志显示格式即可,在配置文件中加入以下代码:
log_format access '$HTTP_X_REAL_IP - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" $HTTP_X_Forwarded_For';access_log logs/access.log access