Nginx поднимает 404 при использовании format => 'js' - PullRequest
2 голосов
/ 15 ноября 2009

Я загружаю изображения в свое приложение, используя Ajax и Iframe. В разработке все работает как шарм. Но в производстве Nginx внезапно выдает ошибку 404. Когда я заглядываю в журнал, запрос никогда не попадает в приложение Rails. Так что я думаю, это как-то связано с моей конфигурацией Nginx (может быть, сжатие gzip).

Неудачные запросы отправляются по адресу "/images.js".

Есть идеи, как это решить? Google не мог помочь мне ...

Мой конфиг Nginx:

server {
      listen 80;
      server_name www.myapp.de;
      root /var/www/apps/myapp/current/public;   # <--- be sure to point to 'public'!
      passenger_enabled on;
      rails_env production;

      # set the rails expires headers: http://craigjolicoeur.com/blog/setting-static-asset-expires-headers-with-nginx-and-passenger
         location ~* \.(ico|css|js|gif|jp?g|png)(\?[0-9]+)?$ {
           expires max;
           break;
         }                                                                                     

      gzip  on;
      gzip_http_version 1.0;
      gzip_vary on;
      gzip_comp_level 6;
      gzip_proxied any;
      gzip_types text/plain text/html text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
      # 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;

      # this rewrites all the requests to the maintenance.html
      # page if it exists in the doc root. This is for capistrano?^?^?s
      # disable web task
      if (-f $document_root/system/maintenance.html) {
        rewrite  ^(.*)$  /system/maintenance.html last;
        break;
      }

      # Set the max size for file uploads to 10Mb
      client_max_body_size 10M;
      error_page   500 502 503 504  /500.html;
     location = /500.html {
       root /var/www/apps/myapp/current/public;
     }


    }

Ответы [ 4 ]

1 голос
/ 02 августа 2011

Для этой цели я использую следующие директивы местоположения:

location ~* ^.+\.(jpg|jpeg|gif|png|css|swf|ico|mov|flv|fla|pdf|zip|rar|doc|xls)$
{
    expires 12h;
    add_header  Cache-Control  private;
}
location ~* ^/javascripts.+\.js$
{
    expires 12h;
    add_header  Cache-Control  private;
}
1 голос
/ 23 ноября 2010

Стоит отметить, что любые запросы .json будут перехвачены, если вы используете приведенное выше регулярное выражение. Добавьте $, чтобы избежать этого.

location ~* \.(ico|css|js$|gif|jp?g|png)(\?[0-9]+)?$ {
    expires max;
    break;
}
1 голос
/ 15 ноября 2009

nginx будет обслуживать запрос /images.js от вашего root / var / www / apps / myapp / current / public, так как он соответствует

     location ~* \.(ico|css|js|gif|jp?g|png)(\?[0-9]+)?$ {
       expires max;
       break;
     }                                                                                     

(директива break применяется только к правилам перезаписи afaik, поэтому ее можно удалить)

Если вы хотите подавать /images.js с рельсов, вам нужно включить рельсы для этого места.

0 голосов
/ 24 ноября 2010

Я столкнулся с очень похожей проблемой и поставил format.json вместо format.js - это создало URL с расширением .json, но позволило мне не изменять конфигурацию Nginx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...