Instalei o Nginx usando homebrew e, após concluir a instalação, a seguinte mensagem foi exibida:
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.)
Mas eu quero o Nginx, na porta 80, rodando no login e não quero abrir o terminal e digitar sudo nginx
para fazê-lo. Eu quero que ele carregue de um arquivo plist como Redis e PostgreSQL do.
Mudei o plist para /Library/LaunchAgents/
a pasta equivalente do usuário e alterei sua propriedade, também tentei definir a user
diretiva no nginx.conf
arquivo e ainda a mesma mensagem de erro no Console.app:
nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)
(junto com outra mensagem informando que, como nginx
estava sendo executada sem privilégios de superusuário, a user
diretiva estava sendo ignorada)
Respostas:
Encontrei uma abordagem mais fácil: criar um arquivo add plist em / Library / LaunchDaemons /
Ou, se você deseja iniciar no login, você pode colocá-lo em ~ / Library / LaunchAgents /, o mesmo arquivo plist. Isso permitirá que você acesse o comando launchd launchctl do seu nome de usuário sem a necessidade de chamar sudo.
e insira o seguinte (certifique-se de atualizar o caminho para sua instalação do nginx e o nome de usuário para seu nome de usuário):
fonte
~/Library/LaunchAgents/
e eu recebo os seguintes erros no 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
. Mudei aProgram
string para/usr/local/Cellar/nginx/1.2.7/sbin/nginx
se isso importa.homebrew.mxcl.nginx.plist
, mudeiUserName
pararoot
, entãosudo chown root
, corrisudo launchctl load -w
e funcionou.<key>KeepAlive</key><dict><key>NetworkState</key><true/></dict>
(observe que substituí o KeepAlivetrue
pelo dicionário que contém NetworkState). Fonte: developer.apple.com/library/mac/documentation/Darwin/Reference/...Cheguei aqui porque estava com o mesmo problema. Minha solução foi semelhante à de Rich acima, exceto pelo uso do script de inicialização do Homebrew nginx:
Para referência, eis a aparência desse homebrew.mxcl.nginx.plist:
Eu tenho 2 aliases adicionados ao meu $ HOME / .profile para facilitar o início e a parada do nginx.
Meu problema era que, por algum motivo, o nginx não estava inicializando corretamente inicialmente. Eu apenas tive que executar o stop-nginx para descarregá-lo e, em seguida, reiniciá-lo novamente com start-nginx.
fonte
lunchy restart nginx
consulte github.com/mperham/lunchyNão é uma resposta exata para sua pergunta, mas pode chegar perto o suficiente: você pode redirecionar a porta 80 para a porta 8080, usando o filtro de pacotes
pf
(testado no OS X 10.9). Adicione a seguinte linha ao seu/etc/pf.conf
(ele deve estar acima das regras de filtragem):Uma explicação para a maioria dos elementos desta linha pode ser encontrada aqui .
Para obter mais informações, consulte /superuser//a/521803 e http://www.openbsd.org/faq/pf/index.html , embora o último pareça descrever uma versão mais recente
pf
, na qual o dado linha seria escrita de forma diferente.fonte
Eu posso pensar em duas explicações:
Existem algumas linhas como esta em seu
.plist
arquivo:Isso diz ao launchd para iniciar o nginx com os privilégios do usuário especificado, em vez de raiz.
Se você deseja que o nginx se ligue à porta 80, defina o nome de usuário na diretiva de usuário do nginx , em vez de no .plist. O nginx eliminará o privilégio dos processos de trabalho, embora o processo mestre ainda seja raiz.
Você tem um nginx
.plist
em~/Library/LaunchAgents/
(observe o início~
) em vez de/Library/LaunchAgents
.Observe que é possível ativar e desativar .plists, portanto, é possível que existam dois nginx .plists em seu sistema, mas apenas um deles esteja ativo.
fonte
Inspirei-me no servidor Pow e fiz uma lista que configura o encaminhamento de portas. Encaminha a porta 80 para a porta 8080 e a porta 443 para a porta 8443. Dessa forma, posso executar o nginx em um usuário normal e todas as minhas conexões funcionam de maneira transparente.
A lista está aqui: https://gist.github.com/stefansundin/f0ad99195333480157ce67e97c8d28c7
fonte