
Estoy trabajando en una migración de nginx + pasajero a nginx + unicornio y he llegado a un punto en el que estoy un poco estancado.
Cuando intento ver mi servidor de prueba, no aparece nada más que una página 404. Estoy seguro de que tengo algo mal en mi configuración de vhost pero simplemente no veo cuál es el problema.
Cualquier ayuda con esto es muy apreciada.
Esta es la versión actual de mi archivo 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;
}
Respuesta1
Lo más probable es que la configuración de tu unicornio no esté configurada correctamente.
Esto sucede en mi servidor cuando nginx se está ejecutando, pero unicorn no. La razón es que nginx intenta pasar la solicitud al socket, pero Unicorn no está allí para recibirla.
De forma predeterminada, Unicorn escucha únicamente en el puerto 8080. Puedes cambiar la configuración de tu unicornio para escuchar en un puerto o enchufe diferente.
Si está utilizando un archivo de configuración de Unicorn ( config/unicorn.rb
), dentro de ese archivo, debería tener algo como (tenga en cuenta que tendrá que cambiar la ruta del socket):
listen File.expand_path("tmp/sockets/unicorn.sock", RAILS_ROOT)
Para fines de depuración, también hago que escuche un puerto.
listen File.expand_path("tmp/sockets/unicorn.sock", RAILS_ROOT)
listen 3000, :tcp_nopush => true
Para iniciar unicorn en su servidor web de producción, debe ejecutar un comando similar al siguiente:
bundle exec unicorn -E production -c config/unicorn.rb
Esto utiliza el archivo de configuración de Unicorn. Verhttp://unicorn.bogomips.org/Unicorn/Configurator.htmlpara ver un archivo de configuración de ejemplo.
Si no utiliza un archivo de configuración de Unicorn, se requiere un cambio de línea de comando en el formato:
-l, --listen ADDRESS
Por ejemplo:
bundle exec unicorn -l tmp/sockets/unicorn.sock
Tenga en cuenta que estoy usando una ruta relativa, porque lo que pwd
uso es el directorio raíz de Rails.