Я установил Nginx с помощью homebrew и после завершения установки появилось следующее сообщение:
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.)
Но я хочу , чтобы Nginx на порту 80 работал при входе в систему, и я не хочу открывать терминал и вводить его, sudo nginx
чтобы сделать это. Я хочу, чтобы он загружался из файла plist, как это делают Redis и PostgreSQL.
Я переместил plist /Library/LaunchAgents/
из эквивалентной папки пользователя и изменил ее владельца, также попытался установить user
директиву в nginx.conf
файле и все то же сообщение об ошибке в Console.app:
nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)
(наряду с другим сообщением о том, что поскольку nginx
он запускался без привилегий суперпользователя, user
директива игнорировалась)
Ответы:
Я нашел более простой подход - создать файл добавления plist в / Library / LaunchDaemons /
Или, если вы хотите, чтобы он запускался при входе в систему, вы можете поместить его в ~ / Library / LaunchAgents /, тот же файл plist. Это позволит вам получить доступ к команде launchd launchctl от вашего имени пользователя без необходимости вызова sudo.
и вставьте следующее (не забудьте обновить путь к вашей установке nginx, а имя пользователя - к вашему имени пользователя):
источник
~/Library/LaunchAgents/
и я получаю следующие ошибки в консоли: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
. Я изменилProgram
строку,/usr/local/Cellar/nginx/1.2.7/sbin/nginx
если это имеет значение.homebrew.mxcl.nginx.plist
, изменилсяUserName
наroot
, затемsudo chown root
побежал,sudo launchctl load -w
и это сработало.<key>KeepAlive</key><dict><key>NetworkState</key><true/></dict>
(обратите внимание, что я заменил KeepAlivetrue
на словарь, содержащий NetworkState). Источник: developer.apple.com/library/mac/documentation/Darwin/Reference/…Я попал сюда, потому что столкнулся с той же проблемой. Мое решение было похоже на приведенное выше, за исключением того, что я использовал стартовый скрипт Homebrew nginx:
Для справки вот как выглядит этот homebrew.mxcl.nginx.plist:
У меня есть 2 псевдонима, добавленных в мой $ HOME / .profile для облегчения запуска и остановки nginx.
Моя проблема была в том, что по какой-то причине nginx изначально не запускался должным образом. Мне просто нужно было запустить stop-nginx, чтобы выгрузить его, а затем перезапустить снова с помощью start-nginx.
источник
lunchy restart nginx
см. Github.com/mperham/lunchyНе точный ответ на ваш вопрос, но может подойти достаточно близко: вы можете перенаправить порт 80 на порт 8080, используя фильтр пакетов
pf
(протестировано на OS X 10.9). Добавьте следующую строку к вашей/etc/pf.conf
(она должна быть выше правил фильтрации):Объяснение (большинства) элементов этой строки можно найти здесь .
Для получения дополнительной информации см. Https://superuser.com/a/521803 и http://www.openbsd.org/faq/pf/index.html , хотя последний, кажется, описывает более новую версию
pf
, в которой данный Линия будет написана по-другому.источник
Я могу придумать два объяснения:
В вашем
.plist
файле есть такие строки :Это говорит launchd запустить nginx с правами указанного пользователя, а не root.
Если вы хотите, чтобы nginx связывался с портом 80, вы должны установить имя пользователя в директиве пользователя nginx , а не в .plist. Затем nginx откажется от привилегии для рабочих процессов, хотя главный процесс все еще будет корневым.
У вас есть Nginx
.plist
в~/Library/LaunchAgents/
(примечание ведущего~
) , а не/Library/LaunchAgents
.Обратите внимание, что можно активировать и деактивировать .plists, поэтому возможно, что в вашей системе есть два .plists nginx, но активен только один из них.
источник
Я черпал вдохновение из сервера Pow и составил список, который настраивает переадресацию портов. Он перенаправляет порт 80 на порт 8080, а порт 443 на порт 8443. Таким образом, я могу запустить nginx под обычным пользователем, и все мои соединения прозрачно работают.
Плейст здесь: https://gist.github.com/stefansundin/f0ad99195333480157ce67e97c8d28c7
источник