获取Windows本地主机(端口80)以转发到端口8080以获得Apache服务


9

最近发现

将IIS设置回port 80,当我将http://localhost/其插入WHS计算机时,它会显示“此网站的安全证书有问题”警告页面。如果仍然“继续”,则该URL出现https://localhost/Remote/logon?ReturnUrl=%2fremote在Windows Home Server 2011远程Web访问中的usernamepassword。现在,我不能确定记得,但我不相信最初只是http://localhost/提出了这个问题。但是,似乎这可能会影响任何访问本地主机的尝试(无论端口如何)。

实际可能是什么主要问题

哦,网络错综复杂!让我感到困扰的一件事是,为什么其中两个站点会“部分地”出现,而其他站点却根本没有。然后,运行Firebug的NET跟踪向我揭示了我的主要问题是我的ISP充当DNS代理,当然也没有找到我的测试站点。但是,它确实找到了位于www.(而非test.)地址的两个站点,并且似乎在为这两个站点服务,但是图像被阻止,因为(我假设)我已经设置了访问图像文件的块(如果不是)的话www.。特定网站。

这解释了未显示图像的奥秘(期待直接localhost:8080呼叫)以及“部分”找到五个位置中的两个特定位置时的奇怪行为。

现在,我需要弄清楚如何正确配置路由器或代理文件以重定向回我的WHS计算机。我正在使用Wildblue卫星互联网服务,因为我不在任何更快的服务连接范围内。他们有一个“优化程序”文件(我不知道每个人是否都可以看到它,如果不可见,则基本上与此版本相同),我可以修改并放在本地系统上以实现我需要什么,但是我不确定我可能需要在那里做些什么。

如果有人对修改该文件或如何配置我的Linksys E1200路由器有任何建议,如果它是本地站点,则避免发送到代理,那么这可能是解决我的问题的第一步(也是最后一步)。

基于harrymc的建议的代表性代码...仍然不起作用

IIS端口设置为:90

httdp 文件:

Listen *:80
ServerName localhost:80

vhosts 文件:

NameVirtualHost *:80
<VirtualHost *:80>
    ServerName localhost
    ProxyRequests off
    ProxyPass / http://127.0.0.1:90/
    ProxyPassReverse / http://127.0.0.1:90/
</virtualHost>

<VirtualHost *:80>
    DocumentRoot "C:/Users/Public/LocalWebsites/site1.net/httpdocs"
    ServerName test.site1.net
    ProxyRequests off
    ProxyPass / http://127.0.0.1/
    ProxyPassReverse / http://127.0.0.1/
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "C:/Users/Public/LocalWebsites/site2.net/httpdocs"
    ServerName test.site2.net
    ProxyRequests off
    ProxyPass / http://127.0.0.1/
    ProxyPassReverse / http://127.0.0.1/
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "C:/Users/Public/LocalWebsites/site3.com/httpdocs"
    ServerName test.site3.com
    ProxyRequests off
    ProxyPass / http://127.0.0.1/
    ProxyPassReverse / http://127.0.0.1/
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "C:/Users/Public/LocalWebsites/site4.com/httpdocs"
    ServerName test.site4.com
    ProxyRequests off
    ProxyPass / http://127.0.0.1/
    ProxyPassReverse / http://127.0.0.1/
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "C:/Users/Public/LocalWebsites/site5.com/httpdocs"
    ServerName test.site5.com
    ProxyRequests off
    ProxyPass / http://127.0.0.1/
    ProxyPassReverse / http://127.0.0.1/
</VirtualHost>

以前的更新:我认为是主要问题(可能是次要问题)

如何使Windows Home Server(运行IIS)将特定的本地主机URL转发到端口,8080以便在同一台计算机上运行的Apache(而非IIS)将请求提取到页面中?

c:\Windows\System32\drivers\etc\hosts文件已更改(请参阅下文),但我认为这与重新路由到新端口无关。我还假设IIS test.whatever在端口上接收特定的url请求,80并路由到同一端口上自己的本地主机。

