Аналогичная проблема.
Решил так:
1. config/environment.rb
Внизу
RedmineApp::Application.routes.default_scope = { :path => '/redmine', :shallow_path => '/redmine' }
# Это в конфиге есть
RedmineApp::Application.initialize!
Redmine::Utils::relative_url_root = "/redmine"
Таким образом, приложение ожидает запросы не от корня, а от префикса /redmine
И ссылки формирует соответсвенно, не /users/login, а /redmine/users/login
2. unicorn.rb не интересен особо, но, на всякий случай, приведу
orker_processes 2
working_directory "/home/www/redmine/"
preload_app true
timeout 30
listen "/home/www/redmine/tmp/sockets/unicorn.sock", :backlog => 64
pid "/home/www/redmine/tmp/pids/unicorn.pid"
stderr_path "/home/www/redmine/log/unicorn.stderr.log"
stdout_path "/home/www/redmine/log/unicorn.stdout.log"
before_fork do |server, worker|
defined?(ActiveRecord::Base) and
ActiveRecord::Base.connection.disconnect!
end
after_fork do |server, worker|
defined?(ActiveRecord::Base) and
ActiveRecord::Base.establish_connection
end
~
3. Конфиг nginx
Запросы с префиксом /redmine проксируем на socket через upstream
rewrite тут не нужно, потому что redmine и так ждет от нас префикса /redmine (чтоб ссылки работали)
В вот статику отдаем через nginx напрямую.
upstream unicorn_server {
server unix:/home/www/redmine/tmp/sockets/unicorn.sock;
}
server {
server_name docflow.soglasie.ru;
client_max_body_size 8m;
keepalive_timeout 5;
# apache
location / {
proxy_pass http://127.0.0.1:8181;
}
# redmine
location /redmine {
proxy_pass http://unicorn_server;
}
# redmine static
location ~* /redmine/.+\.(ico|css|js|png) {
rewrite /redmine/(.*) /$1 break;
root /home/www/redmine/public/;
}
}
Не претендую на качественный конфиг. Это первый опыт использования nginx.
Не пишу скрипты автозапуска и т.п. Предполагается, что они у вас есть.
Главное, что работает.
Возможно кому-то пригодится (даже мне самому, через какое-то время)