Apache Web 服务器多站点设置¶
您需要什么¶
- 运行 Rocky Linux 的服务器
-
了解命令行和文本编辑器。本示例使用 vi,但您可以随意使用您喜欢的编辑器。
技巧
如果您想了解 vi 文本编辑器,这里有一个方便的教程。
-
安装和运行 Web 服务的基本知识
简介¶
Rocky Linux 有多种方法可以设置网站。这只是一种方法,是在单台服务器上使用 Apache。此方法的设计适用于在一台硬件上运行多个服务器,但它也可以作为单站点服务器的基础配置。
历史事实:这种服务器设置似乎始于基于 Debian 的系统,但它完全适用于运行 Apache 的任何 Linux 操作系统。
对于那些正在为 Nginx 寻找类似设置的人,请查看此指南。
安装 Apache¶
您很可能还需要其他软件包来托管您的网站,例如 PHP、数据库或其他软件包。与 http
一起安装 PHP 将使您从 Rocky Linux 存储库中获得最新版本。
请记住,您可能需要模块,例如 php-bcmath
或 php-mysqlind
。您的 Web 应用程序规范将决定您需要什么。您可以根据需要安装它们。目前,您将安装 http
和 PHP,因为它们几乎是必然的。
从命令行运行
dnf install httpd php
添加额外目录¶
此方法使用几个额外的目录,这些目录目前在系统中不存在。您需要在 /etc/httpd/ 中添加两个目录,分别称为 "sites-available" 和 "sites-enabled"。
从命令行输入
mkdir -p /etc/httpd/sites-available /etc/httpd/sites-enabled
这将创建所需的目录。
您还需要一个目录来存放我们的站点。它可以放在任何地方,但一个很好的组织方式是创建一个 "sub-domains" 目录。将其放在 /var/www 中:mkdir /var/www/sub-domains/
以降低复杂性。
配置¶
您还需要在 httpd.conf
文件的底部添加一行。为此,请输入
vi /etc/httpd/conf/httpd.conf
并转到文件底部添加
Include /etc/httpd/sites-enabled
我们实际的配置文件将位于 /etc/httpd/sites-available 中,您将创建符号链接到 /etc/httpd/sites-enabled 中。
为什么要这样做?
假设您有 10 个网站都运行在同一台服务器上,使用不同的 IP 地址。假设站点 B 进行了一些重大更新,并且您需要更改该站点的配置。还假设更改出了问题,当您重新启动 httpd
以读取更改时,httpd
无法启动。您不仅无法启动您正在工作的站点,其他站点也无法启动。使用此方法,您可以删除导致问题的站点的符号链接,然后重新启动 httpd
。它将恢复正常工作,然后您可以修复损坏的站点配置。
知道电话不会响起,客户或老板不会因为服务离线而抱怨,这会减轻压力。
站点配置¶
此方法的另一个好处是,它允许我们在默认 httpd.conf
文件之外完全指定所有内容。默认 httpd.conf
文件加载默认设置,而您的站点配置处理所有其他事项。太棒了,对吧?另外,它也使得排查损坏的站点配置更加简单。
假设您有一个加载维基百科的网站。您将需要一个配置文件,使该站点在端口 80 上可用。
如果您想使用 SSL/TLS 来托管网站(而且,在大多数情况下,您确实需要这样做),您需要在该文件中再添加一个部分来启用端口 443。
您可以在下面的“使用 SSL/TLS 证书配置 https”部分中查看。
您首先需要在 sites-available 中创建此配置文件
vi /etc/httpd/sites-available/com.wiki.www
配置文件内容看起来将是这样的
<VirtualHost *:80>
ServerName your-server-hostname
ServerAdmin username@rockylinux.org
DocumentRoot /var/www/sub-domains/your-server-hostname/html
DirectoryIndex index.php index.htm index.html
Alias /icons/ /var/www/icons/
# ScriptAlias /cgi-bin/ /var/www/sub-domains/your-server-hostname/cgi-bin/
CustomLog "/var/log/httpd/your-server-hostname-access_log" combined
ErrorLog "/var/log/httpd/your-server-hostname-error_log"
<Directory /var/www/sub-domains/your-server-hostname/html>
Options -ExecCGI -Indexes
AllowOverride None
Order deny,allow
Deny from all
Allow from all
Satisfy all
</Directory>
</VirtualHost>
创建后,您需要使用 Shift+:+W+Q (保存)来保存它。
在示例中,加载维基百科站点发生在 your-server-hostname 的 "html" 子目录中,这意味着您在 /var/www 中创建的路径(上面)将需要一些额外的目录来满足此要求。
mkdir -p /var/www/sub-domains/your-server-hostname/html
这将使用一个命令创建整个路径。接下来,您想将文件安装到此目录中,这些文件将实际运行网站。这可能是您自己制作的,也可能是您下载的可安装 Web 应用程序(在这种情况下是维基百科)。
将文件复制到您创建的路径
cp -Rf wiki_source/* /var/www/sub-domains/your-server-hostname/html/
使用 SSL/TLS 证书配置 https¶
如前所述,如今创建的每个 Web 服务器都应该运行 SSL/TLS(安全套接字层)。
此过程从生成私钥和 CSR(证书签名请求)开始,并将 CSR 提交给证书颁发机构以购买 SSL/TLS 证书。生成这些密钥的过程相当广泛。
如果您不熟悉 SSL/TLS 密钥生成,请参阅:生成 SSL 密钥
您也可以使用此替代过程,使用来自 Let's Encrypt 的 SSL 证书
SSL/TLS 密钥和证书的存放位置¶
由于您已经有了密钥和证书文件,您需要将它们逻辑地存放在 Web 服务器的文件系统中。正如您在示例配置文件中看到的,您将 Web 文件存放在 /var/www/sub-domains/your-server-hostname/html
中。
您需要将证书和密钥文件与域名放在一起,但要放在文档根目录之外,在本例中是 html 文件夹。
您永远不想冒险将证书和密钥暴露给 Web。那将是糟糕的!
相反,您将为我们的 SSL/TLS 文件创建一个目录结构,该结构位于文档根目录之外。
mkdir -p /var/www/sub-domains/your-server-hostname/ssl/{ssl.key,ssl.crt,ssl.csr}`
如果您不熟悉创建目录的 "tree" 语法,上面的意思是
"创建一个名为 "ssl" 的目录,并在其中创建三个名为 ssl.key、ssl.crt 和 ssl.csr 的子目录。"
提前说明:将证书签名请求 (CSR) 文件存储在树状结构中并非必需,但它简化了一些事情。如果您将来需要从不同的提供商重新颁发证书,保留 CSR 的副本是个好主意。问题是,您可以将它存储在哪里以便记住,并将其存储在您网站的树状结构中是合乎逻辑的。
假设您已将密钥、csr 和 crt(证书)文件名命名为您的站点名称,并且它们存储在 /root 中,您将把它们复制到相应的位置。
cp /root/com.wiki.www.key /var/www/sub-domains/your-server-hostname/ssl/ssl.key/
cp /root/com.wiki.www.csr /var/www/sub-domains/your-server-hostname/ssl/ssl.csr/
cp /root/com.wiki.www.crt /var/www/sub-domains/your-server-hostname/ssl/ssl.crt/
站点配置 - https
¶
一旦您生成了密钥并购买了 SSL/TLS 证书,您就可以继续使用您的密钥进行网站配置了。
首先,分解配置文件的开头。例如,即使您仍然希望在端口 80(标准 http
端口)上侦听传入请求,您也不希望任何这些请求实际到达端口 80。
您希望它们转到端口 443(或 "http
secure",更广为人知的名称是 SSL/TLS 或 https
)。我们的端口 80 配置部分将非常简洁。
<VirtualHost *:80>
ServerName your-server-hostname
ServerAdmin username@rockylinux.org
Redirect / https://your-server-hostname/
</VirtualHost>
这表示将任何常规 Web 请求重定向到 https
配置。所示的 Apache "Redirect" 选项是暂时的。当测试完成后,并且您看到站点按预期运行,您可以将其更改为 "Redirect permanent"。
永久重定向将告知搜索引擎,并且很快,来自搜索引擎的任何流量到您的站点都将仅转到端口 443(https
),而不会先经过端口 80(http
)。
接下来,您需要在配置文件中定义 https
部分。
信息
从 Apache 2.4.8 开始,SSLCertificateChainFile
指令已弃用。SSLCertificateFile
指令的扩展名包括了提供商的 CA 证书。
<VirtualHost *:80>
ServerName your-server-hostname
ServerAdmin username@rockylinux.org
Redirect / https://your-server-hostname/
</VirtualHost>
<VirtualHost *:443>
ServerName your-server-hostname
ServerAdmin username@rockylinux.org
DocumentRoot /var/www/sub-domains/your-server-hostname/html
DirectoryIndex index.php index.htm index.html
Alias /icons/ /var/www/icons/
# ScriptAlias /cgi-bin/ /var/www/sub-domains/your-server-hostname/cgi-bin/
CustomLog "/var/log/`http`d/your-server-hostname-access_log" combined
ErrorLog "/var/log/`http`d/your-server-hostname-error_log"
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3 -TLSv1
SSLHonorCipherOrder on
SSLCipherSuite EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384
:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH+aRSA:RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS
SSLCertificateFile /var/www/sub-domains/your-server-hostname/ssl/ssl.crt/com.wiki.www.crt
SSLCertificateKeyFile /var/www/sub-domains/your-server-hostname/ssl/ssl.key/com.wiki.www.key
<Directory /var/www/sub-domains/your-server-hostname/html>
Options -ExecCGI -Indexes
AllowOverride None
Order deny,allow
Deny from all
Allow from all
Satisfy all
</Directory>
</VirtualHost>
关于密码套件的说明
本文档最初是为 Rocky Linux 8 编写的。从那时起,已经发生了巨大的变化。例如,您可能希望完全省略 SSLHonorCipherOrder on
和 SSLCipherSuite
行,让服务器的默认配置来处理。如果您维护一个更新的服务器(换句话说,您定期运行 dnf upgrade
),那么这应该可以处理密码套件的安全性和更新,而无需单独的配置操作。这样,您将避免在配置中使用已弃用或不安全的密码套件。如果您因为某些原因需要在配置中操作这些,请仔细研究您的条目。
因此,进一步分解此配置,在正常配置部分下方,一直到 SSL/TLS 部分。
- SSLEngine on - 表示使用 SSL/TLS
- SSLProtocol all -SSLv2 -SSLv3 -TLSv1 - 表示使用所有可用的协议,除了那些有漏洞的协议。您应该定期研究当前可接受使用的协议。
- SSLHonorCipherOrder on - 这处理了下一行关于密码套件的内容,并表示按显示的顺序处理它们。这也是一个需要定期审查密码套件的领域。
- SSLCertificateFile - 正如其名称所示:新购买并应用的证书文件及其位置,包括提供商的证书颁发机构 (CA) 文件。
- SSLCertificateKeyFile - 在创建证书签名请求时生成的密钥。
将所有内容上线,如果启动 Web 服务时没有错误,并且访问您的网站显示 https
而没有错误,那么您就可以开始了。
上线¶
请记住,我们的 httpd.conf 文件在文件末尾包含了 /etc/httpd/sites-enabled。当 httpd
重启时,它将加载 sites-enabled 目录中的任何配置文件。问题是,我们所有的配置文件都在 sites-available 中。
这是有意为之,以便您可以在 httpd
无法重启时删除相关内容。要启用我们的配置文件,您需要创建一个指向该文件在 sites-enabled 中的符号链接,并启动或重启 Web 服务。为此,您可以使用此命令。
ln -s /etc/httpd/sites-available/your-server-hostname /etc/httpd/sites-enabled/
这将创建指向 sites-enabled 中配置文件的链接。
现在,只需使用 systemctl start httpd
启动 httpd
。或者,如果它已经在运行,则重启它:systemctl restart httpd
,假设 Web 服务重新启动,您现在可以开始对您的站点进行一些测试了。
作者:Steven Spencer
贡献者:Ezequiel Bruni, Ganna Zhyrnova