通过 Nginx 反向代理加速网站的访问速度
文章介绍了反向代理的原理,阐述其保护服务器、负载均衡等目的,详述了配置反向代理服务器的步骤,还针对 Nginx 反向代理出现的 502 Bad Gateway SSL 问题给出解决办法,并通过问答形式解答了相关疑问。
原理
本地到源站网络不好,可以通过网络好的机器来反向代理源站,通过本地访问反代机,反代机访问源站来获取信息反馈给本地,反代机起到中转加速的作用,所以反代机到本地和源站的网络都要好。
反向代理 vs 正向代理
(配图来自 bytebyteto.com )
反向代理服务器的目的是什么?
1.保护服务器 因为隐藏了源站ip地址,攻击者对使用反向代理的网站进行DDoS攻击会比较困难。DDoS攻击是通过破坏主机服务与互联网的连接,从而使用户无法访问该网站。当使用反向代理时,黑客将只能攻击代理服务器,这增加了安全性。
2.负载均衡
3.缓存静态内容
4.加密和解密SSL通信
如果网站使用反向代理,则其服务器的地址将被隐藏,黑客只能访问代理IP地址。这对黑客和恶意实体起到了一定的防护。
例如:对使用反向代理的网站进行分布式拒绝服务(DDoS)攻击要困难得多。DDoS攻击是通过破坏主机服务与互联网的连接,从而使用户无法访问该网站。
当网站使用反向代理时,黑客将只能攻击这些代理,这将作为附加的安全层。
配置步骤
1.将源站网站搭建好
这里就无须多做解释了。
2.新建静态网站
反代机安装面板,新建站点,域名填写网站域名,如无其他需求,则只需安装 Nginx ,无需安装数据库、PHP等,简单来说,就是新建一个静态网站即可。
3.设置反向代理
反代机站点设置完毕后,在站点设置里选择反向代理,目标URL为源站的网址,按照图片格式填写(注:有时直接复制的网站链接最后面会有个/,需要删除掉),缓存看需求,有时源站设置了缓存,这里如果再开启缓存的话会导致网站打不开,或者如缓存后出现wordpress后台重复登陆等问题,需要编辑配置文件取消后台缓存。
*源站一般都开了https,因此”后端代理地址”也需要选择https *反向代理完成以后,无论是用源站https证书或再申请一个https证书,都可以的。
4.修改 Hosts 文件
路径:/etc 修改反代机服务器hosts文件,将中转机指向源站,格式:源站ip 域名。然后域名解析到反代机ip,即可访问。
5.重启 Nginx
Nginx 反向代理出现502 Bad Gateway SSL问题
你是否遇到过使用 Nginx 反代网站时出现 502 Bad Gateway , 明明正常反代都没问题 , 可是反代就 502 Bad Gateway , 查看错误日志显示 :
*8 SSL_do_handshake() failed (SSL: error:140194438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error:SSL alert number 80) while SSL handshaking to upstream, client: ip 地址, server: xxx.com, request: “GET / HTTP/2.0”, upstream: “https://vpsip:443/”, host: “xxx.com”
初步研究问题发现是由于网站启用了 SNI ,Nginx反代默认没有加入 SNI proxy_ssl_server_name on; ,Nginx 无法成功 handshake 上游的 SSL , 导致 502 Bad Gateway.
解决办法
1.打开配置文件
2.加入代码
在 proxy_set_header REMOTE-HOST $remote_addr; 下一行加入
proxy_ssl_server_name on;
保存,重启Nginx 即可
Q&A
Q1
Q:网站本身是放在英国的,国内访问极慢, 300-400ms 延迟还掉包。。现在呢想加速国内访问,由于公司原因源服务器不能动,于是开了台香港 vps ,我在香港这台 vps 上用 nginx 搭了反向代理,用 route53 的 DNS 把所有国内的的访问都转到香港的 IP 上来。
于是现在问题来了, ping 的时候是不怎么掉包了,但感觉网站还是慢啊。。网站本身是个 WordPress ,未登录下访问还是挺快的,因为用了缓存插件静态化了,但登陆后台后还是很慢,每次切换页面都要等 1-2 秒(排除机器性能问题,英国的同事就说后台秒开非常快)。。
我在想是不是我的搭建方法不对?感觉 nginx 的代理值是加速了静态的文件,而动态的文件好像还是直接请求的源服务器,我这样理解对吗?求高人指点!
A: 访问后台必然很慢,这个无解(除非🍅)。
client->proxy->server 你访问后台还是这个流程,你通过一层代理访问后台不但可能比较慢而且经常 502 ,首先香港到英国也是慢的, 你这个除了把主站搬近一点无解. 除非你的站是纯 html。
Q2
Q:反向代理就 100% 安全吗?
A:不是的,经验老道的黑客总会找到绕过安全机制的方法。