Apache-2.4

Apache 上多個埠的 Systemd 套接字啟動

  • September 18, 2020

在 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.socketvs.中顯示了不同的資訊systemctl status httpd,我之前忽略了這些資訊。刪除override.conf、插入Listen 8765指令、停止httpd.service以及httpd.socket最後開始httpd.socket 之前 httpd.service使一切正常 - 暫時。要查看設置是否在重新啟動後仍然存在,機器已重新啟動,但現在 SSH 連接超時並且 ping 失敗。

需要注意的是,查詢 和 的狀態時有很大的不同httpd.servicehttpd.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 問題。

引用自:https://serverfault.com/questions/1033563