如何设置Nginx和Apach反向代理

温馨提示:注册会员付费购买资源可永久免费下载更新版本

反向代理位于Web服务器的前面,在请求到达源服务器之前接收所有请求。它的工作方式类似于一个转发代理,只是在这种情况下,它是一个使用代理而不是用户或客户端的Web服务器。反向代理通常用于增强Web服务器的性能、安全性和可靠性。

例如,你可以在服务器上运行一个域名为example.com的非WordPress站点,并在服务器b上运行它在example.com/blog的WordPress博客。您可以配置一个反向代理,将博客请求重定向到不同的服务器。

在这篇文章中,你将学习反向代理服务器的基础知识,它们是如何工作的,它们的主要优点,以及如何使用它们来加速和保护你的WordPress站点。

什么是反向代理?

使用反向代理的好处

最流行的反向代理

反向代理:WordPress网站的用例

如何将Nginx设置为反向代理

如何将Apache设置为反向代理

反向代理的限制

在CDN和反向代理之间选择

什么是反向代理?

要了解什么是反向代理服务器,首先需要了解它的功能,并熟悉它的所有相关术语。

当您通过输入域名或点击链接正常浏览网页时,您的浏览器/设备将直接连接到网站的服务器并开始下载其资源。

你通常如何浏览互联网?

如果你想匿名访问你的网站的IP地址,那么你可以先使用代理服务器发送你的所有请求。它会将您的请求转发到DNS解析器,然后从其源服务器下载网站的资源。

之后,它会将这些资源传递给你的设备。这叫货代。

转发代理服务器的工作原理

你是完全隐藏的网站,因为它认为你的请求是从一个运输代理。

注意:由于一些主机服务提供商统计网站访问量的方式,他们要求用户设置一个头来通知源服务器他们的真实IP地址。因此,隐私利益不适用于此类特定情况。

除了增强用户隐私,转发代理主要用于绕过地理内容限制。例如,如果您想观看在您所在地区被屏蔽的视频,您可以使用转发代理和IP地址,在那里您可以观看视频。

转发的工作方式与虚拟专用网络(VPN)几乎相同,但它们是具有独特用例的不同技术(尽管它们有时可能会重叠)。

反向代理服务器和正向代理服务器

反向代理服务器充当源服务器的前端,以保持匿名性并增强安全性,就像用户/客户端如何使用正向代理来实现相同的目的一样。它确保没有用户或客户端直接与源服务器通信。

反向代理服务器的工作原理

正向代理和反向代理之间几乎没有区别,但它们的工作方式不同。

这两者可以一起工作,因为它们的功能之间没有重叠。通常,用户/客户端使用正向代理,而源服务器使用反向代理。

正向代理和反向代理服务器

因为服务器管理员可以控制反向代理的工作方式,所以您可以使用它来启用许多有用的功能。

我们将在本文后面列出它的所有好处。

为什么使用反向代理?

许多企业,尤其是大型企业,使用定制网站,这些网站是根据他们的独特需求量身定制的,而不是在WordPress上运行。一些例子包括银行和保险网站。

在其他情况下,企业可能将其网站托管在不允许安装任何外部软件的外部服务上(例如WordPress)。通常,这些都是使用Shopify等电子商务平台的中小型零售商。

由于WordPress强大的CMS功能,许多企业,包括拥有定制网站的大型企业,可能更喜欢使用WordPress来托管他们的博客。

解决这个问题的一个方法是在主网站的子域上安装WordPress,并建立一个导航菜单,这样用户可以方便地在主网站和博客之间切换。

由于一个子域表现为一个唯一的域,它会影响你的网站的SEO。虽然谷歌对子域和子目录一视同仁,但是如果一个网站托管在子域中,那么优化网站的搜索引擎排名要比托管在子目录中花费更多的精力。

在网站上开设博客的两种方式

重申一下,Google对子域和子目录一视同仁,但是有些SEO专家不同意。即使不影响网站的SEO,托管在子目录中的网站也更容易维护。

这就是为什么您可以使用反向代理将请求重定向到托管在单独服务器上的站点博客。例如,银行可以在他们的服务器上安全地托管他们的主要网站,但是他们也可以在另一个服务器提供商上单独托管他们的WordPress驱动的博客。

反向代理用例示例

将两个不同的站点统一在一个域名下是使用反向代理的主要优势之一。可以帮助品牌维护网站的组织性、专业性和可信度。

