求NGINX配置示例:将HTTPS请求代理至PostgREST API(HTTP)
解决PostgREST的Nginx HTTPS反向代理配置问题
你当前的Nginx配置是把HTTPS请求重定向到HTTP,这和反向代理的需求不符。要实现将HTTPS请求转成HTTP转发给PostgREST,需要用Nginx的反向代理模块来处理请求,而非重定向。
以下是完整的可直接适配的配置示例,你只需根据自身环境替换对应参数:
server { listen 443 ssl http2; server_name your-domain.com; # 替换为你的实际域名 # SSL证书相关配置,替换成你自己的证书和密钥路径 ssl_certificate /etc/nginx/ssl/your-domain.crt; ssl_certificate_key /etc/nginx/ssl/your-domain.key; # 可选的SSL安全优化配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; # 核心反向代理配置,处理/api路径下的所有请求 location /api/ { # 转发到PostgREST的HTTP服务,替换为你的PostgREST地址和端口(默认是localhost:3000) proxy_pass http://localhost:3000/; # 传递必要的请求头,确保PostgREST能正确处理请求 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 $scheme; # 告诉PostgREST原始请求是HTTPS # 确保响应的JSON格式正确返回 proxy_pass_header Content-Type; proxy_buffering off; # 禁用缓冲,适合实时返回JSON数据 } }
关键配置说明:
proxy_pass:反向代理的核心指令,将/api/路径下的所有请求转发到PostgREST的HTTP服务。注意末尾的斜杠,它会把/api/xxx映射为http://localhost:3000/xxx,避免路径错误。- 请求头设置:
X-Forwarded-Proto会告知PostgREST原始请求为HTTPS,若你用PostgREST生成链接,它会生成HTTPS格式的URL;X-Real-IP和X-Forwarded-For让PostgREST能获取真实的客户端IP。 - SSL配置:必须正确配置
ssl_certificate和ssl_certificate_key,否则Nginx无法启动HTTPS服务。若无SSL证书,可通过Let's Encrypt免费生成。
测试步骤:
- 修改配置后,执行
nginx -t检查配置语法是否正确 - 检查通过后,执行
systemctl reload nginx(或service nginx reload)重启Nginx - 用HTTPS访问
https://your-domain.com/api/your-table-name,即可获取PostgREST返回的JSON数据
内容的提问来源于stack exchange,提问作者Marcio Lino
相关产品推荐
相关产品推荐