我从研究发现的站点上的技巧下载了“ 应用程序请求路由”,但是在查看过程中,我不确定它是否会有所帮助(我希望通过它建立一些基于url的转发到端口)。我是网页设计师,而不是网络向导。因此,所有这些工作方式对我来说还是遥不可及。8080

可能的发展方向

基于此链接(在下面基于erikxiv的第一条评论搜索了更多内容之后找到),我尝试在IIS中尝试以下操作作为URL重写:

出站规则:

匹配:(.*似乎可以测试)

条件:

匹配任何...(这些似乎测试模式匹配还可以)

{HTTP_HOST} Matches the Pattern test\.site1\.net
{HTTP_HOST} Matches the Pattern test\.site2\.net
{HTTP_HOST} Matches the Pattern test\.site3\.com

重写动作:

http://localhost:8080/{R:0} (it would not let me put R:1 like the example)

但是似乎仍然没有转发!


现在,下面的信息是以上新请求的全部背景。


背景资料

我最近将运行Windows XP的旧台式机更改为Windows Home Server(2011年)。旧计算机还是Apache安装上运行的本地测试站点的主机。做过一些研究后发现,在WHS机器上运行Apache并不像我最初想象的那么困难(许多站点都说WHS和Apache的IIS会引起问题,但是我发现有几个提到如果设置正确,根本没有问题, -基本上,请确保没有端口冲突)。

因此,我在WHS计算机上安装了WAMP(64位版本),并更改了Apache httpd配置文件中的设置以侦听端口,8080因此不会与IIS发生冲突。我将虚拟主机文件设置为与XP计算机上一样,并且端口也进行了更改。

基本上,除了 ... 以外其他一切似乎都运行良好(但是,请参阅更新)。

(原始)问题

虽然访问本地站点的页面正常运行,并且所有css和javascript均正常运行,但每个图像文件均未显示。右键单击并选择即可确认路径信息是正确的View Image Info(顺便说一下,在Firefox中,图像不会显示在任何浏览器中,因此它不是浏览器错误)。

但是,我注意到的是,Type图像信息框中的显示为text/html,而不是PNG Imageor JPEG Image。这是在下面的信息中,其中显示了路径(地址)信息-在该部分中,它识别出文件本身是Type任一ImageBackground

但是,尽管事实如此,但看起来与其识别html(实际上是php生成的html)中图像的正确mime类型(我认为),不如尝试将图像(img元素或css background-image)处理为文字,因此什么也没给我!但我不知道为什么。mime控制Apache MIME类型的文件是正确的。这些页面具有以下标题...

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />

...但是这些都不应该引起问题(在XP上运行时没有,在实际站点上也没有)。

因此,我正在寻求有关以下方面的想法:

  1. 我对mime类型的分析是否正确(基于更新,可能不正确)?
  2. 我还能在哪里寻找可能导致此问题的原因,以及如何解决该问题?仍然可能与WHS上的IIS发生冲突,如果是的话,那又是什么?可能是php中的任何内容(这似乎不太可能),如果是的话,那又是什么?我还能在Apache中检查什么?

更新的信息(还有更多[相关?]问题)

再做些混乱,我得出的结论是,至少部分问题似乎是对port的更改:8080。首先,我发现并不是所有的网站都像我想象的那样好。我的c:\Windows\System32\drivers\etc\hosts文件中有以下表示形式:

127.0.0.1   localhost
127.0.0.1   test.site1.net
127.0.0.1   test.site2.net
127.0.0.1   test.site3.com
127.0.0.1   test.site4.com
127.0.0.1   test.site5.com

我的Apache vhosts文件中的这种表示形式:

NameVirtualHost *:8080

<VirtualHost *:8080>
    DocumentRoot "C:/Users/Public/Documents/LocalWebsites/site1.net/httpdocs"
    ServerName test.site1.net
</VirtualHost>