使用反向代理的好处

除了上述用例,反向代理还有许多其他好处。下一节将讨论它们的一些主要优势。

负载均衡

单个源服务器无法处理每天有数百万独立访问者的网站的所有传入流量。在这些情况下,您可以熟练地将流量分布在有许多服务器的池中。通常,所有服务器都会托管相同的内容,以消除单点故障,从而使网站更加可靠。

反向代理是一种很好的设置方式,因为它可以在传入流量到达源服务器之前接收它。如果源服务器过载或完全故障,它可以将流量分配给其他服务器,而不会影响站点功能。

反向代理还可以将传入的请求定向到多个服务器,每个服务器执行其优化的特定功能。然后,反向代理可以从所有服务器收集响应,并将它们传递给客户端。

由于我们主要使用最流行的反向代理进行负载平衡,所以它们也被称为负载平衡器。

全球服务器负载平衡(GSLB)

GSLB是一种先进的负载平衡方法,用于在全球多个战略部署的服务器之间分配网站流量。通常通过选播路由技术来完成,反向代理根据客户端和服务器之间最快的传输时间来选择服务器节点。

GSLB不仅大大提高了网站的可靠性和安全性,还减少了延迟和加载时间,从而提升了用户体验。您可以将GSLB与其他网络优化技术(如勺子喂养)相结合,以进一步释放源服务器的计算资源。

虽然可以在服务器上手动设置全局服务器负载均衡,但通常由Cloudflare、优派云等专用cdn处理。

增强的安全性

反向代理可以屏蔽原始服务器的IP地址和其他特征。所以你网站的原服务器可以更好的保持其匿名性,从而显著提高其安全性。

由于反向代理将在流量到达主服务器之前接收所有流量,因此任何攻击者或黑客都很难将您的网站作为DDoS攻击等安全威胁的目标。

您可以使用严格的防火墙来加强反向代理的安全性,以抵御常见的网络攻击。如果没有安装反向代理,就很难删除恶意软件或者开始删除。

像HAProxy这样的反向代理可以将基本的HTTP访问认证添加到没有启用它的Web服务器上。您还可以使用反向代理为各种类型的请求添加集中式身份验证。

强大的缓存

您可以使用反向代理通过缓存静态和动态内容来加速Web。这样可以减少源服务器的负载,从而使网站运行更快。

例如,如果您的源服务器在美国,而欧洲的用户访问您的网站,那么您可以从欧洲的反向代理服务器提供网站的缓存版本。因为反向代理比原服务器更接近用户,所以网站的加载时间会更短,从而使其表现良好。

Varnish和Nginx FastCGI是用于缓存Web内容的反向代理的突出例子。

出色的压缩

服务器的响应占用了大量带宽。在将服务器响应发送到客户机之前对其进行压缩(例如,使用gzip)可以减少所需的带宽量,从而加快网络上的服务器响应。

反向代理非常适合压缩服务器响应,因为它位于源服务器和客户端之间。

优化的SSL加密

对每个客户端的SSL/TLS请求进行加密和解密对于源服务器来说是非常繁重的。反向代理可以承担这项任务,以释放源服务器的资源用于其他重要任务,例如提供内容。

卸载SSL/TSL加密和解密的另一个优势是减少地理上远离源服务器的客户端的延迟。

您还可以选择带有专用SSL/TLS加速硬件的反向代理来进一步优化这项任务。这个反向代理被称为SSL/TLS终止代理。有些服务器,如Varnish,不支持SSL/TSL协议,因此SSL/TSL终止反向代理可以帮助保护通过它们的流量。

更好的A/B测试

大多数A/B测试工具要求您使用外部JavaScript库来加载它们的函数。但是加载第三方脚本会拖慢你的页面加载时间,给用户不稳定的体验。

相反,您可以使用反向代理在服务器级别创建两个单独的流。例如,您可以使用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,使其成为网络服务器市场份额的领导者。

所有网站网络服务器的市场份额(来源:Netcraft)

Nginx提供了上面讨论的所有反向代理优势,甚至更多。它提高了网站的性能、安全性、可靠性和可扩展性。您可以使用它的配置文件来配置Nginx,Nginx也是可热加载的。

但是您也可以使用商业产品Nginx Plus来访问基于API的配置选项和其他适用于大型企业网站的功能。

