我目前正在通过 LAN 设置 Web 服务器以满足某些需求,例如使用 Phabricator 或其他内联网服务。为此,我安装了 apache2、php5、mysql 和 DNSMASQ,这样我就可以管理 DHCP 和 DNS 服务器。但现在我被困在虚拟主机上,这些虚拟主机在本地计算机上运行良好,但无法从本地网络上的其他计算机访问,我收到“ERR_CONNECTION_REFUSED”错误。
为了测试我的设置,我声明了一个这样的虚拟主机:
创建我们网站的根文件夹
$ sudo mkdir -p /var/www/test.devbox/public_html
$ chown -R $USER:$USER /var/www/test.devbox/public_html
放置索引文件并添加随机文本
$ nano /var/www/test.devbox/public_html/index.html
现在我们创建虚拟主机文件
$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/test.devbox.conf
$ sudo nano /etc/apache2/sites-available/test.devbox.conf
虚拟主机配置文件
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName test.devbox
ServerAlias www.test.devbox
DocumentRoot /var/www/test.devbox/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
然后我们使用
$ sudo a2ensite test.devbox
然后我编辑了我的 hosts 文件以适合我的 test.devbox.config 文件(服务器端)中的 servername 指令
$ sudo nano /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.1.254 bbox
127.0.1.1 MyPie
127.0.0.1 MyPie
127.0.0.1 devbox
127.0.0.1 opcv.devbox www.opcv.devbox
127.0.0.1 test.devbox www.test.devbox
这也是我的 dnsmasq.conf 文件
$ sudo nano /etc/dnsmasq.conf
domain-needed
expand-hosts
bogus-priv
no-resolv
no-poll
localise-queries
no-negcache
# DNS
#interface=eth0
local=/devbox/
domain=devbox
cache-size=10000
server=8.8.4.4
server=8.8.8.8
#server=194.158.122.10
#server=194.158.122.15
# DHCP
dhcp-authoritative
dhcp-range=192.168.1.100,192.168.1.200,10h
dhcp-option=3,192.168.1.254
然后我重启了一切
$ sudo reboot
or
$ sudo /etc/init.d/dnsmasq restart
$ sudo service apache2 reload/restart
此时我不知道应该看哪里,因为虚拟主机在本地工作但无法从同一网络上的其他计算机访问。
使用另一台机器上的 NSLOOKUP 我实际上得到了
c:\WINDOWS\system32>nslookup test.devbox
Server: UnKnown
Address: 192.168.1.10 (which is the server)
Nom : test.devbox
Address: 127.0.0.1
当我尝试访问http://测试.devbox,我收到 ERR_CONNECTION_REFUSED。我不知道该去哪里查找。
这是 apache2ctl 命令的答案
$ sudo apache2ctl -S
AH00548: NameVirtualHost has no effect and will be removed in the next release /etc/apache2/ports.conf:5
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
VirtualHost configuration:
*:80 is a NameVirtualHost
default server 127.0.0.1 (/etc/apache2/sites-enabled/000-default.conf:1)
port 80 namevhost 127.0.0.1 (/etc/apache2/sites-enabled/000-default.conf:1)
port 80 namevhost example.devbox (/etc/apache2/sites-enabled/example.devbox.conf:1)
alias www.example.devbox
port 80 namevhost opcv.devbox (/etc/apache2/sites-enabled/opcv.devbox.conf:1)
port 80 namevhost phabricator.devbox (/etc/apache2/sites-enabled/phabricator.devbox.conf:1)
port 80 namevhost test.devbox (/etc/apache2/sites-enabled/test.devbox.conf:1)
alias www.test.devbox
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex rewrite-map: using_defaults
Mutex default: dir="/var/lock/apache2" mechanism=fcntl
Mutex mpm-accept: using_defaults
Mutex watchdog-callback: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33
谢谢,我希望我们能够共同解决这个问题。
答案1
从 nslookup 的输出可以看出,您的 DNS 条目配置错误,它将 test.devbox 指向 127.0.0.1。它应该指向服务器的 192.168.xx IP。
一旦解决了这个问题(根据您的评论),要执行您想要的操作,首先您必须确保您想要导航到您的站点的每台客户端计算机都使用您的服务器进行 DNS 解析。
实际情况是,在客户端机器 A 上打开浏览器并输入:
http://test.devbox/
在位置栏中。
客户端机器 A 中的浏览器向 DNS 服务器询问 test.devbox 的 IP 地址,结果为 192.168.1.10。
浏览器打开与 192.168.1.80 端口 80(HTTP)的 TCP 连接并发送此请求(这里我省略了不感兴趣的标头):
GET / HTP/1.1
Host: test.devbox
[...]
该地址的 http 服务器将按照您的配置做出响应。
简而言之,如果您使用单独的服务器和客户端计算机,并且想要使用 FQDN 而不是 IP 来导航您的网站,您可以在计算机的 /etc/hosts 中添加相关条目(或 Windows 下的等效条目),或者确保两台计算机都使用您控制的 DNS 服务器。并且,127.0.0.1 无法在本地计算机之外访问 :-)
答案2
我发现了我的问题,有两个问题。
1:我的路由器上的 dhcp 服务器仍然启用...(虽然我在设置 dhcp 和 dns 服务器时已经禁用它......
2:我的 DNSMASQ 确实配置错误。现在它配置为将具有特殊域(此处为 devbox)的流量重定向到 apache 服务器。我是新手,我明白我做了什么,但我无法解释它。(不是母语人士)
dnsmasq配置文件
#domain-needed not needed
no-hosts
#expand-hosts not needed
bogus-priv
no-resolv
no-poll
localise-queries
no-negcache
# DNS
#interface=eth0
#local=/lan/
#domain=lan
address=/devbox/192.168.1.10 -> This is the line redirecting traffic.
cache-size=10000
server=8.8.4.4
server=8.8.8.8
#server=194.158.122.10
#server=194.158.122.15
# DHCP
dhcp-authoritative
dhcp-range=192.168.1.100,192.168.1.200,10h
dhcp-option=3,192.168.1.254