<VirtualHost *:8080>
    DocumentRoot "C:/Users/Public/Documents/LocalWebsites/site2.net/httpdocs"
    ServerName test.site2.net
</VirtualHost>

<VirtualHost *:8080>
    DocumentRoot "C:/Users/Public/Documents/LocalWebsites/site3.com/httpdocs"
    ServerName test.site3.com
</VirtualHost>

<VirtualHost *:8080>
    DocumentRoot "C:/Users/Public/Documents/LocalWebsites/site4.com/httpdocs"
    ServerName test.site4.com
</VirtualHost>

<VirtualHost *:8080>
    DocumentRoot "C:/Users/Public/Documents/LocalWebsites/site5.com/httpdocs"
    ServerName test.site5.com
</VirtualHost>

这是行为site1site4正在显示,但没有图像。其他三个根本不显示,而是给出Network Error (dns_unresolved_hostname)

不过,如果我通过访问在WHS机器上的虚拟主机第一个站点localhost:8080的URL,然后将图像显示出来,并取其网站是第一次在我的虚拟主机文件也显示出来(预期); 但是,即使以前没有site2,它也会这样做(因此,如果我移到第一个位置,它将通过localhost:8080调用开始“工作” )。

我知道通过url中的语法访问时我的图像文件正在返回403(已纠正,最初我说是404)错误test.site4.com,并且我怀疑我的图像正在显示,text/html因为文件正在返回该错误(所以我不认为这是错误的现在是mime类型的问题,同样是找不到图片)。但奇怪的是,路径正确,并且非图像文件(javascript和css)正常运行。

所以在我看来,端口切换到似乎有些问题8080。我现在的问题是:

  1. 为什么我的主机和虚拟主机文件无法正确找到所有站点(在Windows Home Server上是否需要修改其他文件)?
  2. 在确实起作用的那些网站上,为什么为什么找不到专门的图像(我相信是403错误,即“禁止”,如果不允许访问网站文件夹中的其他文件,这是没有意义的)?
  3. 为什么localhost:8080与前两个问题无关,访问仍然有效?

一些进一步的信息

已要求我发布日志文件。但是,我发现在那些通过直接localhost:8080调用“默认”站点进行访问的实例中,除了(出现)之外没有任何日志发生。