Nginx在其参与的每个类别中,都是Review Signal的顶级虚拟主机。其他一些使用Nginx的大公司有MaxCDN、Cloudflare和网飞。

将Nginx设置为基本的反向代理很简单。Nginx还为您提供了各种指令,根据您的需求定制服务器的反向代理。我们将在后面的部分讨论如何做到这一点。

光泽面

Varnish是一个开源的HTTP反向代理,内置缓存引擎。它主要是为提供动态内容的高流量网站设计的。您还可以将Varnish用作负载平衡器、Web应用防火墙(WAF)以及边缘认证和授权服务器。

它适用于Linux和FreeBSD的所有现代版本,主要用作Nginx或Apache Web服务器的前端。Varnish强大且高度灵活的Varnish配置语言(VCL)允许您定义各种功能,如处理HTTP请求、缓存和连接到一个或多个Web服务器。

由于这个原因,许多cdn使用清漆作为快速交付内容的主要基础。

Varnish还支持Edge Side Includes (ESI),这是一种帮助您在其他网页中重用部分网页的语言。如果您的网站在不同的页面中使用大量重复的内容,ESI可以通过缓存常用部分来帮助您加快网站的页面加载时间。

您可以使用清漆(VMOD)的各种模块来扩展清漆。去Varnish的官方教程学习如何设置Varnish作为WordPress的反向代理。

Apache流量服务器

Apache Traffic Server是一个开源的缓存代理服务器。由于其快速和可伸缩的特性,它很受欢迎。它是由雅虎开发的商业产品。很久以前了,但是他们把它打开了,捐给了阿帕奇基金会进行维护。

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模型,并支持跨多个工作进程拆分请求。

即使在高负载下,HAProxy对于HTTP请求的性能也非常好。一些互联网上流量最高的网站,如Airbnb、Reddit、Instagram、Stack Overflow、Tumblr、GitHub和Imgur等,都使用HAProxy来有效地交付其网站。

讨论如何实现HAProxy超出了本文的范围,但是您可以参考他们的文档来了解它是如何工作的。

注意:Traefik和Envoy是HAProxy的另外两个开源替代品。它们既是高性能的反向代理,也是具有许多高级功能的负载平衡器。

其他流行的反向代理是AWS弹性负载平衡器,GLBC,数字海洋负载平衡器和谷歌云负载平衡器。要获得目前使用的顶级反向代理和负载平衡器的详尽列表,您可以查看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;}

在上面的代码中,需要将/子文件夹/占位符替换为实际的子目录名(例如/blog/、/shop/)。此外,http://subfolder.domain.com子域应该与用于将反向代理指向代理站点的URL相匹配。

location指令包括脱字符和波浪号(~),告诉Nginx如果找到定义的字符串,它应该停止搜索进一步的匹配,并使用这里列出的指令。在其文档中了解更多关于Nginx反向代理指令的信息。接下来,您需要将代理站点配置为通过反向代理加载。以下是配置代理站点应遵循的标准步骤:

在加载代理站点的路径上创建一个子目录。所有代理网站的文件都被移动到这个子目录中。

更新Web服务器的配置文件,将新的子目录定义为代理站点的根目录。此外,您需要添加重写规则,以便从每个传入请求的请求URI中删除子目录。

更新代理站点数据库中的所有URL以匹配实时站点URL(例如,example.com/blog)。

使用wp-config.php文件编辑代理站点,$_SERVER[‘HTTP_HOST’]将它指向主站点的URL。

如果使用SSL证书,需要在wp-config.php文件中定义严格的规则,以避免重定向循环。

注意:代理站点不能创建与加载代理站点的子目录相同的重复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 updatesudo apt install nginx

接下来,您需要配置Nginx来代理Apache上托管的域的请求。为此,请创建一个新的虚拟主机文件。在这里,我使用nano editor来添加代码,但是您可以使用您选择的任何代码编辑器。

sudo nano /etc/nginx/sites-available/example.com.conf

然后设置Nginx指令,通过添加以下服务器将请求转发给Apache {…}和位置块:

