Rails 2 e Ngnix: as páginas https não podem carregar css ou js (mas carregarão gráficos)

0

ADMISSÃO: Eu publiquei essa mesma pergunta no stackoverflow, antes de perceber que é mais adequado ao superusuário, mas depende da resposta: se for um problema na configuração do nginx, é definitivamente superusuário. Se se tornar um problema na minha configuração (ou código) do Rails, então é discutível o stackoverflow.

Estou adicionando algumas páginas https ao meu site de trilhos. Para testá-lo localmente, estou executando meu site em uma instância mongrel_rails (em 3000) e nginx.

Eu consegui colocar minha configuração do nginx no ponto em que posso ir às páginas https e carregar. Exceto, os arquivos javascript e css não conseguem carregar: olhando na guia Rede nas ferramentas da Web do Google Chrome, vejo que ele está tentando carregá-las por meio de uma URL https. Por exemplo, um dos URLs de arquivos que não funcionam é

link

Eu tenho estes configurar (ou pelo menos acho que eu faço) na minha configuração nginx para redirecionar para as versões http dos arquivos estáticos. Isso parece estar funcionando para gráficos, mas não para arquivos css e js.

Se eu clicar sobre isso na guia Rede, levo-me ao URL acima, que redireciona para a versão http. Assim, o redirecionamento parece estar funcionando em algum sentido, mas não quando são carregados por uma página https. Como eu disse, eu pensei que eu tinha isso coberto na segunda diretiva try_files na minha configuração abaixo, mas talvez não.

Alguém pode ver o que estou fazendo errado? obrigado, Max

Aqui está minha configuração nginx - desculpe, é um pouco demorada! Acho que o erro provavelmente está no primeiro bloco de servidor (ssl):

NOTA: os URLs aqui (elearning.dev, cmw-dev.co.uk, etc) são todos apenas nomes de host locais, ou seja, são todos apenas aliases para 127.0.0.1

server {
  listen 443 ssl;
  keepalive_timeout   70;

  ssl_certificate /home/max/work/charanga/elearn_container/elearn/config/nginx/certs/max-local-server.crt;
  ssl_certificate_key /home/max/work/charanga/elearn_container/elearn/config/nginx/certs/max-local-server.key;

  ssl_session_cache shared:SSL:10m;
  ssl_session_timeout 10m;
  ssl_protocols SSLv3 TLSv1;
  ssl_ciphers RC4:HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers on;

  server_name elearning.dev cmw-dev.co.uk cmw-dev.com cmw-nginx.co.uk cmw-local.co.uk;

  root /home/max/work/charanga/elearn_container/elearn;

  # ensure that we serve css, js, other statics when requested
  # as SSL, but if the files don't exist (i.e. any non /basket controller)
  # then redirect to the non-https version
  location / {
    try_files $uri @non-ssl-redirect;
  }

  # securely serve everything under /basket (/basket/checkout etc)
  # we need general too, because of the email/username checking
  location ~ ^/(basket|general|cmw/account/check_username_availability) {
    # make sure cached copies are revalidated once they're stale
    add_header Cache-Control  "public, must-revalidate, proxy-revalidate";

    # this serves Rails static files that exist without running
    # other rewrite tests
    try_files $uri @rails-ssl;
    expires 1h;
  }

  location @non-ssl-redirect {
    return 301 http://$host$request_uri;
  }

  location @rails-ssl {

    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;

    proxy_read_timeout 180; 

    proxy_next_upstream off;
    proxy_pass http://127.0.0.1:3000;
    expires 0d;
  }

}

#upstream elrs {
#  server 127.0.0.1:3000;
#}

server {
  listen       80;
  server_name elearning.dev cmw-dev.co.uk cmw-dev.com cmw-nginx.co.uk cmw-local.co.uk;

  root /home/max/work/charanga/elearn_container/elearn;

  access_log /home/max/work/charanga/elearn_container/elearn/log/access.log;
  error_log  /home/max/work/charanga/elearn_container/elearn/log/error.log debug;
  client_max_body_size  50M;
  index index.html index.htm;

  # gzip html, css & javascript, but don't gzip javascript for pre-SP2 MSIE6 (i.e. those *without* SV1 in their user-agent string)
  gzip  on;   
  gzip_http_version 1.1;
  gzip_vary on;
  gzip_comp_level 6;
  gzip_proxied any;
  gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; #text/html 

  # make sure gzip does not lose large gzipped js or css files
  # see http://blog.leetsoft.com/2007/7/25/nginx-gzip-ssl
  gzip_buffers 16 8k;

  # Disable gzip for certain browsers.
  #gzip_disable "MSIE [1-6].(?!.*SV1)";
  gzip_disable "MSIE [1-6]";

  # blank gif like it's 1995
  location = /images/blank.gif {
    empty_gif;
  }

  # don't serve files beginning with dots
  location ~ /\. { access_log off; log_not_found off; deny all; }

  # we don't care if these are missing
  location = /robots.txt   { log_not_found off; }
  location = /favicon.ico   { log_not_found off; } 
  location ~ affiliate.xml { log_not_found off; }  
  location ~ copyright.xml { log_not_found off; }  

  # convert urls with multiple slashes to a single /
  if ($request ~ /+ ) {
    rewrite ^(/)+(.*) /$2 break;
  }

  # X-Accel-Redirect
  # Don't tie up mongrels with serving the lesson zips or exes, let Nginx do it instead
  location /zips {
   internal;
   root /var/www/apps/e_learning_resource/shared/assets;
  }

  location /tmp {
   internal;
   root /;
  }

  location /mnt{
   root /;
  }

  # resource library thumbnails should be served as usual
  location ~ ^/resource_library/.*/*thumbnail.jpg$ {
    if (!-f $request_filename) {
      rewrite ^(.*)$ /images/no-thumb.png
      break;
    }
    expires 1m;
  } 

    # don't make Rails generate the dynamic routes to the dcr and swf, we'll do it here
    location ~ "lesson viewer.dcr" {
      rewrite ^(.*)$ "/assets/players/lesson viewer.dcr" break;
    }

    # we need this rule so we don't serve the older lessonviewer when the rule below is matched
    location = /assets/players/virgin_lesson_viewer/_cha5513/lessonViewer.swf {
      rewrite ^(.*)$ /assets/players/virgin_lesson_viewer/_cha5513/lessonViewer.swf break;
    }

    location ~ v6lessonViewer.swf {
      rewrite ^(.*)$ /assets/players/v6lessonViewer.swf break;
    }

    location ~ lessonViewer.swf {
      rewrite ^(.*)$ /assets/players/lessonViewer.swf break;
    }

    location ~ lgn111.dat {
      empty_gif;
    } 

  # try to get autocomplete school names from memcache first, then
  # fallback to rails when we can't
  location /schools/autocomplete { 
    set $memcached_key $uri?q=$arg_q;
    memcached_pass     127.0.0.1:11211;
    default_type       text/html;

    error_page         404 =200 @rails; # 404 not really! Hand off to rails
  }  

  location / {

    # make sure cached copies are revalidated once they're stale
    add_header Cache-Control  "public, must-revalidate, proxy-revalidate";

    # this serves Rails static files that exist without running other rewrite tests
    try_files $uri @rails;

    expires 1h;
  }

  location @rails {

    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;

    proxy_read_timeout 180; 

    proxy_next_upstream off;
    proxy_pass http://127.0.0.1:3000;
    expires 0d;
  }
}
    
por Max Williams 11.11.2013 / 16:44

0 respostas