web-dev-qa-db-fra.com

Comment démarrer Nginx sur le port 80 sur OS X Connectez-vous?

J'ai installé Nginx en utilisant homebrew et après avoir terminé l'installation, le message suivant s'affiche:

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 veulent NGinx, sur le port 80, exécuté à la connexion et je ne veux pas avoir à ouvrir la terminale et saisissez Sudo nginx pour le faire. Je veux que cela se charge d'un fichier de plateau comme Redis et PostgreSQL DO.

J'ai déplacé le plis sur /Library/LaunchAgents/ Dans l'équivalent du dossier utilisateur et a changé de propriété, a également essayé de définir la directive user dans le fichier nginx.conf Et toujours le même message d'erreur dans la console. App:

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

(avec un autre message me disant que depuis nginx était en cours de fonctionnement sans privilèges super-utilisateur, la directive user était ignorée)

24
Bryson

J'ai trouvé une approche plus facile consistait à créer ajouter un fichier de plis dans/bibliothèque/launchdaemons /

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

Ou, si vous voulez que cela puisse lancer sur la connexion, vous pouvez le mettre en ~/Bibliothèque/Launchagents /, le même fichier de plateau. Cela vous permettra d'accéder à la commande de Launchd LaunkCtl à partir de votre nom d'utilisateur sans qu'il soit nécessaire d'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):

<?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>
12
Rich Kroll

Je suis arrivé ici parce que je courais dans le même problème. Ma solution était similaire à celle des riches ci-dessus, sauf que j'ai utilisé le script Homebrew Nginx STARTUP:

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

Pour référence, voici ce que homeBrew.mxcl.nginx.plist ressemble à:

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

J'ai 2 alias ajoutés à ma maison $ à la maison/.profile pour faciliter la démarrage et arrêter 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'

Mon problème était que pour une raison quelconque, Nginx ne démarrait pas correctement initialement. Je devais juste exécuter l'arrêt-nginx pour le décharger, puis recommencer à nouveau avec Start-Nginx.

9
skuld

Pas un Exact Répondez à votre question, mais vous pouvez vous rapprocher de vous rapprocher: vous pouvez rediriger le port 80 au port 8080, à l'aide du PacketFilter pf (Testé sur OS X 10.9). Ajoutez la ligne suivante à votre /etc/pf.conf (il devrait venir au-dessus des règles de filtrage):

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

Une explication de (la plupart des) éléments de cette ligne peut être trouvé ici .

Pour plus d'informations, voir https://superuser.com/a/5218 et http://www.openbsd.org/faq/pf/index.html , Ce dernier semble décrire une version plus récente de pf, dans laquelle la ligne donnée serait écrite différemment.

1
Webthusiast

J'ai pris l'inspiration du serveur de POW et j'ai fait une plist qui définit le transfert de ports. 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 que toutes mes connexions fonctionnent de manière transparente.

Le plat est ici: https://gist.github.com/stefansundin/f0ad99195333480157ce67e97c8d28c7

0
stefansundin

Je peux penser à deux explications:

  1. Il y a des lignes comme celle-ci dans votre .plist fichier:

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

    Cela indique à LauntD de lancer NGinx avec les privilèges de l'utilisateur spécifié, plutôt que de la racine.

    Si vous souhaitez que NGinx se lie au port 80, vous devez définir le nom d'utilisateur dans la directive Nginx's ser, plutôt que dans le .plist. Nginx déposera ensuite le privilège pour les processus de travail, bien que le processus maître soit toujours root.

  2. Vous avez un nginx .plist dans ~/Library/LaunchAgents/ (Notez le premier ~) plutôt que /Library/LaunchAgents.

    Notez qu'il est possible d'activer et de désactiver des plans .plistes, il est donc possible qu'il existe deux Nginx .plistes sur votre système, mais un seul d'entre eux est actif.

0
Pitarou