2017-08-07 1 views
2

Travaillait avec Rails 5 et tout paramétrer via Vagrant. J'ai réussi à faire fonctionner mon site via Nginx et Webrick. Quand j'essaye avec Unicorn, il me montre la page par défaut d'Apache2. J'ai enlevé la valeur par défaut dans sites-available et j'en ai créé une sous sites-enabled qui est liée à nginx.conf.Apache2 Ubuntu Page par défaut Affichage

Voici mon fichier nginx.conf:

upstream unicorn { 
    server unix:/tmp/unicorn.mysiteNginx.sock fail_timeout=0; 
} 

server { 
    listen 80 default deferred; 
    # server_name projectname.com; 
    root /vagrant/public; 
    try_files $uri/home.html $uri @unicorn; 
    location @unicorn { 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $http_host; 
    proxy_redirect off; 
    proxy_pass http://unicorn; 
    } 

    error_page 500 502 503 504 /500.html; 
    client_max_body_size 4G; 
    keepalive_timeout 10; 
    } 

unicorn.rb fichier:

working_directory "/vagrant" 
pid "/vagrant/tmp/pids/unicorn.pid" 
stderr_path "/vagrant/log/unicorn.log" 
stdout_path "/vagrant/log/unicorn.log" 

listen "/tmp/unicorn.mysiteNginx.sock" 
worker_processes 2 
timeout 30 

fichier unicorn_init.sh:

#!/bin/sh 
set -e 
# Example init script, this can be used with nginx, too, 
# since nginx and unicorn accept the same signals 

# Feel free to change any of the following variables for your app: 
# Remember -E production flag for production & sudo -c "$CMD" - user so it's not run as root! 
TIMEOUT=${TIMEOUT-60} 
APP_ROOT=/vagrant 
PID=$APP_ROOT/tmp/pids/unicorn.pid 
CMD="/home/vagrant/.rvm/bin/ruby-2.3.1_unicorn -D -c $APP_ROOT/config/unicorn.rb -E production" 
action="$1" 
set -u 

old_pid="$PID.oldbin" 

cd $APP_ROOT || exit 1 

sig() { 
     test -s "$PID" && kill -$1 `cat $PID` 
} 

oldsig() { 
     test -s $old_pid && kill -$1 `cat $old_pid` 
} 

case $action in 
start) 
     sig 0 && echo >&2 "Already running" && exit 0 
     su -c "$CMD" - vagrant 
     ;; 
stop) 
     sig QUIT && exit 0 
     echo >&2 "Not running" 
     ;; 
force-stop) 
     sig TERM && exit 0 
     echo >&2 "Not running" 
     ;; 
restart|reload) 
     sig HUP && echo reloaded OK && exit 0 
     echo >&2 "Couldn't reload, starting '$CMD' instead" 
     su -c "$CMD" - vagrant 
     ;; 
upgrade) 
     if sig USR2 && sleep 2 && sig 0 && oldsig QUIT 
     then 
       n=$TIMEOUT 
       while test -s $old_pid && test $n -ge 0 
       do 
         printf '.' && sleep 1 && n=$(($n - 1)) 
       done 
       echo 

       if test $n -lt 0 && test -s $old_pid 
       then 
         echo >&2 "$old_pid still exists after $TIMEOUT seconds" 
         exit 1 
       fi 
       exit 0 
     fi 
     echo >&2 "Couldn't upgrade, starting '$CMD' instead" 
     su -c "$CMD" - vagrant 
     ;; 
reopen-logs) 
     sig USR1 
     ;; 
*) 
     echo >&2 "Usage: $0 <start|stop|restart|upgrade|force-stop|reopen-logs>" 
     exit 1 
     ;; 
esac 

Avant de soumettre cette question, j'ai fait quelques recherches sur le débordement de la pile et j'ai fait un peu de dépannage avec une question similaire mais sans succès jusqu'ici. Toute aide serait appréciée!

--- 1 --- MISE À JOUR

C'est ce que montre en error.log quand je fais sudo service unicorn restart:

017/08/07 22:41:17 [notice] 2387#2387: signal process started 
2017/08/07 22:41:18 [emerg] 2391#2391: bind() to 0.0.0.0:80 failed (98: Address already in use) 
2017/08/07 22:41:18 [emerg] 2391#2391: bind() to 0.0.0.0:80 failed (98: Address already in use) 
2017/08/07 22:41:18 [emerg] 2391#2391: bind() to 0.0.0.0:80 failed (98: Address already in use) 
2017/08/07 22:41:18 [emerg] 2391#2391: bind() to 0.0.0.0:80 failed (98: Address already in use) 
2017/08/07 22:41:18 [emerg] 2391#2391: bind() to 0.0.0.0:80 failed (98: Address already in use) 
2017/08/07 22:41:18 [emerg] 2391#2391: still could not bind() 

--- MISE À JOUR 2 ---

Se connecter après sudo lsof -i:80

COMMAND PID  USER FD TYPE DEVICE SIZE/OFF NODE NAME 
nginx 1854  root 6u IPv4 11471  0t0 TCP *:http (LISTEN) 
nginx 1855 www-data 6u IPv4 11471  0t0 TCP *:http (LISTEN) 
+0

Vous devez voir les journaux nginx. Parfois, c'est parce que vous devez créer des répertoires tmp et pids. –

+0

Avez-vous besoin d'un processus Apache2 en cours d'exécution? Si vous ne le faites pas, essayez de l'arrêter. –

+0

Et vous devez définir server_name. –

Répondre

0

L'erreur EADDRINUSE (98) est assez claire. Vous ne pouvez pas lier plusieurs serveurs web (2) au port 80. L'un d'entre eux devra y aller, pour faire de la place à celui que vous préférez. Utilisez sudo lsof -i:80 pour identifier le processus déjà lié à ce port TCP La racine devrait émettre un kill, ou une commande comme service apache stop pour permettre temporairement à un autre serveur d'acquérir le port. À plus long terme, quelque chose comme systemctl disable apache assurera que le port 80 est toujours libre après le redémarrage. Ou basculez vers un port autre que celui par défaut dans son fichier de configuration.

+0

Ouais, je m'attendais aussi à ce que ce soit le problème en lisant le journal. Je vais essayer votre méthode à mon retour. Ce que je sais, c'est que j'ai arrêté apache en faisant 'sudo service apache2 stop' et rien ne se passerait. Si je rechargerais Vagrant et redémarrerais Nginx et Unicorn, Apache serait opérationnel. C'est soit le tuer complètement (comme vous le recommandez) ou supprimer complètement apache du serveur. –

+0

Ajout d'une deuxième mise à jour à ma question après avoir utilisé 'sudo lsof -i: 80'. Je n'ai vu aucun 'kill' à côté de root. J'ai aussi utilisé 'systemctl disable apache' mais il dit que cette commande n'est pas trouvée. Une autre chose est que j'ai finalement décidé de désinstaller Apache 2 juste pour voir si cela pourrait fonctionner. –