
Estou trabalhando em uma migração do nginx + passageiro para o nginx + unicórnio e cheguei a um ponto em que estou um pouco preso.
Quando tento visualizar meu servidor de teste, não recebo nada além de uma página 404. Tenho certeza de que há algo errado na minha configuração do vhost, mas simplesmente não vejo qual é o problema.
Qualquer ajuda com isso é muito apreciada.
Esta é a versão atual do meu arquivo 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;
}
Responder1
Provavelmente a configuração do seu unicórnio não está configurada corretamente.
Isso acontece no meu servidor quando o nginx está em execução, mas o unicórnio não. A razão é que o nginx tenta passar a solicitação para o soquete, mas o unicórnio não está lá para recebê-la.
Por padrão, o unicórnio escuta apenas na porta 8080. Você pode alterar as configurações do unicórnio para ouvir em uma porta ou soquete diferente.
Se você estiver usando um arquivo de configuração unicórnio ( config/unicorn.rb
), então dentro desse arquivo você deverá ter algo como (observe que você terá que alterar o caminho do soquete):
listen File.expand_path("tmp/sockets/unicorn.sock", RAILS_ROOT)
Para fins de depuração, faço com que ele ouça uma porta também.
listen File.expand_path("tmp/sockets/unicorn.sock", RAILS_ROOT)
listen 3000, :tcp_nopush => true
Para iniciar o unicorn em seu servidor web de produção, um comando semelhante ao seguinte precisa ser executado:
bundle exec unicorn -E production -c config/unicorn.rb
Isso usa o arquivo de configuração do unicórnio. Verhttp://unicorn.bogomips.org/Unicorn/Configurator.htmlpara obter um exemplo de arquivo de configuração.
Se você não usar um arquivo de configuração unicórnio, será necessária uma opção de linha de comando no formato:
-l, --listen ADDRESS
Por exemplo:
bundle exec unicorn -l tmp/sockets/unicorn.sock
Observe que estou usando um caminho relativo, porque o pwd
que uso é o diretório raiz do Rails.