停用 systemd 套接字激活的默认端口

停用 systemd 套接字激活的默认端口

我有一个在 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?默认配置存储在哪里?

答案1

您可以使用以下命令列出 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旧版本)说

允许多次指定各种设置,在这种情况下解释取决于设置。通常,多个设置会形成一个列表,设置为空值会“重置”,这意味着先前的分配将被忽略。

相关内容