You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NGINX启用HTTPS后NextJS/NodeJS API POST请求SSL握手失败求助

解决HTTPS切换后NextJS API POST请求502错误及SSL握手问题

核心问题分析

你的NGINX配置存在两个关键错误:

  1. 针对HTTP上游服务(NextJS运行在http://127.0.0.1:3000)添加了SSL握手配置,导致NGINX错误地尝试和上游建立SSL连接,触发bad key share错误。
  2. API路径的代理规则错误,导致请求路径传递异常,引发上游连接中断。

具体修复步骤

1. 移除上游SSL握手配置

删除所有location块中的proxy_ssl_server_name on;指令——该指令仅适用于上游是HTTPS服务的场景,你的NextJS服务使用HTTP监听,不需要此配置,它会强制NGINX发起SSL握手,导致失败。

2. 修正API代理路径

将location /api/中的proxy_pass改为:

proxy_pass http://127.0.0.1:3000/;

末尾添加/可以确保请求路径正确拼接:原请求https://domain/api/getAllPlates会被代理到http://127.0.0.1:3000/api/getAllPlates,而非错误的http://127.0.0.1:3000api/getAllPlates。

3. 移除API请求的WebSocket升级头

API请求不需要WebSocket协议支持,删除location /api/中的以下两行:

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';

避免不必要的协议升级尝试,减少连接异常概率。

4. 验证NextJS服务可用性

先直接在服务器本地测试NextJS API是否正常响应:

curl -X POST http://127.0.0.1:3000/api/getAllPlates -H "Content-Type: application/json" -d '{}'

如果请求失败,检查NextJS服务日志,排查代码或服务启动问题;如果正常,再重启NGINX测试。


修正后的NGINX配置示例

# nginx config file for Nextjs App
# place in /etc/nginx/sites-available/name_of_config_file
server {
    server_name [x-redacted-x];

    gzip on;
    gzip_proxied any;
    gzip_types application/javascript application/x-javascript text/css text/javascript;
    gzip_comp_level 5;
    gzip_buffers 16 8k;
    gzip_min_length 256;

    location /_next/static/ {
        alias /var/www/drxl-axis/.next/static/;
        expires 365d;
        access_log off;
    }

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        auth_basic "Restricted Content";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }

    location /api/ {
        proxy_pass http://127.0.0.1:3000/;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_connect_timeout 300;
        proxy_send_timeout 300;
        proxy_read_timeout 300;
        send_timeout 300;
        auth_basic off;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/[x-redacted-x]-0001/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/[x-redacted-x]-0001/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

server {
    if ($host = [x-redacted-x]) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    listen 80;
    server_name [x-redacted-x];
    return 404; # managed by Certbot
}

内容的提问来源于stack exchange,提问作者V. S.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 10:14:57