Apache-2.4

停用 systemd 套接字啟動的預設埠

  • December 1, 2020

我有一個在 CentOS 8.2 上執行的 Apache 伺服器,其套接字由 systemd 套接字啟動管理。但我不希望它在預設埠 80 上進行監聽,因為我想在此埠上使用 Nginx 執行反向代理。這是目前的 systemd 套接字配置:

root@server6:~# systemctl status httpd.socket
● httpd.socket - Apache httpd Server Socket
  Loaded: loaded (/usr/lib/systemd/system/httpd.socket; enabled; vendor preset: disabled)
 Drop-In: /etc/systemd/system/httpd.socket.d
          └─20-redir8016.conf, 30-listen8017ssl.conf, override.conf
  Active: active (running) since Fri 2020-11-20 14:45:13 UTC; 1 weeks 0 days ago
    Docs: man:httpd.socket(8)
  Listen: [::]:80 (Stream)
          [::]:8001 (Stream)
          [::]:8002 (Stream)
          [::]:8003 (Stream)
   Tasks: 0 (limit: 820374)
  Memory: 0B
  CGroup: /system.slice/httpd.socket

如您所見,埠 80 已啟用。這是預設設置。其他埠是故意添加的。的手冊頁httpd.socket(8)僅描述如何添加另一個埠,而不是如何刪除預設埠。.80 埠沒有在任何配置文件中配置/etc/httpd

如何在此處停用埠 80?預設配置儲存在哪裡?

您可以使用以下命令列出 systemd 用於套接字的文件:

$ systemctl cat httpd.socket

在我的系統上顯示(刪除了一些行以保持簡短):

# /usr/lib/systemd/system/httpd.socket
[Unit]
Description=Apache httpd Server Socket
[Socket]
ListenStream=80
[Install]
WantedBy=sockets.target

# /usr/lib/systemd/system/httpd.socket.d/10-listen443.conf
[Socket]
ListenStream=443

您可以看到(在我的系統上)使用了 2 個命名文件來偵聽埠 80 和 443。您可以使用它sudo systemctl edit httpd.socket來添加更多配置。要真正取消現有配置,您需要使用標準的 systemd 方法為關鍵字輸入一個空值,即在這種情況下為: ListenStream=,後跟任何想要的附加值:

[Socket]
# cancel existing port 80 (and 443)
ListenStream=
ListenStream=8001
ListenStream=8002
ListenStream=8003

man systemd.syntax(或man systemd.unit舊版本)說

允許多次指定各種設置,在這種情況下,解釋取決於設置。通常,多個設置形成一個列表,並設置為空值“重置”,這意味著先前的分配被忽略。

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