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

OpenResty反向代理HTTPS请求转发报400错误:原因排查

问题分析与解决方案

错误原因

  • 排除自签名证书问题:从curl日志可以明确看到SSL certificate verify ok,说明代理的证书验证已通过,证书不是报错原因。
  • 核心问题:你的OpenResty配置是反向代理模式,但测试时使用了HTTP正向代理的调用方式(curl的-x参数指定HTTP代理),发送了CONNECT请求,而Nginx默认没有处理CONNECT请求的逻辑,因此返回400错误。

解决方案

根据你"按原协议转发所有请求至原URL"的需求,分两种场景调整:

场景1:需要作为HTTP正向代理(支持HTTPS请求的CONNECT隧道)

修改/usr/local/openresty/nginx/conf/sites-available/proxy.conf,添加处理CONNECT请求的配置:

server { 
    error_log  /usr/local/openresty/nginx/logs/error.log debug;
    listen 1080 ssl;
    server_name localhost;
    ssl_certificate /usr/local/openresty/nginx/ssl/localhost.crt;
    ssl_certificate_key /usr/local/openresty/nginx/ssl/localhost.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers off;

    # 处理CONNECT请求,实现HTTPS正向代理隧道
    proxy_connect;
    proxy_connect_allow 443 8443;
    proxy_connect_connect_timeout 10s;
    proxy_connect_read_timeout 10s;
    proxy_connect_send_timeout 10s;

    location / {
        access_by_lua_block { -- 你的业务逻辑
        }

        resolver 8.8.8.8;
        proxy_pass $scheme://$host$request_uri;        
    }
}

说明:proxy_connect是OpenResty内置模块,默认已编译,用于处理HTTP代理的CONNECT请求。

场景2:仅需作为反向代理(无需支持HTTP正向代理)

调整测试命令,去掉-x参数,直接访问代理服务器,由反向代理转发请求:

curl -v -I https://localhost:1080/questions/38371840/ssl-pass-through-in-nginx-reverse-proxy

说明:此时$host会默认取localhost,若需固定转发到指定域名,可修改配置中的$host为目标域名,或通过请求头传递目标地址。

内容的提问来源于stack exchange,提问作者Luixv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:26:34