Zainstalowałem Nginx za pomocą homebrew i po zakończeniu instalacji wyświetlił się następujący komunikat:
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.)
Ale chcę, aby Nginx na porcie 80 działał przy logowaniu i nie chcę otwierać terminala i pisać, sudo nginx
aby to zrobić. Chcę, aby ładował się z pliku plist, takiego jak Redis i PostgreSQL.
Przeniosłem plist /Library/LaunchAgents/
z ekwiwalentu folderu użytkownika i zmieniłem jego własność, próbowałem również ustawić user
dyrektywę w nginx.conf
pliku i nadal ten sam komunikat o błędzie w Console.app:
nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)
(wraz z innym komunikatem informującym, że ponieważ nginx
był uruchamiany bez uprawnień superużytkownika, user
dyrektywa była ignorowana)
Odpowiedzi:
Odkryłem, że łatwiejszym podejściem było utworzenie pliku add plist w / Library / LaunchDaemons /
Lub, jeśli chcesz, aby uruchamiał się po zalogowaniu, możesz umieścić go w ~ / Library / LaunchAgents /, tym samym pliku plist. Umożliwi to dostęp do komendy launchd launchctl z nazwy użytkownika bez konieczności wywoływania sudo.
i wstaw następujące (pamiętaj o zaktualizowaniu ścieżki do instalacji nginx i nazwy użytkownika do swojej nazwy użytkownika):
źródło
~/Library/LaunchAgents/
i w konsoli pojawiają się następujące błędy: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
. ZmieniłemProgram
ciąg na,/usr/local/Cellar/nginx/1.2.7/sbin/nginx
jeśli to ma znaczenie.homebrew.mxcl.nginx.plist
, zmieniłemUserName
naroot
, a potemsudo chown root
pobiegłemsudo launchctl load -w
i zadziałało.<key>KeepAlive</key><dict><key>NetworkState</key><true/></dict>
(zauważ, że KeepAlive zastąpiłemtrue
słownikiem zawierającym NetworkState). Źródło: developer.apple.com/library/mac/documentation/Darwin/Reference/…Przybyłem tutaj, ponieważ miałem ten sam problem. Moje rozwiązanie było podobne do powyższego Richa, z tym wyjątkiem, że użyłem skryptu startowego Homebrew nginx:
Dla porównania, oto jak wygląda ten homebrew.mxcl.nginx.plist:
Mam 2 aliasy dodane do mojego $ HOME / .profile, aby ułatwić uruchamianie i zatrzymywanie nginx.
Mój problem polegał na tym, że z jakiegoś powodu nginx początkowo nie uruchamiał się poprawnie. Musiałem tylko uruchomić stop-nginx, aby go zwolnić, a następnie ponownie uruchomić za pomocą start-nginx.
źródło
lunchy restart nginx
patrz github.com/mperham/lunchyNie jest to dokładna odpowiedź na twoje pytanie, ale może być wystarczająco blisko: możesz przekierować port 80 na port 8080, używając filtru pakietów
pf
(testowany na OS X 10.9). Dodaj następujący wiersz do/etc/pf.conf
(powinien znajdować się powyżej reguł filtrowania):Wyjaśnienie (większości) elementów tej linii można znaleźć tutaj .
Aby uzyskać więcej informacji, zobacz /superuser//a/521803 i http://www.openbsd.org/faq/pf/index.html , chociaż ten ostatni wydaje się opisywać nowszą wersję
pf
, w której linia będzie napisana inaczej.źródło
Mogę wymyślić dwa wyjaśnienia:
W twoim
.plist
pliku jest kilka takich linii :Mówi to uruchomione, aby uruchomić nginx z uprawnieniami określonego użytkownika, a nie root.
Jeśli chcesz, aby nginx powiązał się z portem 80, powinieneś ustawić nazwę użytkownika w dyrektywie użytkownika nginx , a nie w .plist. nginx wówczas upuści uprawnienie do procesów roboczych, chociaż proces główny nadal będzie rootem.
Masz nginx
.plist
w~/Library/LaunchAgents/
(zauważ wiodący~
) zamiast/Library/LaunchAgents
.Zauważ, że można aktywować i dezaktywować .plists, więc możliwe jest, że w twoim systemie są dwie .listy nginx, ale tylko jedna z nich jest aktywna.
źródło
Wziąłem inspirację z serwera Pow i stworzyłem listę, która konfiguruje przekierowanie portów. Przekierowuje port 80 na port 8080, a port 443 na port 8443. W ten sposób mogę uruchomić nginx pod zwykłym użytkownikiem, a wszystkie moje połączenia działają transparentnie.
Plist jest tutaj: https://gist.github.com/stefansundin/f0ad99195333480157ce67e97c8d28c7
źródło