Apache2 Ubuntu默认页面出现

时间:2017-08-07 22:32:57

标签: ruby-on-rails nginx vagrant unicorn

一直在使用Rails 5并通过Vagrant设置所有内容。我已成功通过Nginx和Webrick让我的网站工作。当我尝试使用Unicorn时,它会显示Apache2的默认页面。我删除了sites-available中的默认值,并在sites-enabled下创建了一个与nginx.conf相关联的默认值。

以下是我的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 档案:

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

在提交这个问题之前,我做了一些关于堆栈溢出的研究,并做了一些类似问题的故障排除,但到目前为止还没有成功。任何帮助将不胜感激!

---更新1 ---

这是我error.logsudo 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()

---更新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)

1 个答案:

答案 0 :(得分:0)

EADDRINUSE(98)错误非常清楚。你不能有多个web服务器绑定(2)到端口80.其中一个必须去,为你喜欢的那个腾出空间。

使用sudo lsof -i:80标识已绑定到该TCP端口的进程。 Root应发出killservice apache stop之类的命令,以暂时允许其他服务器获取端口。从长期来看,像systemctl disable apache这样的东西将确保端口80在重启后仍然是免费的。或者在配置文件中切换到非默认端口。