Ich habe Nginx mit Homebrew installiert und nach Abschluss der Installation wurde die folgende Meldung angezeigt:
In the interest of allowing you to run `nginx` without `sudo`, the default
port is set to localhost:8080.
If you want to host pages on your local machine to the public, you should
change that to localhost:80, and run `sudo nginx`. You'll need to turn off
any other web servers running port 80, of course.
You can start nginx automatically on login running as your user with:
mkdir -p ~/Library/LaunchAgents
cp #{prefix}/org.nginx.nginx.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/org.nginx.nginx.plist
Though note that if running as your user, the launch agent will fail if you
try to use a port below 1024 (such as http's default of 80.)
Ich möchte jedoch , dass Nginx auf Port 80 bei der Anmeldung ausgeführt wird, und ich möchte nicht das Terminal öffnen und eingeben müssen, sudo nginx
um dies zu tun. Ich möchte, dass es aus einer plist-Datei geladen wird, wie es Redis und PostgreSQL tun.
Ich habe die plist /Library/LaunchAgents/
aus dem Benutzerordner in den entsprechenden Ordner verschoben und den Besitzer geändert. Außerdem habe ich versucht, die user
Direktive in der nginx.conf
Datei zu setzen, und immer noch die gleiche Fehlermeldung in Console.app:
nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)
(zusammen mit einer anderen Nachricht, die mir mitteilte, dass nginx
die user
Direktive ignoriert wurde , da sie ohne Superuser-Berechtigungen ausgeführt wurde)
Antworten:
Ich fand es einfacher, eine Add-Plist-Datei in / Library / LaunchDaemons / zu erstellen.
Wenn Sie möchten, dass es beim Anmelden gestartet wird, können Sie es in ~ / Library / LaunchAgents / ablegen, dieselbe plist-Datei. Auf diese Weise können Sie von Ihrem Benutzernamen aus auf den Befehl launchd launchctl zugreifen, ohne sudo aufrufen zu müssen.
und fügen Sie Folgendes ein (achten Sie darauf, den Pfad zu Ihrer Nginx-Installation und den Benutzernamen zu Ihrem Benutzernamen zu aktualisieren):
quelle
~/Library/LaunchAgents/
und ich erhalte die folgenden Fehler in Console:3/30/13 9:39:24.047 AM com.apple.launchd.peruser.501[884]: (nginx) Unknown key for boolean: NetworkState
3/30/13 9:39:24.047 AM com.apple.launchd.peruser.501[884]: (nginx) Ignored this key: UserName
3/30/13 9:39:24.047 AM com.apple.launchd.peruser.501[884]: (nginx) Ignored this key: UserName
. Ich habe dieProgram
Saite geändert ,/usr/local/Cellar/nginx/1.2.7/sbin/nginx
wenn das wichtig ist.homebrew.mxcl.nginx.plist
, geändertUserName
zuroot
, dannsudo chown root
, und ransudo launchctl load -w
und es funktionierte.<key>KeepAlive</key><dict><key>NetworkState</key><true/></dict>
lauten (beachten Sie, dass ich KeepAlivetrue
durch das Wörterbuch ersetzt habe, das NetworkState enthält). Quelle: developer.apple.com/library/mac/documentation/Darwin/Reference/…Ich bin hierher gekommen, weil ich auf dasselbe Problem gestoßen bin. Meine Lösung war ähnlich wie die von Rich, außer dass ich das Homebrew-Nginx-Startskript verwendet habe:
Als Referenz sehen Sie hier, wie diese homebrew.mxcl.nginx.plist aussieht:
Ich habe 2 Aliase zu meinem $ HOME / .profil hinzugefügt, um das Starten und Stoppen von nginx zu vereinfachen.
Mein Problem war, dass Nginx aus irgendeinem Grund anfangs nicht richtig gestartet wurde. Ich musste nur stop-nginx ausführen, um es zu entladen, und es dann mit start-nginx erneut starten.
quelle
lunchy restart nginx
siehe github.com/mperham/lunchyKeine exakte Antwort auf Ihre Frage, könnte aber nah genug sein: Sie können Port 80 mithilfe des Paketfilters
pf
(getestet unter OS X 10.9) auf Port 8080 umleiten . Fügen Sie die folgende Zeile zu Ihrer hinzu/etc/pf.conf
(sie sollte über den Filterregeln liegen):Eine Erklärung der (meisten) Elemente dieser Zeile finden Sie hier .
Weitere Informationen finden Sie unter /superuser//a/521803 und http://www.openbsd.org/faq/pf/index.html . Letzteres scheint jedoch eine neuere Version von zu beschreiben
pf
, in der die angegebenen Zeile würde anders geschrieben werden.quelle
Mir fallen zwei Erklärungen ein:
In Ihrer
.plist
Datei befinden sich einige Zeilen wie diese :Dies weist launchd an, nginx mit den Rechten des angegebenen Benutzers anstelle von root zu starten.
Wenn Sie möchten, dass Nginx an Port 80 gebunden wird , sollten Sie den Benutzernamen in der Benutzeranweisung von Nginx und nicht in der .plist festlegen. nginx löscht dann das Privileg für die Worker-Prozesse, obwohl der Master-Prozess immer noch root ist.
Sie haben ein Nginx
.plist
in~/Library/LaunchAgents/
(beachten Sie die führenden~
) und nicht/Library/LaunchAgents
.Beachten Sie, dass es möglich ist, .plists zu aktivieren und zu deaktivieren, sodass auf Ihrem System möglicherweise zwei nginx .plists vorhanden sind, von denen jedoch nur eine aktiv ist.
quelle
Ich habe mich vom Pow-Server inspirieren lassen und eine Liste erstellt, die die Portweiterleitung einrichtet. Es leitet Port 80 an Port 8080 und Port 443 an Port 8443 weiter. Auf diese Weise kann ich nginx unter einem normalen Benutzer ausführen und alle meine Verbindungen funktionieren transparent.
Die Liste ist hier: https://gist.github.com/stefansundin/f0ad99195333480157ce67e97c8d28c7
quelle