从 Linux 迁移 Apache2 服务到 macOS
从 Linux 迁移 Apache2 服务到 macOS
最近在把 Darock 在线服务从一台破旧的服务器迁移到 Mac mini,迁移的过程还是遇到了许多问题的,因此在这里记下来帮助大家(和以后如果要再迁移的我)避坑。
配置文件
两端 Apache2 的配置文件语法是一样的,但是位置和名称都有些不同。
主配置文件:
- macOS:
/etc/apache2/httpd.conf
- Linux:
/etc/apache2/apache2.conf
配置文件的默认模版差别也比较大。在 Linux 下,apache2
目录下有 sites-available
, sites-enabled
等文件夹,通过在 *-available
里创建单独的配置文件,然后软链接到 *-enabled
以让 Apache2 载入。macOS 下则默认没有这样的设置,取而代之的是总会载入 other
目录下的所有配置文件,因此各个独立服务的配置文件可以放在这里面。
迁移
- 将 Linux 端
sites-available
目录下链接到的文件拷贝到 macOS 端的other
目录。
配置文件内容
当然,迁移过程免不了更改配置文件的内容。对于每个与 VirtualHost
相关的配置文件:
- 更改
ErrorLog
和CustomLog
配置项的目录,因为 macOS 下没有${APACHE_LOG_DIR}
这个环境变量。直接删掉也可以。 - 需要时更改
DocumentRoot
,你可能会在 macOS 上选择不同的网站根目录路径。
修改主配置文件
这一步是需要做最多更改的,因为 macOS 下的默认主配置文件模版与 Linux 下的有很大不同。
迁移
- 检查 Modules:macOS 下在主文件定义载入的 Module,仔细检查被注释掉的
LoadModule
设置,并为需要的 Module 取消注释。 - 监听端口:Linux 下是在
ports.conf
文件中设置要监听的端口的,macOS 直接写在了主文件里。 - 网站根目录位置:macOS 下网站根目录默认在
/Library/WebServer/Documents
下,直接写在主配置文件中的。如果要更改位置建议直接在主文件中把默认的删掉,在other
目录下创建单独的配置文件来配置每个服务,方便快速查找和管理。
SSL
macOS 下的 Apache2 默认没有载入 SSL Module,要使用 SSL 的话需要在主文件内取消注释,同时还要更改一堆配置。
在主文件末尾有一行被注释掉的对 extra/httpd-ssl.conf
文件的引用,需要取消注释。
转到 extra/httpd-ssl.conf
文件,这个文件默认还包含了一个通过 443
端口服务的 VirtualHost。我的建议是直接删掉,把 Linux 的原配置拷贝到 other
目录下。
同时这个文件中已经包含了对 443
端口的监听,所以不用在主配置文件的开头加一个 Listen 443
,否则会报错。
迁移
- 检查主配置文件中是否已载入
ssl_module
。 - 取消主文件末尾对
extra/httpd-ssl.conf
引用的注释。 - 删除
extra/httpd-ssl.conf
文件中的VirtualHost
部分。 - 将来自 Linux 的原配置拷贝到
other
目录下,注意检查证书的路径是否需要更改。
命令行工具
管理配置
在 Linux 有 a2enmod
等命令来快速启用 Module 和网站等,macOS 下似乎没有这样的工具,需要自己手动更改配置文件。
进程
Linux 下一般使用 systemd
等工具来对 Apache2 进程进行停止和重启等操作。macOS 下对应的系统工具是 launchd
,但我们不需要和 launchctl
打交道,Apache2 有自己的命令行工具。
使用 apachectl
来更改 Apache2 的运行状态:
1 | sudo apachectl -k restart |
到现在,基本的迁移就已经差不多了。如果还有其他配置项的问题就只能自己对着错误信息找了((