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

如何在同一域名下通过SSL同时运行网站与API?

解决方案:拆分Nginx配置为两个独立Server块

你的问题核心在于当前把所有443端口的请求都代理到了API服务,导致静态网站的请求被拦截。要同时运行静态网站和API,只需要给Nginx配置两个独立的server块:一个负责443端口的静态网站,另一个负责8433端口的API代理,两者共享同一套SSL证书即可。

完整的Nginx配置示例

# 1. 处理443端口的静态网站(https://nepherius.xyz)
server {
    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;

    server_name nepherius.xyz www.nepherius.xyz;

    location / {
        # 优先返回静态文件,找不到则返回404
        try_files $uri $uri/ =404;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/nepherius.xyz/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/nepherius.xyz/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
}

# 2. 处理8433端口的API(https://nepherius.xyz:8433)
server {
    server_name nepherius.xyz www.nepherius.xyz;

    location / {
        # 代理到你的API后端服务(注意:这里的端口要和API实际运行端口一致,不能和Nginx监听的8433冲突!)
        proxy_pass http://localhost:8080; # 假设API跑在8080端口,根据实际情况修改
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

    listen 8433 ssl;
    # 复用同一套SSL证书(Let's Encrypt证书绑定域名,所有端口通用)
    ssl_certificate /etc/letsencrypt/live/nepherius.xyz/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/nepherius.xyz/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

# 3. 保留Certbot生成的80端口HTTP重定向配置
server {
    if ($host = nepherius.xyz) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    listen 80 default_server;
    server_name nepherius.xyz www.nepherius.xyz;
    return 404; # managed by Certbot
}

server {
    if ($host = www.nepherius.xyz) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    listen 80;
    server_name www.nepherius.xyz;
    return 404; # managed by Certbot
}

关键注意事项

  • 端口冲突排查:确保你的API后端服务运行的端口(比如示例中的8080)和Nginx监听的8433端口不重复。如果之前API是跑在8433,需要修改API的监听端口,否则会出现端口占用错误。
  • SSL证书复用:Let's Encrypt颁发的证书是绑定域名而非端口的,所以8433端口可以直接复用同一套证书,不需要重新申请。
  • 配置生效步骤:修改配置后,先运行nginx -t验证配置是否合法,再执行systemctl reload nginx让配置生效。

这样配置后,访问https://nepherius.xyz会直接加载/var/www/html下的静态网站,访问https://nepherius.xyz:8433会被代理到你的API服务,两者都能正常使用SSL加密。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:46:06