我寻求一些智慧,所以请帮忙...我有一个虚拟机充当路由器/Web服务器/dnsmasq服务器,IP:192.168.100.1。我还有其他机器作为客户端。
服务器具有 IPTables 规则,可将来自端口 80 的任何流量重定向到端口 8081。
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 8081
我还在服务器上创建了基于名称的虚拟主机,并使用以下配置侦听端口 8081。
<VirtualHost *:8081>
RewriteEngine On
RewriteRulle .* http://cpt.haustor.org [R,L]
ServerName haustor.org
ServerAlias cpt.haustor.org
DocumentRoot /var/opt/mypage
<Directory /var/opt/mypage>
DirectoryIndex index.html
Require all granted
Options Indexes FollowSymLinks Includes
</Director>
域 haustor.org 和子域 cpt.haustor.org 本地托管在服务器计算机上,并存在于 /etc/hosts 文件中:
192.168.100.1 cpt.haustor.org haustor.org
客户端能够解析 Web 服务器的 IP (192.168.100.1):在客户端上发出 Dig:
root@captivo:~# dig cpt.haustor.org
; <<>> DiG 9.9.5-9+deb8u2-Debian <<>> cpt.haustor.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41972
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;cpt.haustor.org. IN A
;; ANSWER SECTION:
cpt.haustor.org. 0 IN A 192.168.100.1
;; Query time: 1 msec
;; SERVER: 192.168.100.1#53(192.168.100.1)
;; WHEN: Sun Aug 16 22:28:43 CEST 2015
;; MSG SIZE rcvd: 60
从这个角度来看,一切似乎都很好,但是当我尝试从 Konqueror 访问任何 URL 时,会出现错误页面,其中指出存在循环链接。老实说,我不知道如何解决这个问题。目前我使用的是 Debian 8、Apache 2.4.10 和 dnsmasq 2.72。
请帮我解决这个问题。
PS 相同的配置在 CentOS 6 上运行没有问题。
BR,内文
更新:
查看日志,我看到该页面实际上被同时调用了多次:
root@captivo:~# cat /var/log/apache2/captivo-custom.log
192.168.100.115 - - [16/Aug/2015:22:49:19 +0200] "GET / HTTP/1.1" 302 531
192.168.100.115 - - [16/Aug/2015:22:49:19 +0200] "GET / HTTP/1.1" 302 534
192.168.100.115 - - [16/Aug/2015:22:49:19 +0200] "GET / HTTP/1.1" 302 533
192.168.100.115 - - [16/Aug/2015:22:49:19 +0200] "GET / HTTP/1.1" 302 533
192.168.100.115 - - [16/Aug/2015:22:49:19 +0200] "GET / HTTP/1.1" 302 533
192.168.100.115 - - [16/Aug/2015:22:49:19 +0200] "GET / HTTP/1.1" 302 533
192.168.100.115 - - [16/Aug/2015:22:49:19 +0200] "GET / HTTP/1.1" 302 533
root@captivo:~#
答案1
显然RewriteRule
匹配任何内容都会导致循环。禁用它。
如果你想简单地重定向http://haustor.org/到http://cpt.haustor.org/<VirtualHost>
,为每个虚拟主机声明。
<VirtualHost *:8081>
ServerName haustor.org
Redirect / http://cpt.haustor.org/
</VirtualHost>
<VirtualHost *:8081>
ServerName cpt.haustor.org
DocumentRoot /var/opt/mypage
<Directory /var/opt/mypage>
DirectoryIndex index.html
Require all granted
Options Indexes FollowSymLinks Includes
</Directory>
</VirtualHost>