Instalé Nginx usando homebrew y después de completar la instalación se mostró el siguiente mensaje:
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 quiero que Nginx, en el puerto 80, se ejecute al iniciar sesión y no quiero tener que abrir el terminal y escribir sudo nginx
para hacerlo. Quiero que se cargue desde un archivo plist como Redis y PostgreSQL.
Moví el plist a /Library/LaunchAgents/
la carpeta de usuario equivalente y cambié su propiedad, también intenté configurar la user
directiva en el nginx.conf
archivo y aún el mismo mensaje de error en Console.app:
nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)
(junto con otro mensaje que me dice que, dado que nginx
se estaba ejecutando sin privilegios de superusuario, la user
directiva se estaba ignorando)
Respuestas:
Encontré que un enfoque más fácil era crear un archivo agregar plist en / Library / LaunchDaemons /
O, si desea que se inicie al iniciar sesión, puede ponerlo en ~ / Library / LaunchAgents /, el mismo archivo plist. Esto le permitirá acceder al comando launchd launchctl desde su nombre de usuario sin necesidad de llamar a sudo.
e inserte lo siguiente (asegúrese de actualizar la ruta a su instalación de nginx y el nombre de usuario a su nombre de usuario):
fuente
~/Library/LaunchAgents/
y consigo los siguientes errores en la consola: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
. Cambié laProgram
secuencia a/usr/local/Cellar/nginx/1.2.7/sbin/nginx
si eso importa.homebrew.mxcl.nginx.plist
, cambiadoUserName
aroot
, entoncessudo chown root
, y corriósudo launchctl load -w
y funcionó.<key>KeepAlive</key><dict><key>NetworkState</key><true/></dict>
(tenga en cuenta que reemplacé KeepAlive'strue
con el diccionario que contiene NetworkState). Fuente: developer.apple.com/library/mac/documentation/Darwin/Reference/…Llegué aquí porque me encontraba con el mismo problema. Mi solución fue similar a la de Rich anterior, excepto que usé el script de inicio Homebrew nginx:
Como referencia, así es como se ve esa homebrew.mxcl.nginx.plist:
Tengo 2 alias agregados a mi $ HOME / .profile para que sea más fácil iniciar y detener nginx.
Mi problema fue que, por alguna razón, nginx no se estaba iniciando correctamente inicialmente. Simplemente tuve que ejecutar stop-nginx para descargarlo y luego reiniciarlo nuevamente con start-nginx.
fuente
lunchy restart nginx
visite github.com/mperham/lunchyNo es una respuesta exacta a su pregunta, pero podría acercarse lo suficiente: puede redirigir el puerto 80 al puerto 8080, utilizando el filtro de paquetes
pf
(probado en OS X 10.9). Agregue la siguiente línea a su/etc/pf.conf
(debe estar por encima de las reglas de filtrado):Una explicación de (la mayoría de) los elementos de esta línea se puede encontrar aquí .
Para obtener más información, consulte /superuser//a/521803 y http://www.openbsd.org/faq/pf/index.html , aunque este último parece describir una versión más nueva de
pf
, en la que la línea se escribiría de manera diferente.fuente
Se me ocurren dos explicaciones:
Hay algunas líneas como esta en su
.plist
archivo:Esto le dice a launchd que inicie nginx con los privilegios del usuario especificado, en lugar de root.
Si desea que nginx se enlace al puerto 80, debe establecer el nombre de usuario en la directiva de usuario de nginx , en lugar de en el .plist. nginx luego eliminará el privilegio para los procesos de trabajo, aunque el proceso maestro seguirá siendo root.
Tiene un nginx
.plist
en~/Library/LaunchAgents/
(tenga en cuenta el inicio~
) en lugar de/Library/LaunchAgents
.Tenga en cuenta que es posible activar y desactivar .plists, por lo que es posible que haya dos nginx .plists en su sistema, pero solo uno de ellos está activo.
fuente
Me inspiré en el servidor Pow e hice una lista que configura el reenvío de puertos. Reenvía el puerto 80 al puerto 8080 y el puerto 443 al puerto 8443. De esta manera puedo ejecutar nginx con un usuario normal, y todas mis conexiones funcionan de manera transparente.
El plist está aquí: https://gist.github.com/stefansundin/f0ad99195333480157ce67e97c8d28c7
fuente