Я пытаюсь обслуживать свой 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-серверу напрямую:
Не работает, когда я прохожу через обратный прокси-сервер nginx: