Skip to content

Instantly share code, notes, and snippets.

@designrubenz
Last active November 10, 2021 22:35
Show Gist options
  • Save designrubenz/05836752a626aae241287130cddf6677 to your computer and use it in GitHub Desktop.
Save designrubenz/05836752a626aae241287130cddf6677 to your computer and use it in GitHub Desktop.
Apache MacOS

Apache am MacOS

Apache daemon = httpd

(daemon = Hintergrunddienst, Windows: Systemdienste/services)
launchd (Apple) startet den mitgelieferten httpd. In /System/Library/LaunchDaemons/ wird dazu ein httpd-wrapper gestartet. Das ist ein Ruby-File, das den 'eingebauten' Apache-Server startet. (https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html):

Infos zu launchd (macOS)

The launchd Startup Process
After the system is booted and the kernel is running, launchd is run to finish the system initialization. As part of that initialization, it goes through the following steps:

It loads the parameters for each launch-on-demand system-level daemon from the property list files found in /System/Library/LaunchDaemons/ and /Library/LaunchDaemons/.

launchctl ist wiederum das Interface zu launchd.

httpd = Binary (='Programm') des Daemons, aber einfach auch der Name des Apache Server Projekts

(Auf Ubuntu wurde httpd auf apache2 umgetauft; entspricht dem Package-Namen)
Der Befehl httpd erlaubt direkten Zugriff auf den Daemon (erfordert aber auch, alle Optionen vollständig und korrekt zu spezifizieren).
apachectl (Apache HTTP Server Control Interface: http://httpd.apache.org/docs/2.2/programs/apachectl.html) ist ein Skript-Wrapper um httpd, um ein einfaches (und aufs System maßgeschneidertes) Starten, Stoppen, Reloaden und den Statusbericht zu ermöglichen.

apachectl configtest = http -t
apachectl -V = http -V

(apachectl am Mac ist ein launchctl Wrapper?) [https://serverfault.com/a/298003]

WICHTIGSTE INFO hier :-):

MacOS Chaos

Es stehen diese Apache-Server-Prozesse zur Verfügung:

UPDATE: macOS HighSierra kommt mit PHP7 und einem gut funktionierenden apachectl . Wichtige Infos: s. https://websitebeaver.com/set-up-localhost-on-macos-high-sierra-apache-mysql-and-php-7-with-sslhttps

--> Sites http://localhost/~johannes/site-name/

Welcher Prozess wird verwendet? (gilt analog für httpd)

  • which apachectl : apachectl im Path des Users -- wird verwendet
  • whereis apachectl : apachectl standard binary directory

Welche httpd.conf-Datei wird verwendet?

apachectl -V

Bsp. homebrew: SERVER_CONFIG_FILE="/usr/local/etc/httpd/httpd.conf"

Die Konfiguration der virtuellen Hosts ist dann unter "./extra/httpd-vhosts.conf"

https://apple.stackexchange.com/questions/269310/macos-apache-installs-on-different-directory-with-homebrew-how-to-start-stop

MacOS Monterey (12.0)

Der eingebaute Apache-Server ist m.E. auch nicht mit sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null zu stoppen. (s. https://getgrav.org/blog/macos-monterey-apache-multiple-php-versions). Damit der Befehl überhaupt funktioniert, darf der MacOS-eigene Server übrigens nicht vorher mit sudo apachectl stop abgedreht werden.

Precedence

Um den mit Homebrew installierten Server den Vorzug zu geben, ist es wichtig, dass der (neue) Homebrew-Pfad (/opt/homebrew/bin/) im PATH vor dem PATH des MacOS-Servers (/usr/sbin/apachectl) steht.

.zshrc

export PATH="$HOME/bin:$PATH"
export PATH="/opt/homebrew/bin:$PATH"

Dann greifen nämlich apachectl und httpd auf die Hombrew-Version zu.

Listen kann man alle gleichnamigen Prozesse mit which -a apachectl, den tatsächlich verwendeten mit which apachectl.

Kurioserweise zeigt brew services list einen error bei httpd, auch wenn der Server läuft. Damit der Server auch nach einem Reboot läuft, muss, glaube ich, das Service mit sudo gestartet werden (sudo brew services start httpd), eine reguläres brew services start dürfte sich auf den User-Login-Fall beziehen.

Follow-Up

https://apple.stackexchange.com/questions/306101/apache2-httpd-not-working-after-update-to-high-sierra

TODO:

Warum ist homebrew-Install besser als bundled?

Das ist bei HighSierra nicht mehr der Fall, s. UPDATE oben.

Virtuelle Hosts

https://mallinson.ca/osx-web-development/

Weiterführende Infos: Nemeth et al.: Unix and Linux System Administration Handbook, 5th ed., p.696 ff

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment