反向绑定域名,即用户A访问到B,B将A的请求转向C,最后实现A访问C的过程。反向绑定域名最初应该是应用在站点负载均衡和域名内网转发上,利用反向绑定域名的方法可以将用户的不同请求分发到不同的服务器上,从而实现性能均衡和减轻主服务器负担的目的。
反向绑定域名的好处有很多,比如实现动静分离,让nginx来处理静态文件,将动态内容请求分发到不同语言编写的后端程序,而这些不用语言编写的程序往运行在专门的服务器,如apache处理php,tomcat处理java,uwsgi处理python等等。
反向绑定域名在国内的应用也很广泛,有些购买了国内空间的朋友,域名没有BA的可以用一台美国的服务器充当反向绑定域名的服务器,强制将域名绑定到空间上。有些国外的空间或者网站无法访问了,也可以用反向绑定域名的方法实现空间的正常访问。
一、利用虚拟主机空间作反向绑定域名
二、利用Nginx反向绑定域名
三、利用kangle web搭建反向绑定域名服务器
四、利用AMH和upupw来反向绑定域名
-
AMH是国内一个开源的主机面板,可以创建 LNMP、LAMP、LNMH 等不同WEB应用环境,新版本的AMH还支持apache2.4和HHVM。AMH相应的功能模块也非常地多,其中AMProxy就是一个反向绑定域名模块。
-
AMProxy的2.0版本支持缓存管理功能,支持在线关键字添加、替换,支持设置不同类型文件替换、与支持添加自定义首尾html代码块等。利用CDN智能解析功能,将不同路线、地理位置的用户解析到相应服务器,对用户访问进行缓存加速,同时减轻源站的服务器压力
-
使用 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)
-
找到刚刚新建的虚拟主机规则,并将 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面板,重启
-
END
五、利用Nginx搭建域名内网转发平台
-
Nginx反向配置非常地强大,默认我们一般是将A域名反向到B域名的80端口上,但是如果B域名的80端口无法使用了,我们可以自己指定一个端口,这样用户实际上访问的不是默认的80端口,但是用户体验上没有什么不同
-
先在服务器上安装并编译好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
END