24 votos

¿Cómo comenzar a nginx en el puerto 80 en el inicio de sesión de OS X?

He instalado Nginx el uso de homebrew y después de completar la instalación, el siguiente mensaje aparece:

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.)

Pero yo quiero Nginx, en el puerto 80, se ejecuta al iniciar la sesión, y yo no quiero tener que abrir la terminal y escriba sudo nginx a hacerlo. Quiero que se carga desde un archivo plist como Redis y PostgreSQL hacer.

He movido el plist a /Library/LaunchAgents/ de la carpeta de usuario equivalente y cambió su propiedad, también trató de establecer el user directiva en la nginx.conf archivo y sigue el mismo mensaje de error en la Consola.aplicación:

nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)

(junto con otro mensaje diciéndome que ya nginx estaba siendo administrado sin privilegios de superusuario, user directiva estaba siendo ignorada)

12voto

Rich Kroll Puntos 221

Me pareció un enfoque más fácil crear Agregar archivo plist en encuentran/LaunchDaemons

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

O, si desea lanzar en Inicio de sesión, puede ponerlo en ~/Library/LaunchAgents, el mismo archivo plist. Esto le permitirá acceder al comando launchctl de launchd desde su nombre de usuario sin necesidad de llamar a sudo.

e inserte lo siguiente (Asegúrese de actualizar la ruta de acceso su nginx instalar y el nombre de usuario a tu nombre de usuario):

<?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>

9voto

skuld Puntos 171

Llegué aquí porque me estaba quedando en el mismo problema. Mi solución fue similar a la de los más Ricos de arriba, excepto que se utiliza el Homebrew nginx secuencia de comandos de inicio:

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

Para referencia, aquí es lo que homebrew.mxcl.nginx.plist parece:

<?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>

Tengo 2 alias añadido a mi $HOME/.perfil para hacer más fácil para iniciar y detener 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'

Mi problema era que, por alguna razón, nginx no se inicia correctamente inicialmente. Yo sólo tenía que correr a la parada-nginx para descargar y, a continuación, volver a empezar de nuevo con el inicio de nginx.

3voto

ehfeng Puntos 929

Que tenía la misma pregunta y encontré la respuesta y una reseña completa aquí: http://wiki.summercode.com/running_homebrewed_nginx_with_sudo_on_mac_os_x

1voto

Webthusiast Puntos 111

No es una exacta respuesta a su pregunta, pero podría acercarse lo suficiente: usted puede redirigir el puerto 80 al puerto 8080, el uso de la packetfilter pf (probado en OS X 10.9). Agregue la siguiente línea a su /etc/pf.conf (debe venir por encima de las reglas de filtrado):

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

Una explicación de (la mayoría de) los elementos de esta línea se pueden encontrar aquí.

Para obtener más información, consulte http://superuser.com/a/521803 y http://www.openbsd.org/faq/pf/index.htmlaunque este último parece describir una versión más reciente de pf, en el que la línea se escriben de forma diferente.

0voto

Pitarou Puntos 117

Se me ocurren dos explicaciones:

  1. Hay algunas líneas como esta en su .plist archivo:

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

    Esto le dice a launchd para el lanzamiento de nginx con los privilegios del usuario especificado, en lugar de root.

    Si desea nginx para enlazar el puerto 80, debe establecer el nombre de usuario en nginx del usuario de la directiva, en lugar de en los .plist. nginx, a continuación, colocar el privilegio para los procesos de trabajo, aunque el proceso master todavía ser root.

  2. Usted tiene un nginx .plist en ~/Library/LaunchAgents/ (nota de los principales ~) en lugar de /Library/LaunchAgents.

    Tenga en cuenta que es posible activar y desactivar .plists, por lo que es posible que haya son dos nginx .plists en su sistema, pero sólo uno de ellos está activo.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: