Apache 上多個埠的 Systemd 套接字啟動
在 CentOS 8 上執行的 Apache 伺服器 (2.4.37) 上,應該將埠 8765 上的 HTTP 流量重定向到預設的 https 埠。因此,我試圖讓伺服器監聽埠 8765,以便設置一個監聽該埠的虛擬主機。但它已經在這裡失敗了。
當我將這一行添加
Listen 8765
到 conf 文件的第 4 行/etc/httpd/conf.d/
並重新啟動 apache 時,出現以下錯誤:AH00526: Syntax error on line 4 of /etc/httpd/conf.d/redirect-8765.conf: Systemd socket activation is used, but this port is not configured in systemd
(與錯誤消息相反,這可能不是語法錯誤,因為問題在於 systemd 埠配置。)
查看 的手冊頁
httpd.socket(8)
,我發現了以下說明:httpd 偵聽器配置必須與為 httpd.socket 單元配置的 ListenStream 選項完全匹配。
$$ … $$如果在 httpd 配置中添加了額外的 Listen 指令,則應通過插入文件添加相應的 ListenStream 選項,例如通過 systemctl edit httpd.socket。
在 location有一個 ssl 的插入文件(稱為
10-listen443.conf
)/usr/lib/systemd/system/httpd.socket.d/
,我在其中編寫了另一個名為的文件20-redir8765.conf
,其內容如下:[Socket] ListenStream=8765
這沒有解決任何問題,所以我嘗試按照手冊頁執行,
systemctl edit httpd.socket
它編輯了文件/etc/systemd/system/httpd.socket.d/override.conf
。在那裡,我插入了與上面相同的行。這也會導致相同的錯誤消息,但是Listen
從 httpd 配置文件(不是 systemd 套接字配置)中刪除指令,並重新啟動伺服器,伺服器狀態指示如下:httpd.socket - Apache httpd Server Socket Loaded: loaded (/usr/lib/systemd/system/httpd.socket; enabled; vendor preset: disabled) Drop-In: /usr/lib/systemd/system/httpd.socket.d └─10-listen443.conf, 20-redir8765.conf /etc/systemd/system/httpd.socket.d └─override.conf Active: active (running) since Fri 2020-09-11 14:18:09 UTC; 2h 2min ago Docs: man:httpd.socket(8) Listen: [::]:80 (Stream) [::]:443 (Stream) [::]:8765 (Stream) [::]:8765 (Stream) CGroup: /system.slice/httpd.socket
假設現在埠是通過 systemd 啟動的,我重新插入了
Listen
指令。但隨後,同樣的初始錯誤出現了。在這種情況下,如何添加一個監聽埠的 VirtualHost?
**編輯:**在
systemctl status httpd.socket
vs.中顯示了不同的資訊systemctl status httpd
,我之前忽略了這些資訊。刪除override.conf
、插入Listen 8765
指令、停止httpd.service
以及httpd.socket
最後開始httpd.socket
之前httpd.service
使一切正常 - 暫時。要查看設置是否在重新啟動後仍然存在,機器已重新啟動,但現在 SSH 連接超時並且 ping 失敗。
需要注意的是,查詢 和 的狀態時有很大的不同
httpd.service
,httpd.socket
後者是無意呼叫的。我之前忽略了這一點,這使得調試更具挑戰性。問題似乎是不正確的配置重新載入。可以重新啟動機器,但如果您需要它執行,
httpd.socket
在某些機器上重新啟動可能就足夠了。但是,這對我不起作用。可靠工作的是以下命令,按順序:systemctl daemon-reload systemctl stop httpd.socket systemctl stop httpd.service systemctl start httpd.socket systemctl start httpd.service
為了避免自定義外掛文件被包更新覆蓋,我已將其
/usr/lib/systemd/system/httpd.socket.d/
從/etc/systemd/system/httpd.socket.d/
.更新 OP 導致的重啟失敗是一個不相關的 RAID 問題。