如何在反向代理服务器后面修复Wordpress网站的URL

时间:2019-02-19 09:23:41

标签: php wordpress iis reverse-proxy

我在IIS 8上有一个WordPress网站,我们将其称为www.mysite.com,我需要在代理服务器(带有IIS 10)后面进行隔离。

到目前为止,我所做的是:

  • siteurlhome更改为site.mysite.com(以避免连续重定向)
  • 在新服务器中添加了站点www.mysite.com,并具有对site.mysite.com(在hosts文件中定义为旧服务器ip别名)的反向代理,其配置如下
    <configuration>
        <system.webServer>
            <rewrite>
                <outboundRules rewriteBeforeCache="true">
                    <clear />
                    <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1" enabled="true">
                        <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^http(s)?://site.mysite.com/(.*)" />
                        <conditions logicalGrouping="MatchAll" trackAllCaptures="true" />
                        <action type="Rewrite" value="http{R:1}://www.mysite.com/{R:2}" />
                    </rule>
                    <rule name="RestoreAcceptEncoding" preCondition="NeedRestoringAcceptEncoding" enabled="true">
                        <match serverVariable="HTTP_ACCEPT_ENCODING" pattern="^(.*)" />
                        <conditions logicalGrouping="MatchAll" trackAllCaptures="true" />
                        <action type="Rewrite" value="{HTTP_X_ORIGINAL_ACCEPT_ENCODING}" />
                    </rule>
                    <preConditions>
                        <preCondition name="ResponseIsHtml1">
                            <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                        </preCondition>
                        <preCondition name="NeedRestoringAcceptEncoding">
                            <add input="{HTTP_X_ORIGINAL_ACCEPT_ENCODING}" pattern=".+" />
                        </preCondition>
                    </preConditions>
                </outboundRules>
                <rules>
                    <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                        <match url="(.*)" />
                        <action type="Rewrite" url="https://site.mysite.com/{R:1}" />
                        <serverVariables>
                            <set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" />
                            <set name="HTTP_ACCEPT_ENCODING" value="" />
                        </serverVariables>
                    </rule>
                </rules>
            </rewrite>
        </system.webServer>
    </configuration>
    

不幸的是,这还不够。

尽管有反向代理出站规则,但许多脚本,css链接和图像都指向site.mysite.com(未公开到互联网)而不是www.mysite.com

是否可以解决这些链接,使它们引用www

有更好的解决方案吗?


我从未使用过WordPress / PHP,也不知道它如何构建这些URL,因此,如果您需要任何澄清,请尽可能具体,这样我可以改善我的问题。

更新

如果我配置

  • 在隔离的服务器中
    • siteurlhomewww.mysite.com
    • 在主机文件中设置127.0.0.1 www.mysite.com
  • 公开服务器中的
    • IIS 10网站绑定www.mysite.com,并将转发规则绑定到www.mysite.com
    • 在主机文件中设置WORDPRESS_SERVER_IP www.mysite.com

我收到以下IIS错误:

  

错误HTTP 400.605-错误的请求   该请求已达到最大转发限制,因此无法路由。服务器可能在请求路由拓扑中自我引用自己。

1 个答案:

答案 0 :(得分:0)

您应将siteurlhome变量设置为代理服务器的值。

如果要在www.mysite.com公开服务器,则应在这些变量中设置相同的值。