J'ai installé Nginx en utilisant homebrew et après avoir terminé l'installation, le message suivant s'est affiché:
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.)
Mais je veux que Nginx, sur le port 80, s'exécute à la connexion et je ne veux pas avoir à ouvrir le terminal et taper sudo nginx
pour le faire. Je veux qu'il se charge à partir d'un fichier plist comme Redis et PostgreSQL.
J'ai déplacé le plist vers /Library/LaunchAgents/
l'équivalent du dossier utilisateur et changé sa propriété, j'ai également essayé de définir la user
directive dans le nginx.conf
fichier et toujours le même message d'erreur dans Console.app:
nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)
(avec un autre message me disant que, nginx
étant exécuté sans privilèges de super-utilisateur, la user
directive était ignorée)
Réponses:
J'ai trouvé qu'une approche plus simple consistait à créer un fichier d'ajout de plist dans / Library / LaunchDaemons /
Ou, si vous voulez qu'il se lance à la connexion, vous pouvez le mettre dans ~ / Library / LaunchAgents /, le même fichier plist. Cela vous permettra d'accéder à la commande launchd launchctl à partir de votre nom d'utilisateur sans avoir à appeler sudo.
et insérez ce qui suit (assurez-vous de mettre à jour le chemin d'accès à votre installation nginx et le nom d'utilisateur à votre nom d'utilisateur):
la source
~/Library/LaunchAgents/
et je reçois les erreurs suivantes dans la 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
. J'ai changé laProgram
chaîne en/usr/local/Cellar/nginx/1.2.7/sbin/nginx
si cela compte.homebrew.mxcl.nginx.plist
, changéUserName
pourroot
, ensuitesudo chown root
, et RANsudo launchctl load -w
et cela a fonctionné.<key>KeepAlive</key><dict><key>NetworkState</key><true/></dict>
(notez que j'ai remplacé KeepAlivetrue
par le dictionnaire contenant NetworkState). Source: developer.apple.com/library/mac/documentation/Darwin/Reference/…Je suis arrivé ici parce que je rencontrais le même problème. Ma solution était similaire à celle de Rich ci-dessus, sauf que j'ai utilisé le script de démarrage Homebrew nginx:
Pour référence, voici à quoi ressemble homebrew.mxcl.nginx.plist:
J'ai 2 alias ajoutés à mon $ HOME / .profile pour faciliter le démarrage et l'arrêt de nginx.
Mon problème était que pour une raison quelconque, nginx ne démarrait pas correctement au départ. J'ai juste eu à exécuter stop-nginx pour le décharger, puis à le redémarrer à nouveau avec start-nginx.
la source
lunchy restart nginx
voir github.com/mperham/lunchyPas une réponse exacte à votre question, mais pourrait se rapprocher assez: vous pouvez rediriger le port 80 vers le port 8080, en utilisant le packetfilter
pf
(testé sur OS X 10.9). Ajoutez la ligne suivante à votre/etc/pf.conf
(elle doit dépasser les règles de filtrage):Une explication de (la plupart) des éléments de cette ligne peut être trouvée ici .
Pour plus d'informations, voir /superuser//a/521803 et http://www.openbsd.org/faq/pf/index.html , bien que ce dernier semble décrire une version plus récente de
pf
, dans laquelle la donnée la ligne serait écrite différemment.la source
Je peux penser à deux explications:
Il y a quelques lignes comme celle-ci dans votre
.plist
fichier:Cela indique à launchd de lancer nginx avec les privilèges de l'utilisateur spécifié, plutôt que root.
Si vous souhaitez que nginx se lie au port 80, vous devez définir le nom d'utilisateur dans la directive utilisateur de nginx , plutôt que dans le .plist. nginx supprimera alors le privilège pour les processus de travail, bien que le processus maître soit toujours root.
Vous avez un nginx
.plist
dans~/Library/LaunchAgents/
(notez le début~
) plutôt que/Library/LaunchAgents
.Notez qu'il est possible d'activer et de désactiver les .plists, il est donc possible qu'il y ait deux nginx .plists sur votre système, mais qu'un seul d'entre eux est actif.
la source
Je me suis inspiré du serveur Pow et j'ai créé une liste qui configure la redirection de port. Il transfère le port 80 au port 8080 et le port 443 au port 8443. De cette façon, je peux exécuter nginx sous un utilisateur normal et toutes mes connexions fonctionnent de manière transparente.
La liste est ici: https://gist.github.com/stefansundin/f0ad99195333480157ce67e97c8d28c7
la source