Apache2 Vhosts 和 DnsMasq,無法通過 LAN 從另一台電腦訪問網站:ERR_CONNECTION_REFUSED
我目前正在我的 LAN 上設置一個 Web 伺服器來滿足一些需求,比如使用 Phabricator 或其他 Intranet 服務。為此,我安裝了 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 admin@test.devbox 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
然後我編輯了我的主機文件以適應我的 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://test.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:我的路由器上仍然啟用了我的 dhcp 伺服器…(儘管我在設置 dhcp 和 dns 伺服器時已經禁用了它…
2:確實我的 DNSMASQ 配置錯誤。現在它被配置為將具有特殊域(此處為 devbox)的流量重定向到 apache 伺服器。我是新手,我明白我做了什麼,但我無法解釋。(不是母語人士)
dnsmasq.conf
#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
從 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 :-)