使用 nginx 反向代理服务 Polymer PWA
Serving Polymer PWA with nginx reverse proxy
我正在尝试使用 nginx 通过 HTTP/2 反向代理为我的 Polymer PWA 提供服务,但我无法使其正常工作。 PWA 在 127.0.0.1:38765 与 prpl-server 分开提供,工作正常。我的 prpl-server 看起来像这样:
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)
我在 /etc/nginx/sites-available/default
的 nginx 配置如下所示:
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
(应用程序 shell),这给了我一个 502 错误。所有其他文件都以 200 状态下载并具有与我直接转到端口 38765 时相同的大小(减去一些压缩),但页面是空白的。
我错过了什么吗?为什么 shell 不能正确下载?所有文件的请求 URL 对于 nginx 反向代理与 prpl-server 完全相同,除了端口号。
截图
当我直接访问 prpl-server 时它起作用了:
当我通过 nginx 反向代理时不起作用:
失败请求的一些信息:
问题与缓冲区大小太小有关,如下所述:https://github.com/Polymer/prpl-server-node/issues/50#issuecomment-333270848。
我加了
proxy_buffer_size 128k;
proxy_buffers 32 32k;
proxy_busy_buffers_size 128k;
在 nginx 配置的 location
部分,现在一切正常。
我正在尝试使用 nginx 通过 HTTP/2 反向代理为我的 Polymer PWA 提供服务,但我无法使其正常工作。 PWA 在 127.0.0.1:38765 与 prpl-server 分开提供,工作正常。我的 prpl-server 看起来像这样:
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)
我在 /etc/nginx/sites-available/default
的 nginx 配置如下所示:
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
(应用程序 shell),这给了我一个 502 错误。所有其他文件都以 200 状态下载并具有与我直接转到端口 38765 时相同的大小(减去一些压缩),但页面是空白的。
我错过了什么吗?为什么 shell 不能正确下载?所有文件的请求 URL 对于 nginx 反向代理与 prpl-server 完全相同,除了端口号。
截图
当我直接访问 prpl-server 时它起作用了:
当我通过 nginx 反向代理时不起作用:
失败请求的一些信息:
问题与缓冲区大小太小有关,如下所述:https://github.com/Polymer/prpl-server-node/issues/50#issuecomment-333270848。
我加了
proxy_buffer_size 128k;
proxy_buffers 32 32k;
proxy_busy_buffers_size 128k;
在 nginx 配置的 location
部分,现在一切正常。