server {listen      80;server_name example.com www.example.com;index       index.php;root        /var/www/example.com/public    # fallback for index.phplocation / {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 headersproxy_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 timeoutsproxy_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缓存控制器,你可以直接从WordPress管理仪表板控制Nginx的代理服务器缓存。如果你正在使用WordPress多站点安装,那么你可以使用Nginx Helper插件来执行同样的操作。

查看Nginx的主要文档和Nginx WordPress安装指南,了解更多关于如何使用Nginx和WordPress的信息。

如何将Apache设置为反向代理

在你开始之前,请确保你有两个网站运行blog.domain.com与example.com。第一个网站可能是也可能不是WordPress网站,但第二个网站应该是WordPress网站,因为它主要用于在example.com/blog子目录的链接处加载根域的博客。

通过SSH打开服务器的终端,启用Apache的代理模块,开始配置Apache。

sudo a2enmod proxy proxy_http ssl

运行上面的命令可能会重启Apache来重新加载新定义的指令。

接下来,编辑主服务器的虚拟主机文件以创建反向代理。这是您需要添加的代码:

DocumentRoot /var/www/app/publicSSLProxyEngine On    ProxyRequests offProxyPass /blog http://blog.domain.comProxyPassReverse /blog  http://blog.domain.com

代理指令将为指定的路径创建一个反向代理,而代理指令将截取通过反向代理通道发送的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站点的数据库来添加子目录link /blog的配置值。您可以通过运行以下SQL查询来实现这一点:

UPDATE wp_options SET option_value = ‘https://www.example.com/blog’ WHERE option_name IN( ‘siteurl’, ‘home’ );

你现在应该能够访问https://www.example.com/blog链接,并且在不改变它的URL的情况下,在http://blog.domain.com子域上托管你的WordPress站点。你可以继续像往常一样使用WordPress浏览、编写、编辑和管理你的网站。

反向代理的限制

反向代理会带来很大的安全风险,因为它可以读取和更改通过它的所有流量。如果您通过反向代理传递HTTPS流量,那么它需要解密和重新加密传递的数据。这意味着它必须拥有SSL/TLS证书的私钥。因此,如果任何恶意方可以破坏您的反向代理,他们可以记录密码,并向您的网站注入恶意软件。

如果您或您的用户不能直接访问您的主服务器,那么使用反向代理可能会导致单点故障。例如,如果您使用反向代理作为前端来服务多个域,它的中断可能会导致所有域同时脱机。

如果你依赖第三方反向代理(比如Cloudflare),那么你就是在给他们你网站的敏感信息。尽管它们值得信赖,但你无法预测它会导致什么。

恢复备份或在通过反向代理加载的网站上推送临时站点可能会导致代理站点停止正确加载。

由于多种因素,通过反向代理加载WordPress多站点安装会很复杂,很难维护。你可以使用独立的WordPress子目录多站点安装作为代理站点的替代。

在CDN和反向代理之间选择

CDN是反向代理的高级形式,大部分配置和维护由第三方承担。它们可以为你的WordPress网站提供惊人的性能优势,而你只需付出很少的努力。

CDN不仅可以缓存内容并快速提供给用户,还可以减少源服务器的负载,降低带宽成本,提供额外的一层安全,提高您网站的SEO,帮助您更好地扩展网站。

你会注意到CDN提供的大部分优势和反向代理提供的优势是一样的。所以,你应该选择CDN而不是反向代理,反之亦然?

没有理由你必须只接受一个。如果你已经安装了反向代理,你仍然会看到使用CDN的速度和性能的提高。他们的缓存层都很不错。如果您有任何独特的请求处理需求(例如动态内容、电子商务),那么您可以通过使用CDN或反向代理提供的一些自定义头来轻松配置它。

总结

WordPress非常灵活。你可以把它用作博客、电子商务网站,甚至是学习管理系统。在大多数情况下,你可以定制WordPress来满足你独特的需求。

但是,有时您可能必须使用单独的域或辅助服务器来托管其他站点。如前所述,这可能是因为大型企业网站使用不同的技术堆栈,或者为预先存在的非WordPress网站启动WordPress博客。

反向代理在这两种情况下都有帮助,帮助你充分利用WordPress,而不需要放弃主网站并重新开始。

声明:

1,本站分享的资源来源于用户上传或网络分享,如有侵权请联系站长。

2,本站软件分享目的仅供大家学习和交流,请不要用于商业用途,下载后请于24小时后删除。

3,如果你也有好的建站资源,可以投稿到本站。

4,本站提供的所有资源不包含技术服务请大家谅解!

5,如有链接无法下载,请联系站长!

6,特别声明:仅供参考学习,不提供技术支持,建议购买正版!如果发布资源侵犯了您的利益请留言告知!


创网站长资源网 » 如何设置Nginx和Apach反向代理