2017-08-07 18 views
2

Rails 5で作業していて、Vagrantを通してすべてを設定しています。私はNginxとWebrickを通して私のサイトを正常に動かせるようになりました。 Unicornで試してみると、Apache2のデフォルトページが表示されます。私はsites-availableのデフォルトを取り除き、sites-enabledの下にnginx.confにリンクされているものを作成しました。Apache2 Ubuntuのデフォルトページを表示する

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ファイル:

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 

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

は私nginx.confファイルです

この質問を提出する前に、私はスタックのオーバーフローに関するいくつかの調査を行いました。どんな助けもありがとう!

--- UPDATE 1 ---

これは私がsudo service unicorn restartを行う際error.logに示したものです:

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() 

--- UPDATE 2 ---

ログ後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

あなたはnginxログを見る必要があります。 tmpとpidsディレクトリを作成する必要があるためです。 –

+0

Apache2プロセスは別に実行している必要がありますか?そうしないと、それをやめてみてください。 –

+0

そして、server_nameを定義する必要があります。 –

答えて

0

EADDRINUSE(98)エラーはかなり明確です。あなたは、複数のウェブサーバをポート80にバインド(2)することはできません。あなたの好みの部屋を作るために、それらのうちの1つが必要です。

sudo lsof -i:80を使用して、すでにそのTCPポートにバインドされているプロセスを識別します。ルートはkillを発行するか、service apache stopのようなコマンドを発行して、別のサーバーが一時的にポートを取得できるようにする必要があります。長期的には、systemctl disable apacheのようなものは、再起動後もポート80がフリーであることを保証します。または、設定ファイルのデフォルト以外のポートに切り替えます。

+0

空の応答を示しています。私は戻ってくるときにあなたの方法を試してみるつもりです。私が知っていることは、 'sudo service apache2 stop 'を実行してApacheを停止しても何も起こらないということです。私が迷惑な人をリロードし、nginxとunicornの両方を再起動すると、Apacheが起動して実行されます。それは完全に(あなたが推薦しているように)それを殺すか、またはサーバーから完全にApacheを削除します。 –

+0

'sudo lsof -i:80'を使った後、私の質問に2番目のアップデートを追加しました。ルートの隣に 'kill 'は見られませんでした。私は 'systemctl disable apache'も使用しましたが、コマンドが見つかりません。別のことは、私は最終的にそれがうまくいくかどうかを見るためにApache 2をアンインストールすることにしました。 –

関連する問題