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

如何通过Nginx实现访问http://ex.com:443时展示自定义页面?

Nginx 443端口非SSL请求自定义错误页配置问题解决

问题根源

  1. 第一个server块失效/报错:listen 443未指定ssl参数时,nginx对该端口的处理逻辑混乱——既不启用SSL,又无法正确处理明文HTTP请求,导致reload时可能出现配置冲突,且错误页规则无法触发。
  2. 第二个server块error_page不生效:当用HTTP协议访问443端口时,SSL握手直接失败,nginx还未进入该server块的请求处理流程,内部的error_page规则根本不会执行。

修正后的配置

http{
    # 专门处理HTTP请求访问443端口的场景
    server {
        listen 443;
        server_name _; # 匹配所有未被精准匹配的请求
        
        return 400 /error.html;
        
        location = /error.html {
            root /app;
            internal;
        }
    }

    server{
        listen 443 ssl;
        server_name ex.ex.or.kr;

        ssl_certificate /etc/nginx/ssl/a.pem;
        ssl_certificate_key /etc/nginx/ssl/b.pem;
        ssl_session_timeout 5m; # 修复原配置的拼写错误:tiemout → timeout
        
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers HIGH:MEDIUM:!SSLv2:!PSK:!SRP:!ADH:!AECDH;
        ssl_prefer_server_ciphers on;
        
        # 处理该server内合法SSL请求中的400错误
        error_page 400 /error.html;
        location = /error.html{
            root /app;
            internal;
        }
        
        location / {
            proxy_set_header Host $http_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;
            proxy_set_header X-NginX-Proxy true;
            
            proxy_pass http://127.0.0.1:80/;
            proxy_redirect off;
        }
    }
}

关键说明

  • 优先匹配非SSL请求:第一个server块用server_name _捕获所有未匹配到ex.ex.or.kr的请求(包括HTTP访问443的情况),直接返回400并跳转至自定义错误页,绕过SSL握手环节。
  • 修复拼写错误:原配置中的ssl_session_tiemout是无效参数,修正为ssl_session_timeout后才能正常reload。
  • SSL握手失败的处理:如果是客户端发起SSL握手但失败(如证书不匹配),第二个server块内的error_page会生效;纯HTTP请求则由第一个server块处理。

验证步骤

  1. 执行nginx -t检查配置语法是否正确。
  2. 执行nginx -s reload重新加载配置。
  3. 访问http://ex.ex.or.kr:443,确认自定义错误页正常显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:33:22