Como faço para iniciar o nginx na porta 80 no login do OS X?

24

Instalei o Nginx usando homebrew e depois de 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 Nginx, na porta 80, rodando no login e não quero ter que abrir o terminal e digitar sudo nginx para fazer isso. Eu quero que ele seja carregado de um arquivo plist como Redis e PostgreSQL.

Mudei o plist para /Library/LaunchAgents/ da pasta de usuário equivalente e mudei sua propriedade, também tentei definir a diretiva user no arquivo nginx.conf 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 executado sem privilégios de superusuário, a diretiva user estava sendo ignorada)

    
por Bryson 30.06.2011 / 02:10

5 respostas

12

Eu achei que uma abordagem mais fácil era criar um arquivo plist em / Library / LaunchDaemons /

sudo vi /Library/LaunchDaemons/org.nginx.nginx.plist

Ou, se você quer que ele seja iniciado 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 precisar chamar o sudo.

e insira o seguinte (certifique-se de atualizar o caminho para a instalação do nginx e o nome de usuário para o seu nome de usuário):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>nginx</string>
    <key>Program</key>
    <string>/usr/local/Cellar/nginx/1.6.2/bin/nginx</string>
    <key>KeepAlive</key>
    <true/>
    <key>NetworkState</key>
    <true/>
    <key>LaunchOnlyOnce</key>
    <true/>
    <key>UserName</key>
    <string>yourusername</string>
</dict>
</plist>
    
por 12.03.2012 / 21:00
9

Eu cheguei aqui porque estava com o mesmo problema. Minha solução foi semelhante à do Rich acima, exceto que usei o script de inicialização nginx do Homebrew:

sudo cp /usr/local/opt/nginx/homebrew.mxcl.nginx.plist /Library/LaunchDaemons/

Para referência, aqui está como homebrew.mxcl.nginx.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>homebrew.mxcl.nginx</string>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <false/>
    <key>UserName</key>
    <string>root</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/sbin/nginx</string>
    </array>
    <key>WorkingDirectory</key>
    <string>/usr/local</string>
  </dict>
</plist>

Eu tenho dois aliases adicionados ao meu $ HOME / .profile para facilitar a inicialização e a desativação do nginx.

# Nginx needs to bind to port 80 so must run as /Library/LaunchDaemon with sudo
alias start-nginx='sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.nginx.plist'
alias stop-nginx='sudo launchctl unload /Library/LaunchDaemons/homebrew.mxcl.nginx.plist'

Meu problema era que, por alguma razão, o nginx não estava inicializando corretamente inicialmente. Eu apenas tive que executar o stop-nginx para descarregá-lo e reiniciá-lo novamente com o start-nginx.

    
por 14.09.2012 / 21:16
1

Nã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 packetfilter pf (testado no OS X 10.9). Adicione a seguinte linha ao seu /etc/pf.conf (deve vir acima das regras de filtragem):

rdr pass on lo0 inet proto tcp from any to any port http -> localhost port 8080

Uma explicação de (muitos dos) elementos desta linha pode ser encontrada aqui .

Para mais informações, consulte link e link , embora o último pareça descrever uma versão mais recente de pf , em que a linha dada seria escrita de forma diferente.

    
por 04.02.2014 / 10:38
0

Eu posso pensar em duas explicações:

  1. Existem algumas linhas como esta no seu arquivo .plist :

    <key>Username</key>
    <string>some_user</string>
    

    Isto diz ao launchd para lançar o nginx com os privilégios do usuário especificado, que a raiz.

    Se você quiser que o nginx se ligue à porta 80, você deve definir o nome de usuário no nginx Diretiva usuário , em vez de no .plist. O nginx irá então eliminar o privilégio para os processos de trabalho, embora o processo mestre ainda seja raiz.

  2. Você tem um nginx .plist em ~/Library/LaunchAgents/ (observe os principais ~ ) em vez de /Library/LaunchAgents .

    Note que é possível ativar e desativar o .plists, por isso é possível são dois nginx .plists no seu sistema, mas apenas um deles está ativo.

por 12.03.2014 / 01:22
0

Eu me inspirei no servidor Pow e fiz um plist que configurava o encaminhamento de porta. Ele encaminha a porta 80 para a porta 8080 e a porta 443 para a porta 8443. Dessa forma, posso executar o nginx com um usuário normal e todas as minhas conexões funcionam de maneira transparente.

A plist está aqui: link

    
por 21.03.2018 / 01:07