Lazyload в Safari не работает, когда Nginx обратный прокси к node.js - PullRequest
0 голосов
/ 30 апреля 2018

Вот проблема: У меня есть сервер node.js, который находится за прокси Nginx. Nginx настроен для обслуживания статического содержимого и передачи proxy_pass другим в node.js Кроме того, в приложении узла изображения загружаются с помощью решения для отложенной загрузки.

В Chrome, когда я получаю доступ к своему приложению (example.com), все работает как надо. Lazyload работает нормально, а изображения загружаются и обслуживаются nginx.

В Safari мое приложение (example.com) загружается нормально (это означает, что сервер node.js и прокси-сервер nginx работают). Но изображения не загружаются! Он показывает, что запрос от lazyload не отправлен или не получил никакого ответа.

Если я ввожу URI изображений непосредственно в Safari, они загружаются нормально.

Я должен упомянуть, что когда я локально использую сервер node.js (без nginx), нет проблем даже в Safari.

Так что, похоже, существует проблема между lazyload, Nginx, Node.js и Safari, так как в Chrome все в порядке.

Ниже вы найдете мой nginx.conf:

http {
   log_format  main  ‘$remote_addr - $remote_user [$time_local] “$request” ’
                     ‘$status $body_bytes_sent “$http_referer” ’
                     ‘“$http_user_agent” “$http_x_forwarded_for”’;
   access_log  /var/log/nginx/access.log  main;

   sendfile            on;
   tcp_nopush          on;
   tcp_nodelay         on;
   keepalive_timeout   65;
   types_hash_max_size 2048;

   include             /etc/nginx/mime.types;
   default_type        application/octet-stream;

   server {

    server_name  example.com www.example.com;

        access_log /var/log/nginx/example.com/nginx.access.log;
        error_log  /var/log/nginx/example.com/nginx.error.log;

    location /img/ {
       root          /var/nginx/html;
    }

    location / {

        proxy_pass http://127.0.0.1:3000; #nodejs server
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        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;
     }

    error_page 404 /404.html;
            location = /40x.html {
        }

    error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Я только что нашел ответ на свой вопрос сам. Я пишу здесь на случай, если это может быть полезно для других.

Я заметил в консоли Safari, что она блокирует загрузку изображений, поскольку их URI начинаются с http, а не с https (небезопасный контент через https), поэтому они не загружаются. Но Chrome показывает небезопасное содержимое через https, поэтому изображения загружаются. Это просто показывает предупреждение рядом с полем URL.

Таким образом, он не имеет ничего общего с node.js или обратным прокси-сервером nginx:)

0 голосов
/ 30 апреля 2018

Я бы сначала попытался удалить их, если вы также используете X-Forwarded-Proto

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';

Это позволяет вам завершить SSL с прокси-сервером, одновременно говоря http downstream, поэтому вам не нужно обновлять соединение.

...