具有萬用字元 .test 域的本地開發環境,由 fedora 33/34 上的 dnsmaq 提供服務
我正在嘗試使用 Fedora 34 設置英特爾 NUC 作為我新的穩定本地 Web 開發環境。
我在 mac OS x 上的環境被系統更新破壞了,甚至自上次系統更新以來,即使是自製軟體目前也拋出了很多錯誤。
想要的是這樣的:
- 帶有文件夾“站點”的 NAS,其中有很多網路項目,每個項目都在自己的子文件夾中(已選中,正在執行)
- 帶有 apache、mariadb、php、…(燈)的 fedora 系統(已檢查,正在執行)
- 站點/子文件夾應由地址 subfolder.sites.test 提供服務
- 如果這也適用於區域網路內的其他電腦,那就太好了
在我的 Mac 上,只需要在 dnsmasq.conf 和 resolve.conf 中加入兩行,就可以實現這一神奇。帶有萬用字元的虛擬主機條目服務於所有。
這是 Mac 配置:
httpd.conf 或類似文件中的虛擬主機定義:
<VirtualHost *:80> ServerName sites.test ServerAlias *.test VirtualDocumentRoot "/Volumes/webroot/sites/%1/web" UseCanonicalName Off </VirtualHost>
在 /etc/resolver/test 中:
nameserver 127.0.0.1
在 /usr/local/etc/dnsmasq.conf (通過自製軟體):
address=/.test/127.0.0.1
在 Fedora(和其他實際發行版)上,有 NetworkManager 和 systemd-resolved 之類的東西使事情變得更加複雜。
我在網際網路上閱讀了很多範例並嘗試了它們,但沒有運氣。
如何在 Fedora 上使用 NetworkManager、systemd-resolved、dnsmaq 等進行配置?
這篇文章有最接近的匹配,但它仍然不起作用(或者我遺漏了什麼?)文章:在此處輸入連結描述
我怎樣才能使這項工作?
在閱讀了 Web 上的文章 2 週並嘗試了我認為的每一種描述方式之後,我終於找到了針對這種情況的解決方案:
- 您有一堆網站(可能位於 NAS 上)
- 應在 Webbrowser 中像這樣呼叫:foldername.sites.test。
因為 .test 是剩餘的專用於“本地開發”的域之一。.dev 不再有效。
暫時禁用 SeLinux,這樣它就不會阻止技術上可行的事情。請參閱這篇文章臨時/永久啟用/禁用 SELinux
這篇文章詳細解釋了dnsmasq和systemd-resolved的設置:配置 dnsmasq 並保持 systemd-resolved
對於任何對此不熟悉的人來說,這會造成很大的混亂,因為存在:
- dnsmasq(完整版)
- dnsmasq 作為 NetworkManager 的一部分
- systemd-resolved(解析器作為 systemd 的一部分)
- 解決(完整版)
你會迷失在無窮無盡的配置可能性中,99% 都行不通。解決方法是安裝dnsmasq(完整版),忽略NetworkManager-dnsmasq,使用systemd-resolved。這種組合對我有用,目前在fedora 34上。
在按照第2條中的描述進行設置後,您可以繼續將 vhost-definitions 添加到 apache(或任何 httpd)。
例如:
# ########################################################################## <Directory /var/www/html/nas-mount> Options Indexes Includes FollowSymLinks ExecCGI MultiViews AllowOverride All Order allow,deny Allow from all Require all granted </Directory> <VirtualHost *:80> ServerName sites.test ServerAlias *.sites.test VirtualDocumentRoot /var/www/html/nas-mount/%1/web </VirtualHost> # ##########################################################################
在某些系統上,最好將目錄定義放在 VirtualHost 之外。
這樣,我可以在瀏覽器中通過其名稱呼叫 /var/www/html/nas-mount 中的任何 web 項目,然後自動呼叫“sites.test”。
- project1.sites.test
- 香蕉網站測試
- applejuice.sites.test
所有 *.sites.test 都通過 dnsmasq 響應 127.0.0.1。
對於在一堆網站上進行大規模工作,此設置非常節省時間(如果它最終有效)。
此設置的想法來自該網站mallinson.ca,其中描述了 Mac OS 系統(早在 2018 年)。
在實際的 Distro 上實現這一點並不容易,但如果它有效的話就令人滿意:-)