Я работаю над переходом с nginx + пассажира на nginx + unicorn, и я достиг точки, в которой я немного застрял.
Когда я пытаюсь просмотреть свой тестовый сервер, я получаю только страницу 404. Я уверен, что у меня что-то не так в моей конфигурации vhost, но я просто не понимаю, в чем проблема.
Любая помощь с этим приветствуется.
Это текущая версия моего файла vhost
upstream unicorn-staging {
server unix:/data/appname/staging/current/tmp/sockets/unicorn-staging.sock fail_timeout=0;
}
server {
listen 80 deferred;
listen 443;
ssl on;
root /data/appname/staging/current/public;
server_name foo;
access_log /data/appname/staging/current/log/unicorn-staging-access.log;
error_log /data/appname/staging/current/log/unicorn-staging-error.log;
client_max_body_size 4G;
ssl_certificate /data/appname/staging/shared/certs/appname.crt;
ssl_certificate_key /data/appname/staging/shared/certs/appname.key;
location / {
proxy_pass http://unicorn-staging;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https; # for SSL, add this
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
index index.html index.htm;
}
location ~ \.(jpg|png|mp3|ogg)$ {
valid_referers server_names;
if ($invalid_referer) {
return 403;
}
}
location ~ \.(jpg|png|mp3|ogg|js|css|html|gif)$ {
gzip_static on;
expires max;
add_header Cache-Control public;
}
location ~ ^/(images|javascripts|stylesheets|assets)/ {
root /data/appname/staging/current/public; # for asset pipeline and other static files
expires max;
break;
}
# redirect server error pages to the stat
error_page 500 502 503 504 /50x.html;
}
Ваша конфигурация единорога, скорее всего, настроена неправильно.
Это происходит на моем сервере, когда nginx запущен, а единорог - нет. Причина в том, что nginx пытается передать запрос сокету, но единорога нет, чтобы его получить.
По умолчанию единорог прослушивает только порт 8080. Вы можете изменить настройки единорога для прослушивания через другой порт или сокет.
Если вы используете файл конфигурации единорога (config/unicorn.rb
), то внутри этого файла у вас должно быть что-то вроде (обратите внимание, что вам придется изменить путь к сокету):
listen File.expand_path("tmp/sockets/unicorn.sock", RAILS_ROOT)
В целях отладки я также заставляю его слушать порт.
listen File.expand_path("tmp/sockets/unicorn.sock", RAILS_ROOT)
listen 3000, :tcp_nopush => true
Чтобы запустить unicorn на рабочем веб-сервере, необходимо выполнить команду, подобную следующей:
bundle exec unicorn -E production -c config/unicorn.rb
Это использует файл конфигурации единорога. Видеть http://unicorn.bogomips.org/Unicorn/Configurator.html для примера файла конфигурации.
Если вы не используете конфигурационный файл единорога, требуется переключатель командной строки в формате:
-l, --listen ADDRESS
Например:
bundle exec unicorn -l tmp/sockets/unicorn.sock
Обратите внимание, что я использую относительный путь, потому что pwd
Я использую корневой каталог rails.