Nginx получает разрешение при подключении к Unicorn

Я перепробовал много предложений онлайн, но ничего не помогло. У меня есть единорог и nginx, работающие над развертыванием приложения ruby ​​on rails на сервере CentOS 6.5. Раньше это работало, но теперь я получаю ошибку плохого шлюза, когда пытаюсь открыть сайт. Два основных файла, с которыми я работаю - это файл конфигурации unicorn.rb и файл nginx default.conf. Расположение этих файлов: /home/myuser/myApp/config/unicorn.rb и /etc/nginx/conf.d/default.conf. Вот что они содержат:

unicorn.rb

Set the working application directory
# working_directory "/path/to/your/app"
working_directory "/home/myuser/myApp"

# Unicorn PID file location
# pid "/path/to/pids/unicorn.pid"
pid "/home/myuser/myApp/pids/unicorn.pid"

# Path to logs
# stderr_path "/path/to/log/unicorn.log"
# stdout_path "/path/to/log/unicorn.log"
stderr_path "/home/myuser/myApp/log/unicorn.log"
stdout_path "/home/myuser/myApp/log/unicorn.log"

# Unicorn socket
# listen "/tmp/unicorn.[app name].sock"
listen "/home/myuser/myApp/tmp/unicorn.myApp.sock"

# Number of processes
# worker_processes 4
worker_processes 2

# Time-out
timeout 30

default.conf

upstream app {
        # Path to Unicorn SOCK file, as defined previously
        server unix:/home/myuser/myApp/tmp/unicorn.myApp.sock fail_timeout=0;
}

server {


    listen 80;
    server_name localhost;

    # Application root, as defined previously
    root /root/myApp/public;

    try_files $uri/index.html $uri @app;

    location @app {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://app;
    }

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

Я пытаюсь запустить этот материал из myuser, поэтому я не хочу перемещать файл единорога или myApp. Чтобы настроить это, я следовал https://www.digitalocean.com/community/articles/how-to-deploy-rails-apps-using-unicorn-and-nginx-on-centos-6-5 но изменил каталоги для некоторые из шагов. Я знаю, что учебник работает, когда я не меняю каталоги, но мне действительно нужно, чтобы он работал у меня дома. Любая помощь приветствуется.

Похоже, проблема в nginx. Глядя на nginx error.log, я получаю это:

2014/03/05 14:53:04 [crit] 5756#0: *1 stat() "/home/myuser/myApp/public/tasks/index.html" failed (13: Permission d$
2014/03/05 14:53:04 [crit] 5756#0: *1 stat() "/home/myuser/myApp/public/tasks" failed (13: Permission denied), cli$
2014/03/05 14:53:04 [crit] 5756#0: *1 connect() to unix:/home/myuser/myApp/tmp/unicorn.myApp.sock failed (13: Per$
2014/03/05 14:53:04 [crit] 5756#0: *1 stat() "/home/myuser/myApp/public/500.html/index.html" failed (13: Permissio$
2014/03/05 14:53:04 [crit] 5756#0: *1 stat() "/home/myuser/myApp/public/500.html" failed (13: Permission denied), $
2014/03/05 14:53:04 [crit] 5756#0: *1 connect() to unix:/home/myuser/myApp/tmp/unicorn.myApp.sock failed (13: Per$
2014/03/05 14:53:04 [crit] 5756#0: *1 stat() "/home/myuser/myApp/public/favicon.ico/index.html" failed (13: Permis$
2014/03/05 14:53:04 [crit] 5756#0: *1 stat() "/home/myuser/myApp/public/favicon.ico" failed (13: Permission denied$
2014/03/05 14:53:04 [crit] 5756#0: *1 connect() to unix:/home/myuser/myApp/tmp/unicorn.myApp.sock failed (13: Per$
2014/03/05 14:53:04 [crit] 5756#0: *1 stat() "/home/myuser/myApp/public/500.html/index.html" failed (13: Permissio$
2014/03/05 14:53:04 [crit] 5756#0: *1 stat() "/home/myuser/myApp/public/500.html" failed (13: Permission denied), $
2014/03/05 14:53:04 [crit] 5756#0: *1 connect() to unix:/home/myuser/myApp/tmp/unicorn.myApp.sock failed (13: Per$

Одно из решений, которое я нашел в Интернете, - отключить SELinux. Я пытался, и это не помогло. Эти файлы имеют разрешение 777, поэтому этого не должно происходить. Есть идеи?

3 ответа

Решение

Я нашел проблему. Путь для unicorn.myapp.sock должен был идти в каталог /tmp в корневом каталоге, а не в каталог myuser. Кроме того, корневой путь в моем файле nginx default.conf должен был находиться в корневом каталоге /myApp/public, а не в том, что я имел. Я понятия не имею, что означает эта последняя часть, но она работает, и я счастлив. Спасибо всем, кто помог мне попасть сюда.

У меня была эта проблема недавно. Единорог выполнялся правильно, и его журнал ошибок был в порядке. Журнал ошибок Nginx показывал сообщения "сбой 13: доступ запрещен". Как и многие другие пользователи, я проверил права доступа к файлу unicorn.sock, и они были правильными.

Проблема заключалась в том, что не только файл unicorn.sock нуждается в правильных разрешениях; также весь путь к файлу единорога должен иметь права на чтение.

chmod o+r

После изменения прав доступа к этим папкам произошла магия.

Я столкнулся с проблемой 502 Bad Gateway вчера на моем Ubuntu 12.10 и nginx и единороге. Ошибки такого типа слишком общие, поэтому лучшее, что я могу сделать, - это помочь вам найти более подробную информацию об основной ошибке. В моем случае я смог определить причину, просмотрев конец моего файла журнала единорога.

tail -n 100 /home/unicorn/log/unicorn.log

Ваш журнал единорога может быть расположен где-то еще, я на сервере Digital Ocean с настройкой приложения rails. Но я думаю, что вы найдете причину ошибки, которую вы получаете в файле журнала единорога. Если нет, проверьте журнал ошибок nginx.

В моем случае у меня были конфликтующие версии гемов между системными гемами и моим приложением (Unicorn не работает под управлением bundle exec, на моей работе), но ваша проблема может быть в другом. Журналы помогут вам выяснить причину 502 Bad Gateway.

Другие вопросы по тегам