解决放在国外服务器的网站在国内访问慢,解决网站报错ERR_CONNECTION_RESET – 配置Apache反向代理+缓存服务器

问题描述

放在国外服务器的公司英文网站,做外贸用,主要宣传和推广公司产品。近期突然出现在国内部分地区无法访问,报错ERR_CONNECTION_RESET,而国外访问正常或者通过海外代理也可以访问,只是国内部分地区或者部分网络无法访问,使用代理又可以访问,也能ping通,这是域名被 墙了。域名被封后没有查询和申诉渠道,虽然此时域名解析正常,但访问会被连接重置,直接导致在国内或部分地区无法访问网站。

网站访问报错ERR_CONNECTION_RESET

只有将网站解析到国内服务器,同时对网站备案,才能解决该问题,但是这样就无法保证国外客户的访问质量和速度了(这将会严重影响到外贸网站的宣传推广)。怎样才能同时保证国内和海外的访问呢。

或者为了提高放在国外服务器的外贸网站访问速度(一般做外贸推广、电商公司经常用到),也可以使用以下方法解决。

解决方法

一般做电商和内外贸的公司,都有两台服务器,一台国内服务器用于宣传中文网站,一台国外服务器放英文网站用于推广外贸业务。为了提高国内访问英文网站的速度和避免国内访问被 墙的问题。我们可以利用内贸服务器做反向代理+缓存的方式,再加上智能云解析,国内将英文网站解析到国内服务器,国外将英文网站解析到国外服务器。

需要条件

  1. 有两台服务器,一台国内,一台国外
  2. 网站域名备案

一、在国内服务器上配置Apache反向代理+缓存服务器

  1. 打开httpd.conf,找到以下几个Module并将其启用(如果没有,需自行添加)
mod_proxy.so
mod_proxy_http.so
mod_proxy_connect.so
mod_cache.so
mod_disk_cache.so
  1. 修改http-vhosts.conf,将http重定向到https
<VirtualHost *:80>
    ServerName www.bluepost.cn
    ServerAlias bluepost.cn
    #redirect
    RewriteEngine on
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule ^(.*)?$ https://%{SERVER_NAME}$1 [R=301,L]
</VirtualHost>
  1. 修改http-ssl.conf

上传域名SSL证书

将域名签发的证书上传到反向代理服务器

通过域名转发

<VirtualHost _default_:443>
    ServerName www.bluepost.cn
    ServerAlias bluepost.cn

    SSLEngine on
    SSLCertificateFile "conf/ssl.crt/bluepost.cn_public.crt"
    SSLCertificateKeyFile  "conf/ssl.key/bluepost.cn.key"
    SSLCertificateChainFile "conf/ssl.crt/bluepost.cn_chain.crt"

    #开启代理SSL,并验证后端服务器的证书
    SSLProxyEngine on

    #设置代理通过域名
    ProxyPass / http://www.bluepost.cn/
    ProxyPassReverse / http://www.bluepost.cn/
</VirtualHost>

需要同时修改反向代理服务器的本地hosts,添加域名映射到国外服务器,打开反向代理服务器的hosts文件,添加 115.155.2.10 www.bluepost.cn

通过域名转发只适用于部分地区无法访问,我们将无法访问地区域名解析到可访问地区的反向代理服务器。如果是国内所有地区都无法访问,这是域名被加黑名单了,我们只能通过后两种方法转发代理。

通过https + IP + 端口转发

<VirtualHost _default_:443>
    ServerName www.bluepost.cn
    ServerAlias bluepost.cn

    SSLEngine on
    SSLCertificateFile "conf/ssl.crt/bluepost.cn_public.crt"
    SSLCertificateKeyFile  "conf/ssl.key/bluepost.cn.key"
    SSLCertificateChainFile "conf/ssl.crt/bluepost.cn_chain.crt"

    SSLProxyEngine on
    # 不验证后端服务器的证书
    SSLProxyVerify none
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off

    #设置代理通过IP和端口
    ProxyPreserveHost on  #打开host域名请求地址,如果使用代理,获取的请求地址是对外域名,如果off关闭,则获取的是内网ip地址请求
    ProxyPass / https://115.155.2.10:8001/  #将IP地址改为国外服务器的IP
    ProxyPassReverse / https://115.155.2.10:8001/
</VirtualHost>

此步骤 不验证后端服务器的证书 不推荐(后端服务器配置时我们设置任意证书都可以),我们最好是添加自签名证书,然后配置后端服务器为自签名证书,并开启后端服务器https证书验证,详情参考另一篇文章制作Apache免费自签名SSL证书,配置Apache反向代理开启后端服务器https证书验证

通过http + IP + 端口转发

<VirtualHost _default_:443>
    ServerName www.bluepost.cn
    ServerAlias bluepost.cn

    SSLEngine on
    SSLCertificateFile "conf/ssl.crt/bluepost.cn_public.crt"
    SSLCertificateKeyFile  "conf/ssl.key/bluepost.cn.key"
    SSLCertificateChainFile "conf/ssl.crt/bluepost.cn_chain.crt"

    #设置代理通过IP和端口
    ProxyPreserveHost on  #打开host域名请求地址,如果使用代理,获取的请求地址是对外域名,如果off关闭,则获取的是内网ip地址请求
    ProxyPass / http://115.155.2.10:8001/  #将IP地址改为国外服务器的IP
    ProxyPassReverse / http://115.155.2.10:8001/
</VirtualHost>

将端口加入后端服务器的防火墙

通过端口转发的,将端口加入后端服务器的防火墙(阿里云的可以加入安全组),这样可以限制指定的IP访问改端口,进一步增加安全性。具体操作方法参考另一篇文章,添加阿里云服务器安全组规则构建免费防火墙

二、反向代理服务器开启缓存设置

修改http-ssl.conf文件,添加下边 缓存设置 部分代码

<VirtualHost _default_:443>
    ServerName www.bluepost.cn

    #在此处添加上一步的配置和其他配置

    #缓存设置
    CacheRoot "D:/www/cache/"  #缓存目录,需要自行建立,并给Apache进程所在的用户分配NTFS权限
    CacheEnable disk /
    CacheDirLevels 2
    CacheDirLength 1
</VirtualHost>

三、智能解析设置

  1. 添加A记录,默认 解析线路设置为国内服务器IP
  2. 添加A记录,境外 解析线路设置为国外服务器IP

后端服务器(源服务器)配置

通过https/http + IP + 端口转发时,我们还需要配置后端服务器,详情参考另一篇文章制作Apache免费自签名SSL证书,配置Apache反向代理开启后端服务器https证书验证

备注 – ProxyPreserveHost选项介绍

ProxyPreserveHost选项:当后端出现多个”主机”
一、是IP访问的主机(没有ServerName),如果ProxyPreserveHost是Off的,转发给源服务器就没有域名首部,只有IP地址
二、是域名访问主机(有ServerName),如果ProxyPreserveHost是Off的,那么将访问www.bluepost.cn主机;反之为on,访问localhost主机

转载请注明:半亩方塘 » 解决放在国外服务器的网站在国内访问慢,解决网站报错ERR_CONNECTION_RESET – 配置Apache反向代理+缓存服务器