Varnish和Nginx FastCGI是用于缓存Web内容的反向代理的突出示例。
卓越的压缩
服务器响应会占用大量带宽。在将它们发送到客户端之前压缩服务器响应(例如使用gzip)可以减少所需的带宽量,从而加快网络上的服务器响应。
反向代理非常适合压缩服务器响应,因为它位于源服务器和客户端之间。
优化的SSL加密
为每个客户端加密和解密SSL/TLS请求对于源服务器来说可能是非常繁重的。反向代理可以承担此任务以释放源服务器的资源用于其他重要任务,例如提供内容。
offload SSL/TSL加密和解密的另一个优点是减少地理上远离源服务器的客户端的延迟。
您还可以选择具有专用SSL/TLS加速硬件的反向代理来进一步优化此任务。这种反向代理称为SSL/TLS终止代理。Varnish等一些服务器不支持SSL/TSL协议,因此SSL/TSL终止反向代理可以帮助保护通过它们的流量。
更好的A/B测试
大多数A/B测试工具都要求您使用外部来加载它们的功能。但是,加载第三方脚本会减慢您的页面加载时间,并给用户带来不稳定的体验。
相反,您可以使用反向代理在服务器级别本身创建两个单独的流。例如,您可以使用Nginx的split_clients或sticky route方法来控制流量重定向。
您可以参考Nginx和freeCodeCamp的教程,了解更多关于使用反向代理执行A/B测试的信息。
监控和记录流量
反向代理捕获通过它的任何请求。因此,您可以将它们用作监控和记录流量的中心枢纽。即使您使用多个Web服务器来托管您网站的所有组件,使用反向代理也可以更轻松地监控您网站的所有传入和传出数据。
最受欢迎的反向代理
根据W3Techs的说法,几乎83%的网站不使用他们监控的反向代理服务。
网站使用的反向代理统计(来源:W3Techs.com)
在使用反向代理(如上所列)的17%网站中,您会注意到其中大多数是CDN。这是因为大多数反向代理默认隐藏它们的存在以作为安全预防措施。因此,您不能依赖像W3Techs这样的网站监控服务来查找哪些反向代理是最受欢迎的。
根据我们的研究和经验,当今最流行的反向代理是:
Nginx
Nginx是一个开源的Web服务器,也可以作为反向代理。除了用于托管网站外,它还是使用最广泛的反向代理和负载平衡解决方案之一。根据Netcraft的数据,2019年12月有超过4.79 亿台网络服务器在使用Nginx,使其成为网络服务器市场份额的领导者。
所有站点的Web服务器市场份额(来源:Netcraft)
Nginx提供了上面讨论的所有反向代理优势,以及更多。它提高了Web性能、安全性、可靠性和可扩展性。你可以使用它的配置文件来配置Nginx,它也是可热重载的。
但您也可以使用商业产品Nginx Plus来访问基于API的配置选项和其他适用于大型企业网站的功能。
Nginx在其参与的每个类别中都在Review Signal的顶级网络托管状态中名列前茅。使用Nginx的其他一些主要公司是MaxCDN、Cloudflare和Netflix。
将Nginx设置为基本的反向代理很简单。Nginx还为您提供各种指令来根据您的要求自定义服务器的反向代理。我们将在后面的部分讨论如何做到这一点。
Varnish
Varnish是一个带有内置缓存引擎的开源HTTP反向代理。它主要设计用于提供动态内容的高流量网站。您还可以将Varnish用作负载均衡器、Web应用防火墙 (WAF)以及边缘身份验证和授权服务器。
它适用于所有现代版本的Linux和FreeBSD,主要用作Nginx或Apache Web服务器的前端。Varnish强大且高度灵活的Varnish配置语言 (VCL)允许您定义各种功能,例如处理HTTP请求、缓存以及连接到一个或多个Web服务器。
出于这个原因,许多CDN使用Varnish作为快速交付内容的主要基础。
Varnish还支持Edge Side Includes (ESI),这是一种帮助您在其他网页中重用一个网页的部分的语言。如果您的网站在不同页面中使用大量重复内容,ESI可以通过缓存常用部分来帮助您加快网站的页面加载时间。
您可以使用Varnish的各种模块 (VMOD)来扩展Varnish 。前往Varnish的官方教程,了解如何将Varnish设置为WordPress的反向代理。
Apache Traffic Server
Apache Traffic Server是一个开源缓存代理服务器。它因其快速、可扩展的特性而广受欢迎。它是雅虎开发的商业产品!很久以前,但他们将其开源并将其捐赠给Apache基金会进行维护。
Comcast、Akamai、LinkedIn、Yahoo和Apple等几个主要的内容网络和CDN都使用Apache Traffic Server来支持他们的技术。
您还可以使用Apache HTTP Server ( Apache httpd ),一个HTTP服务器守护程序,在您的Web服务器上设置反向代理。除了充当基本的Web服务器外,它还可以帮助您为用户提供静态和动态内容。您将在本文后面学习如何将Apache设置为反向代理。
HAProxy
HAProxy是一个开源的反向代理和负载均衡器。它旨在与大多数现有Web服务器架构集成,包括Linux发行版和云平台。与Nginx类似,HAProxy使用事件驱动的I/O模型,并支持跨多个工作进程拆分请求。
对于HTTP请求,HAProxy即使在高负载下也表现得非常好。互联网上一些流量最高的网站,例如Airbnb、Reddit、Instagram、Stack Overflow、Tumblr、GitHub和Imgur,都使用HAProxy来有效地交付他们的网站。
讨论如何实现HAProxy超出了本文的范围,但您可以参考他们的文档以了解其工作原理。
注意: Traefik和Envoy是HAProxy的另外两个开源替代品。它们既是高性能反向代理,又是具有许多高级功能的负载平衡器。
其他一些流行的反向代理是AWS Elastic Load Balancer、GLBC、DigitalOcean Load Balancer和Google Cloud Load Balancer。有关当今使用的顶级反向代理和负载均衡器的详尽列表,您可以查看Stackshare.io。
反向代理:WordPress网站的用例
为WordPress网站使用反向代理主要有三个用例。
加载“主站点”与“代理站点”
我们将仅在此示例中使用Nginx,因为它是当今用于WordPress网站的最流行的反向代理。但同样的基本原则也适用于其他反向代理。
反向代理通常难以安装、配置和支持。
1. 托管在同一台服务器上的主站点和代理站点
如果主站点和代理站点都托管在同一台服务器上,则主站点可以在WordPress安装上运行,而单独的WordPress安装为代理站点提供动力。
由于您可以访问站点及其共享Web服务器,因此您可以为主站点设置反向代理规则,然后将代理站点配置为从反向代理加载。
以下是用于通过反向代理加载子目录站点的标准Nginx反向代理指令:
location ^~ /subfolder/ {
proxy_pass http://subfolder.domain.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
在上面的代码中,您需要将/subfolder/占位符替换为实际的子目录名称(例如/blog/, /shop/)。此外,http://subfolder.domain.com子域应与用于将反向代理指向代理站点的URL匹配。
location指令包括插入符号和波浪号 ( ^~ ) 来告诉Nginx,如果它找到定义的字符串,它应该停止搜索进一步的匹配并使用此处列出的指令。在其文档中了解有关Nginx反向代理指令的更多信息。接下来,您需要配置代理站点以通过反向代理加载。以下是配置代理站点所遵循的标准步骤:
注意:代理站点不能创建与代理站点加载所在的同一子目录重复的URL。例如,代理站点example.com/blog无法在example.com/blog/blog.
2. 仅托管在您的服务器上的代理站点
如果您只能访问代理站点及其Web服务器,那么您需要联系主站点的服务器管理员并要求他们为您设置反向代理规则。
为此,您必须遵循上述相同的步骤,但在这种情况下,您必须在两个不同的服务器上配置规则。
要托管您的代理站点,请向该站点添加一个指向反向代理的域。通常,子域适合此目的(例如blog.example.com)通过子目录链接(例如)加载代理站点example.com/blog。
设置代理站点后,您可以联系服务器支持团队(DIY主机则需要自己动手)以配置代理站点以通过反向代理加载。此时,我们的支持团队将需要您服务器的真实 IP,以便以正确计算访问次数的方式完成设置过程。如果由于某些提供商(例如 AWS CloudFront)的动态IP限制而无法提供静态IP,您的计划将改为转换为基于带宽的类似计划。
3. 仅托管在您的服务器上的主站点
如果您只能访问主站点及其Web服务器,则应设置反向代理并配置其规则以从外部主机加载代理站点。安装和配置代理站点以通过反向代理加载是辅助服务器管理员的责任。
DIY主机可以添加本文前面列出的标准反向代理规则。如果需要,您还可以将任何其他自定义添加到这些规则中。
在这种情况下,您完全负责配置代理站点以通过反向代理正确加载它。
如何将Nginx设置为反向代理
如果您的是DIY服务器,那么您必须自己设置反向代理并将其配置为指向代理站点。
根据您的Web服务器的操作系统,您可以以不同的方式安装Nginx。对于Linux发行版,您可以根据您的Linux发行版的版本使用各种Nginx包。
在下面的示例中,我们将主站点安装在example.com域名中,而代理WordPress站点安装在blog.domain.com子域中。它们都由运行在Ubuntu 18.04上的Web服务器上的Apache提供支持。我们将在主服务器上安装和配置Nginx作为反向代理。
首先,通过SSH访问服务器的终端。然后使用该apt-get命令更新您的发行版的软件包列表并在您的Web服务器上安装Nginx。
sudo apt update sudo apt install nginx
接下来,您需要将Nginx配置为代理Apache上托管的域的请求。为此,请创建一个新的虚拟主机文件。在这里,我使用nano编辑器添加代码,但您可以使用您选择的任何代码编辑器。
sudo nano /etc/nginx/sites-available/example.com.conf
然后通过添加以下server {...}和location块来设置Nginx指令以将请求转发到Apache:
server {
listen 80;
server_name example.com www.example.com;
index index.php;
root /var/www/example.com/public # fallback for index.php
location / {
try_files $uri $uri/ /index.php?$query_string;
}location /blog {
proxy_pass http://blog.domain.com;proxy_http_version 1.1;
proxy_cache_bypass $http_upgrade;
# Proxy headers
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
# Proxy timeouts
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
在上面的代码中,我定义了一个example.com/blog由Apache服务器提供的子目录链接。确保在proxy_pass指令中使用代理网站的公共IP地址(或URL)。就我而言,我的代理网站托管在blog.domain.com子域上。
注意:在进行任何更改之前,请确保代理网站已安装并准备好提供服务。
您可以在Nginx的详细指令索引中了解有关此处使用的所有反向代理指令的更多信息。
保存虚拟主机文件。然后通过在/etc/nginx/sites-available和/etc/nginx/sites-enabled目录中创建example.com.conf文件符号链接来激活新的虚拟主机。
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/example.com.conf
之后,测试Nginx是否有任何配置错误。
sudo nginx -t
如果没有错误,请重新加载Nginx以强制执行更改。
sudo systemctl reload nginx
您现在已经成功地将Nginx设置为反向代理。为了确认这一点,您可以使用phpinfo()函数来检查您访问代理站点时加载的PHP变量。
在SERVER_SOFTWARE和DOCUMENT_ROOTPHP变量下,您将看到Apache在后端为该域提供服务。但是PHP变量证实Nginx被用作反向代理来转发请求。但PHP变量的HTTP_X_REAL_IP和HTTP_X_FORWARDED_FOR证实,Nginx被用作转发请求的反向代理。
您可以使用fastcgi_cache和ngx_cache_purge模块加快通过Nginx为WordPress站点提供服务的速度。第一个模块将缓存您的站点,而第二个模块将根据特定事件(例如发布或编辑WordPress帖子/页面)自动清除缓存。
您可以使用WordPress插件Nginx Cache Controller直接从您的WordPress管理仪表盘控制Nginx的代理服务器缓存。如果您使用的是WordPress多站点安装,那么您可以使用Nginx Helper插件来执行相同的操作。
查看Nginx的主要文档和Nginx WordPress设置指南,详细了解如何使用Nginx和WordPress。
如何将Apache设置为反向代理
在开始之前,请确保您有两个网站在和example.com运行blog.domain.com。第一个网站可能是也可能不是WordPress网站,但第二个网站应该是WordPress网站,因为它主要用于在example.com/blog子目录链接处加载根域的博客。
通过SSH打开服务器的终端并启用Apache的代理模块,开始配置Apache。
sudo a2enmod proxy proxy_http ssl
运行上述命令很可能会重新启动Apache以重新加载新定义的指令。
接下来,编辑主服务器的虚拟主机文件以创建反向代理。这是您需要添加的代码:
DocumentRoot /var/www/app/public SSLProxyEngine On ProxyRequests off ProxyPass /blog http://blog.domain.com ProxyPassReverse /blog http://blog.domain.com
ProxyPass指令将为指定的路径创建一个反向代理,而ProxyPassReverse指令将拦截通过该反向代理发送的HTTP响应标头并重写它们以匹配Apache服务器。
保存文件后,您需要wp-config.php通过在要求您停止编辑的行之前添加以下代码来编辑文件。
# ProxyPass Settings # overrides the variables below to ensure that any # request to /blog/* subdirectory is taken care of properly $_SERVER['REQUEST_URI'] = '/blog' . $_SERVER['REQUEST_URI']; $_SERVER['SCRIPT_NAME'] = '/blog' . $_SERVER['SCRIPT_NAME']; $_SERVER['PHP_SELF'] = '/blog' . $_SERVER['PHP_SELF'];
最后,您需要更新WordPress站点的数据库以添加子目录链接/blog的配置值。您可以通过运行以下SQL查询来做到这一点:
UPDATE wp_options SET option_value = 'https://www.example.com/blog' WHERE option_name IN( 'siteurl', 'home' );
您现在应该能够访问https://www.example.com/blog链接并将您的WordPress站点托管在http://blog.domain.com子域负载上,而无需更改其URL。您可以像往常一样继续使用WordPress来浏览、编写、编辑和管理您的网站。
反向代理的限制在CDN和反向代理之间进行选择
CDN是一种高级形式的反向代理,大部分配置和维护由第三方负责。它们可以为您的WordPress网站提供惊人的性能优势,而您只需付出很小的努力。
CDN不仅可以缓存内容并将其快速提供给用户,还可以减少源服务器上的负载、降低带宽成本、提供额外的安全层、提高网站的SEO并帮助您更好地扩展网站。
您会注意到CDN提供的大部分优势与反向代理提供的优势相同。那么,您应该选择CDN而不是反向代理,反之亦然?
没有理由你必须只接受一个。如果您已经安装了反向代理,您仍然会看到使用CDN的速度和性能提升。它们的缓存层都很好,如果您有任何独特的请求处理需求(例如动态内容、电子商务),那么您可以使用CDN或反向代理传递的一些自定义标头轻松配置它。
小结
WordPress非常灵活。您可以将它用作博客、电子商务站点,甚至是学习管理系统。在大多数情况下,您可以自定义WordPress以满足您的独特需求。
但是,有时您可能必须使用单独的域或辅助服务器来托管其他站点。如前所述,这可能是因为大型企业网站使用了不同的技术堆栈,或者为预先存在的非WordPress网站启动了WordPress博客。
反向代理可以在这两种情况下提供帮助,帮助您充分利用WordPress,而无需放弃主网站并重新开始。

还没有评论,来说两句吧...