Обслуживание Polymer PWA с обратным прокси-сервером nginx

Я пытаюсь обслуживать свой Polymer PWA с помощью обратного прокси-сервера HTTP/2 с помощью nginx, но не могу заставить его работать должным образом. PWA обслуживается отдельно от prpl-server по адресу 127.0.0.1:38765, который работает отлично. Мой prpl-сервер выглядит так:

const express = require('express')
const prpl = require('prpl-server')
const config = require('./build/polymer.json')

const app = express()
const port = 38765

app.get('*', prpl.makeHandler('./build/', config))

app.listen(port)

и моя конфигурация nginx в /etc/nginx/sites-available/default выглядит так:

upstream app {
    server 127.0.0.1:38765;
    keepalive 64;
}

server {
    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    server_name app;  # or full domain? tried both, doesn't work

    location / {
        proxy_pass              http://app$request_uri;
        proxy_redirect          off;
        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 $scheme;
        proxy_set_header        X-Forwarded-Proto-Version $http2;
        proxy_set_header        Host $http_host;
        proxy_set_header        X-NginX-Proxy true;
        proxy_set_header        Connection "";

        # Cache Controls
        # This section sets response expiration which prevents 304 not modified
        expires                 0;
        add_header              Pragma public;
        add_header              Cache-Control "public";
        access_log              off;

        # Security Patches
        # This section are security patches in case the client overrides
        # these values, the server re-enables it and enforce its rules
        add_header X-XSS-Protection         "1; mode=block";
        add_header X-Frame-Options          "deny";
        add_header X-Content-Type-Options   "nosniff";
    }

    ssl on;
    ssl_session_cache shared:SSL:5m;
    ssl_session_timeout 1h;
    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;
}

Когда я захожу на страницу, кажется, что все зависимости загружаются через h2, кроме ma-app.html (оболочка приложения), что дает мне ошибку 502. Все остальные файлы загружаются со статусом 200 и имеют тот же размер (за вычетом некоторого сжатия), что и при прямом переходе на порт 38765, но страница пуста.

Я что-то упускаю? Почему оболочка не загружается должным образом? Все URL-адреса запроса файлов для обратного прокси-сервера nginx точно такие же, как и для prpl-сервера, за исключением номера порта.


Скриншоты

Это работает, когда я обращаюсь к prpl-серверу напрямую: Работает при прямом доступе к prpl-серверу

Не работает, когда я прохожу через обратный прокси-сервер nginx: Не работает, когда я иду через обратный прокси-сервер nginx

Немного информации о неудачном запросе: Некоторая информация о неудачном запросе


person yberg    schedule 07.02.2018    source источник


Ответы (1)


Проблема была как-то связана со слишком маленьким размером буфера, как упоминалось здесь: https://github.com/Polymer/prpl-server-node/issues/50#issuecomment-333270848.

я добавил

proxy_buffer_size          128k;
proxy_buffers              32 32k;
proxy_busy_buffers_size    128k;

в разделе location конфига nginx и теперь все работает.

person yberg    schedule 12.02.2018
comment
У меня такая же проблема, но это не сработало для меня. Есть ли что-нибудь еще, что вам нужно было сделать? - person Jayaram; 14.03.2021