最新发现
将 IIS 重新设置为端口 后80
,当我在 WHS 计算机上输入 时http://localhost/
,它会显示“此网站的安全证书存在问题”警告页面。如果我无论如何“继续”,则会出现此 URL,https://localhost/Remote/logon?ReturnUrl=%2fremote
用于 Windows Home Server 2011 远程 Web 访问 和username
。password
现在,我记不清了,但我不相信最初只是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 会引起问题,但我发现有几个网站说如果设置正确,就不会出现任何问题——基本上,确保没有端口冲突)。
所以我安装了一个泛太平洋行动计划(64 位版本)到 WHS 计算机,并更改 Apachehttpd
配置文件中的设置以监听端口,8080
这样就不会与 IIS 发生冲突。我像在 XP 计算机上一样设置了虚拟主机文件,只是端口也发生了变化。
基本上,一切似乎都进展顺利(不过,请参阅更新),除了...
(原始)问题
虽然本地网站的页面可以正常加载,并且所有 CSS 和 JavaScript 都可以正常运行,每个图像文件均未显示。路径信息正确通过右键单击并选择可以证明View Image Info
(在 Firefox 中......顺便说一下,图像不会显示在任何浏览器中,所以这不是浏览器错误)。
然而,我注意到,Type
图像信息框中显示的是text/html
,而不是PNG Image
或JPEG Image
等。这是在下面的信息中,它显示路径(地址)信息 - 在该部分中,它识别出文件本身是Type
或。Image
Background
但尽管如此,它似乎并没有识别出 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 上运行时没有出现此问题,在实时网站上也没有出现此问题)。
因此,我正在寻找以下想法:
- 我对 mime-type 问题的分析是否正确(基于更新,可能不正确)?
- 我还能在哪里找到可能导致此问题的原因,以及如何纠正它?它是否仍然与 WHS 上的 IIS 发生冲突,如果是,是什么?它可能是 php 中的任何内容(这似乎不太可能),如果是,是什么?我还可以在 Apache 中检查什么?
更新信息(包含更多[相关?]问题)
经过更多的尝试,我得出结论,至少部分问题似乎是端口的更改: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
vhosts
我的 apache文件中的表示如下:
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>
行为如下:site1
和site4
都显示出来,但没有图像。其他三个根本不显示,但显示Network Error (dns_unresolved_hostname)
。
localhost:8080
但是,如果我使用URL访问 WHS 机器上的 vhosts 中的第一个站点,然后是图像做出现,并且我的 vhosts 文件中第一个站点也会出现(这是预期的);但是,即使以前不会出现这种情况,它也会这样做(因此,如果我移动site2
到第一个位置,它会通过localhost:8080
调用开始“工作”)。
我知道我的图像文件返回的是403
(更正一下,我原本说的是 404) 错误test.site4.com
,我怀疑我的图像之所以出现是text/html
因为文件返回了该错误(所以我不认为这是一个 mime 类型的问题,而是因为找不到图像)。但奇怪的是路径是正确的,非图像文件(javascript 和 css)也正常显示。
所以在我看来,这似乎与端口切换有关8080
。我现在的问题是:
- 为什么我的 hosts 和 vhosts 文件无法正确找到所有站点(是否需要在 Windows Home Server 上修改其他文件)?
- 在那些可以正常工作的网站上,为什么就是找不到图像(出现 403 错误,我相信这是“禁止的”,如果允许访问网站文件夹中的其他文件,这就没有意义了)?
- 为什么
localhost:8080
无论前两个问题如何,访问都可以正常工作?
更多信息
有人要求我发布日志文件。但是,我发现除了我通过直接localhost:8080
调用“默认”网站进行访问的情况(似乎如此)外,没有出现任何日志。
因此我关闭了 WAMP 服务,并转到 url,发现与 WAMP 运行时的行为相同。这似乎表明 IIS 仍在控制域名,而不是 Apache 接管它们(有人可以证实我的假设吗?)因此问题可能仍然在于将控制权移交给 WAMP 服务器。
答案1
您是否有一个 .htaccess 文件导致图像被作为文本/html 提供?
<filesMatch "\.(htm|html|css|js|png|jpg)$">
ForceType 'text/html; charset=UTF-8'
</filesMatch>
答案2
如果您可以提供您的 access.log 文件(至少几行显示图像请求的 404 状态),我们就可以检查出了什么问题。我怀疑这可能只是一个域名问题,或者您的网站可能对图像使用了绝对路径(只是猜测......),而 apache 处理不正确
答案3
线程IIS 重定向到 Apache包含一个非常简单的解决方案,其方向与您的相反。
上一篇文章的作者说 IIS 中的重定向功能太有限,无法完成这项工作。
使用他的解决方案,您可以设置 IIS 以从 80 以外的其他端口(例如 90)接收请求。然后将 Apache 作为端口 80 和 8080 的接收器,并将端口 80 重定向到端口 90。Apache 显然能够做到 IIS 无法做到的事情。
答案4
你需要有
<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,为 apache 使用 192.168.1.200:8080,有 2 个 C 类 IP 192.168.1.100 并添加 192.168.1.200,这也有助于 SEO,因为 2 个不同网站的 C 类 IP 地址相互链接。