web-dev-qa-db-fra.com

nginx n'est pas démarré et ne peut pas démarrer

J'ai un problème que je tente de résoudre depuis quelques jours maintenant et je ne sais pas quoi faire; je cherchais des réponses, mais toutes celles que j'ai trouvées ne m'ont pas aidé.

Je suis un peu nouveau ici et j’espère vraiment que l’on pourra m'aider ..__ Vous pouvez me dire quelles informations je dois donner dans l’espoir de trouver une solution.

$ systemctl status nginx.service
nginx.service - Startup script for nginx service
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Tue 2016-03-08 13:23:35 GMT; 2min 20s ago

Mar 08 13:23:33 startdedicated.com nginx[8315]: nginx: [emerg] bind() to ------------ f...e)
Mar 08 13:23:33 startdedicated.com nginx[8315]: nginx: [emerg] bind() to ----- f...e)
Mar 08 13:23:34 startdedicated.com nginx[8315]: nginx: [emerg] bind() to ----- f...e)
Mar 08 13:23:34 startdedicated.com nginx[8315]: nginx: [emerg] bind() to ----- f...e)
Mar 08 13:23:35 startdedicated.com nginx[8315]: nginx: [emerg] bind() to ----- f...e)
Mar 08 13:23:35 .startdedicated.com nginx[8315]: nginx: [emerg] still could not bind()
Mar 08 13:23:35 startdedicated.com systemd[1]: nginx.service: control process exited, code=...=1
Mar 08 13:23:35 startdedicated.com systemd[1]: Failed to start Startup script for nginx service.
Mar 08 13:23:35 startdedicated.com systemd[1]: Unit nginx.service entered failed state.
Mar 08 13:23:35 startdedicated.com systemd[1]: nginx.service failed.
24
daliborsb

Peut s'avérer utile pour vérifier la syntaxe des fichiers de configuration de Nginx en exécutant:

nginx -t -c /etc/nginx/nginx.conf
32
Dinesh Sunny

Essayez d’exécuter les deux commandes suivantes:

Sudo fuser -k 80/tcp

Sudo fuser -k 443/tcp

Puis exécuter 

Sudo service nginx restart

Si cela a fonctionné , votre fournisseur d'hébergement installera peut-être Apache sur votre serveur par défaut lors d'une nouvelle installation. Continuez donc votre lecture pour obtenir un correctif plus permanent. Si cela n'a pas fonctionné , continuez à lire pour identifier le problème. 

Exécutez nginx -t et s'il ne retourne rien, je vérifierais le journal des erreurs Nginx. Par défaut, il devrait être situé dans /var/log/nginx/error.log

Vous pouvez l'ouvrir avec n'importe quel éditeur de texte: Sudo nano /var/log/nginx/error.log

Pouvez-vous trouver quelque chose de suspect ici?

Le deuxième journal que vous pouvez vérifier est le suivant

Sudo nano /var/log/syslog

Lorsque j'ai eu ce problème, c'était parce que mon fournisseur d'hébergement installait automatiquement Apache lors d'une installation propre. Il bloquait le port 80. 

Lorsque j’ai exécuté Sudo nano /var/log/nginx/error.log, j’ai reçu ce qui suit comme journal des erreurs:

2018/08/04 06:17:33 [emerg] 634#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/08/04 06:17:33 [emerg] 634#0: bind() to [::]:80 failed (98: Address already in use)
2018/08/04 06:17:33 [emerg] 634#0: bind() to 0.0.0.0:80 failed (98: Address already in use)

Ce que dit l'erreur ci-dessus, c'est qu'il n'a pas été possible de lier nginx au port 80, car il était déjà utilisé. 

Pour résoudre ce problème, vous devez exécuter les éléments suivants:

yum install net-tools

Sudo netstat -tulpn

Lorsque vous exécutez ce qui précède, vous obtenez quelque chose comme ce qui suit:

Proto Recv-Q Send-Q Local Address           Foreign Address         State    PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1762/httpd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1224/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1528/sendmail:acce
tcp6       0      0 :::22                   :::*                    LISTEN      1224/sshd

Vous pouvez voir que le port 80 est bloqué par httpd (Apache). Cela pourrait également être le port 443 si vous utilisez SSL. 

Obtenez le PID du processus qui utilise le port 80 ou 443. Et envoyez la commande kill en changeant la valeur <PID>:

Sudo kill -2 <PID>

Notez dans mon exemple que la valeur PID d’Apache était 1762 et que j’exécuterais donc Sudo kill -2 1762

Sinon, vous pouvez exécuter les tâches suivantes:

Sudo fuser -k 80/tcp

Sudo fuser -k 443/tcp

Maintenant que le port 80 ou 443 est vide, vous pouvez démarrer Nginx en lançant ce qui suit:

Sudo service nginx restart

Il est également conseillé de supprimer tout ce qui bloquait auparavant les ports 80 et 443. Ceci évitera tout conflit à l'avenir. Apache (httpd) bloquant mes ports, je l'ai supprimé en exécutant ce qui suit:

yum remove httpd httpd-devel httpd-manual httpd-tools mod_auth_kerb mod_auth_mysql mod_auth_pgsql mod_authz_ldap mod_dav_svn mod_dnssd mod_nss mod_Perl mod_revocator mod_ssl mod_wsgi

J'espère que cela t'aides. 

29
Abhishek R

Essayez de déboguer avec la commande:

$ service nginx configtest

Ce qui sort quelque chose comme:

Testing nginx configuration: nginx: [emerg] unknown directive "stub_status" in /etc/nginx/sites-enabled/nginx_status:11
nginx: configuration file /etc/nginx/nginx.conf test failed

Et réparer ces avertissements

Puis redémarrez nginx

14
itsnikolay

Lorsque quelque chose ne peut pas être lié à un port, il atteint 5% car il ne démarre pas par root (sticky suid bit, Sudo) et 94% parce qu'une autre application est déjà liée à ce port.

Assurez-vous que nginx est vraiment à l'arrêt et que vous n'essayez pas de le démarrer deux fois par accident.

Assurez-vous de ne pas utiliser Apache ou d’autres services utilisant le port 80.

Utilisez netstat -a | grep tcp pour en savoir plus.

3
DanFromGermany

J'ai eu le même problème lorsque j'ai utilisé Vesta, qui utilise nginx avec Apache. Le problème était qu'après avoir appliqué toutes les mises à jour, Apache a commencé à écouter 443 pour https. La solution consistait simplement à commenter les éléments 443 dans ports.conf. En effet, nginx utilise également ce port.

2
Aleks

ps ax | grep nginx
tuer -9 PID
service nginx start

.__ ou rétablissez/etc/nginx/sites-available/default

emplacement/{
# Première tentative de servir la demande sous forme de fichier, puis
# en tant que répertoire, puis revient à l'affichage d'un 404.

try_files $ uri $ uri/= 404;
}

1
spitfir33

changer le port peut aider car le port 80 utilise déjà quelque partvi /etc/nginx/sites-available/defaultChanger le port: listen 8080 default_server; listen [::]: 8080 default_server;

0
dushyant

Essayez de définir un utilisateur dans nginx.conf. C'est peut-être pour cette raison qu'il ne peut pas démarrer le service:

User www-data;
0
user2925795