Mac設定Apache2(httpd)筆記 + Docker Proxy + SSL

 Mac 內建就有 Apache2 ,因此不用使用 brew 再裝一次

可以先用檢查所有設定檔的位置

sudo apachectl -V
Server version: Apache/2.4.58 (Unix)
Server built: Apr 13 2024 11:53:17
Server's Module Magic Number: 20120211:129
Server loaded: APR 1.5.2, APR-UTIL 1.5.4, PCRE 8.44 2020-02-12
Compiled using: APR 1.5.2, APR-UTIL 1.5.4, PCRE 8.44 2020-02-12
Architecture: 64-bit
Server MPM: prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_FLOCK_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/usr"
-D SUEXEC_BIN="/usr/bin/suexec"
-D DEFAULT_PIDLOG="/private/var/run/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="/private/etc/apache2/mime.types"
-D SERVER_CONFIG_FILE="/private/etc/apache2/httpd.conf"

接著要編輯

/private/etc/apache2/httpd.conf

由於我是要用 proxy 及 ssl 相關的module,至少要打開下列這幾個

LoadModule rewrite_module libexec/apache2/mod_rewrite.so
LoadModule ssl_module libexec/apache2/mod_ssl.so
LoadModule proxy_module libexec/apache2/mod_proxy.so
LoadModule proxy_http_module libexec/apache2/mod_proxy_http.so

啟用 vhosts

sudo vi /private/etc/apache2/extra/httpd-vhosts.conf

原本預設值可刪掉  VirtualHost ,不然會跑失敗

由於我用docker架了一個WordPress使用8080 port,因此就這樣寫

<VirtualHost *:80>
ServerName mac.mysite.com

ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/

ErrorLog "/opt/homebrew/var/log/mac.mysite.com-error_log"
CustomLog "/opt/homebrew/var/log/mac.mysite.com-access_log" common

</VirtualHost>

接著再使用 certbot 裝 ssl

brew install certbot
brew install python@3.11  
pip install certbot-apache
sudo certbot --apache -d mac.mysite.com

成功的話就會看到 httpd-vhosts.conf 支援 ssl了

<VirtualHost *:80>
ServerName mac.mysite.com

ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/

ErrorLog "/opt/homebrew/var/log/mac.mysite.com-error_log"
CustomLog "/opt/homebrew/var/log/mac.mysite.com-access_log" common
RewriteEngine on
RewriteCond %{SERVER_NAME} =mac.mysite.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

使用 https://mac.mysite.com 即可進入網站

Docker 在建置時可以使用設定 port 再搭配 proxy 及設定 dns ,即可架設多個站玩多種服務

檢查設定檔

sudo apachectl configtest

重新啟動

sudo apachectl restart
 

我在設定時由於用brew裝了nginx及apache,導致80 port有問題
sudo lsof -i :80
檢查 80 port 有什麼佔住再陸續刪掉

留言

熱門文章