因此,我关闭了WAMP服务,转至url并发现了与WAMP运行时相同的行为。这似乎表明IIS仍在控制域名,而不是由Apache接管域名(有人可以在那确认我的假设吗?,因此问题可能仍然在于将控制权移交给WAMP服务器。


确保设置了实际图像的权限,以便可以访问它们。
cutrightjm 2012年

@ekaj-非常感谢您的猜测,并检查了权限,但这显然不是问题。
ScottS 2012年

@ekaj-我向我的问题中添加了一些更新的信息,可以帮助您提出不同的“猜测”(也许是解决方案!)。
ScottS 2012年

您确定应用程序请求路由不起作用吗?blogs.iis.net/wonyoo/archive/2008/07/09/…似乎可以满足您的要求。请注意,您可能需要编写一些规则来匹配您的不同站点。
erikxiv 2012年

@erikxiv-不,我不确定。我的问题是我不熟悉自己的领土,因此我不知道如何使其可行。我将调查链接并与您联系。
ScottS

Answers:


1

您是否有一个.htaccess文件,该文件导致图像以文本/ html的形式提供?

 <filesMatch "\.(htm|html|css|js|png|jpg)$">
 ForceType 'text/html; charset=UTF-8'
 </filesMatch>

很好的建议,但是只有几个站点有.htaccess文件,而ForceType代码中都没有。
ScottS 2012年

@ScottWilson-我向我的问题中添加了一些更新的信息,可以帮助您提出其他解决方案。
ScottS 2012年

0

如果您可以提供access.log文件(至少两行显示图像请求的404状态),我们将能够检查出什么地方了。我怀疑这可能只是域名问题,或者您的网站可能使用了图片的绝对路径(只是猜测...),而这是Apache错误处理的


有趣。除了尝试使用直接localhost访问的情况外,没有其他尝试访问的日志文件。所以我一起关闭了WAMP服务器,发现我得到了相同的结果。这似乎表明Apache并未处理开始的请求,而IIS则处理了。
ScottS 2012年

顺便说一句,我以前拼写错误,图像都给人一种403
斯科茨

也许最好对浏览器的请求进行有线通信,然后检查它是否真的要求?或检查apache err日志是否未能绑定到端口或给出一些地址问题……
Martino Dino 2012年

@MartinoDino-感谢您的建议。我刚刚更新了问题中的一些信息,我现在认为我的主要问题是我的WHS计算机甚至没有处理对我的测试站点的请求,而我的ISP代理似乎在处理。如果我能解决这个问题,那么我将开始找出我的其他本地部件是否确实在工作。
ScottS 2012年

0

IIS重定向到Apache的线程包含一个非常简单的解决方案,它的方向与您相反。

最后一篇文章的作者说,IIS中的重定向太受限制,无法完成这项工作。

使用他的解决方案,您将设置IIS来接收来自80以外的其他端口的请求,例如90。然后将Apache用作端口80和8080的接收者,并将端口80重定向到端口90。显然,Apache设法做到了IIS无法做到的。


@harrymc-感谢您的输入。但是,这可能很有用,如果您查看我的最新更新(刚刚发布),我发现我的第一个主要问题是测试url从未进入我的本地计算机,而是试图由我处理。 ISP代理。如果您有一些规避建议,我很开放。
ScottS 2012年

这可能仍然符合我的建议:IIS可能不够聪明,无法检测到localhost是本地回送接口,因此请在Internet上进行搜索。当然,本地主机永远不会在那里找到。我没有合适的环境对此进行测试,但是以上文章似乎表明Apache更智能地完成了这项工作。
harrymc

@harrymc-正如我在问题中提到的那样,我实际上不是网络人员,因此我有两个问题,需要一些指导。首先,将WHS更改为端口90是否会影响WHS作为家庭服务器的功能?其次,您发布的链接是指尝试访问子域,而我不是(而是试图访问其他本地域)。那会改变什么吗?对于链接解决方案的指导,我有一些Apache知识,所以我遵循#4-5,但是我几乎掌握了IIS知识,所以要点1-3我不确定该怎么做(甚至在我的情况下,如果我需要做)。
ScottS 2012年

#2-3可能不适用于您的情况,可以跳过。#1是必需的,因为这是主要思想。这里的窍门是使Apache成为负责转发的主要Internet前端服务器,并使IIS成为除Apache之外不连接到Internet的辅助和本地服务器。也许本文可以帮助您更改端口。如果您以前从未这样做过,请仔细记录所有更改,以防万一。
harrymc

@harrymc-进行了更改,我什至无法启动WAMP服务器。不知道为什么,但是目前它阻止了全面的测试来知道它是否会工作。我还想知道,在第一个链接中,这ourdomain.dom是否是我的计算机特有的(或者只是一个任意名称,因为他正在处理子域...应该属于我localhost吗?)。另外,在第一个链接中,our.ip.addess到IIS的路由对于Apache服务器将是相同的,因为它们位于同一台计算机上(只是不同的端口)。那不应该引起问题,对吗?
ScottS 2012年

0

由于已将其跟踪到DNS问题,因此基本结果是您需要可配置的本地DNS服务器。您还提到了Linksys E1200路由器和Windows Home Server,因此可以采用两种方法。

首先,您可以考虑在路由器上运行第三方固件(例如DD-WRT,OpenWRT,Tomato)。您使用的是Broadcom芯片组,应该具有足够的闪存。DD-WRT将其列出为受支持的。我最大的担心是,第三方路由器固件社区似乎已经退化到了90年代初试图运行Linux的地步。您可以尝试浏览论坛以找到所需的内容,但是不要信任DD-WRT站点上的路由器数据库,因为它会将您定向到错误的地方。总体而言,该选项无法使我充满信心,除非您有第二个路由器可用,否则我不确定是否可以推荐它,除非您喜欢对此类型进行调整。

其次,您可以将RDP放入WHS中,并按照此论坛主题中的说明打开DNS服务器。基本方法,RDP输入,控制面板,添加/删除程序,添加/删除Windows组件(按钮),选择DNS服务器复选框,退出。我不确定的是您是否具有此功能的DNS管理控制台,而我没有WHS盒子可以对其进行测试。如果您获得该控制台,它将位于管理工具/ DNS下。要按需使用它,您需要添加新的转发区域。对于您正在做的事情,我会为每个主机添加一个区域(例如,为www.samplesite.whatever添加一个区域),然后向其中添加一个未指定名称的A记录条目,这将使其成为默认设置区。另一种方法是添加一个用于samplesite。区域的区域,然后添加命名为A的记录(例如“ www”或“ mail”),但是最终可能会阻止您不想阻止的内容。更具针对性的区域可防止您影响不需要重定向的内容。然后,将所有系统指向此框作为DNS服务器。默认情况下,它将完全绕过您的ISP的DNS服务器执行其自己的外部DNS解析;如果要将其用作下一步,则可以在DNS服务器属性(右键单击并四处寻找)中将其地址指定为转发器。

第三,如果选项2不起作用,而选项One使您感到恐惧,则可以在内部设置Linux盒并将其设置为DNS服务器。那里有很多关于如何执行此操作的指导;马克·科里奇(Mark Kolich)的这篇文章粗略地搜索了一下,似乎是完成此操作的不错方法。如果您有这样的想法,这也可能会为您提供尝试基于Linux的托管所需的资源(除非您正在进行基于Windows的开发,例如.NET等)。

DNS服务器的维基百科比较也可使用。可能需要注意的是Simple DNS Plus(商业),Posadis(免费,陈旧?2004年),MaraDNS(免费,非GUI,值得一看)和Unbound(免费,确实有Windows二进制下载,没有进一步介绍)。 。所有这些都应在Windows上运行。


谢谢您的回答。从某种意义上说这确实是DNS问题,但我想要的是任何localhost呼叫都不要进入我ISP的DNS开头(不应该)。似乎必须以某种方式在本地设置DNS,以处理系统应已自动处理的DNS。我对本地主机站点的请求甚至都不应转到我的ISP DNS。
ScottS 2012年

如果您将相关行添加到本地Hosts文件中,则它们可能不会-在XP上为c:\ windows \ system32 \ drivers \ etc \ hosts,不确定在Vista / 7上的位置以及32-和64位。我已经看到一些可能会中断的应用程序或错误情况,如下所示:fencepost.net/2009/11/dns-fails-nslookup-works-fix
fencepost 2012年

我已经从一开始就将这些行添加到了该位置,但是我想知道它是否在64位系统(WHS是)上正确的位置。
ScottS 2012年

您的问题使我进行了更多的挖掘工作,而这(sepago.de/helge/2009/06/04/…)似乎非常相关。
fencepost

这很有趣,但是我不确定它的帮助程度如何,因为该C:\Windows\System32\drivers\etc文件已经是我修改过的文件了,但是就定义我的本地站点而言,它似乎仍然没有被使用。这篇文章似乎表明该文件由64-bit本机和32-bit重定向使用。这对我的Apache安装localhost有何影响?为什么本地站点会忽略它?
ScottS 2012年

0

你需要

<directory>
</directory>

</VirtualHost>允许。

像这样的东西

<Directory "C:\Apache24\htdocs">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

我在Internet协议v4 IPv4设置(高级IP设置)中将iis的192.168.1.100:80用于iis,将apache的192.168.1.200:8080用于apache,具有2个C类IP 192.168.1.100并添加192.168.1.200,这也有助于SEO,因为该类彼此链接的2个不同网站的Cip地址。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.