如何用 VSCODE_PROXY_URI 让 code-server 的 Ports 面板链接指向自己的代理域名?
【免费下载链接】code-serverVS Code in the browser项目地址: https://gitcode.com/GitHub_Trending/co/code-server
在 code-server 中运行 Web 服务时,浏览器里检测到的端口(3000、8080 等)会在 Ports 面板中生成链接,默认指向 code-server 内置的子路径代理(/proxy/<port>)。如果你的部署里每个端口已经有独立的子域名(例如3000.your-domain.tld),希望 Ports 面板直接给出https://3000.your-domain.tld这样的链接,只需要在 code-server 进程中设置VSCODE_PROXY_URI环境变量。设置后,模板中的{{port}}会被实际应用监听的端口号替换,例如 docs/guide.md 给出的示例:
VSCODE_PROXY_URI=https://{{port}}.kyle.dev当 code-server 检测到同机 3000 端口有应用运行时,Ports 面板会创建指向https://3000.kyle.dev的链接,而不是内置的子路径代理。
前提:你自己的代理域名要能工作
按 Setup Guide 中 “Using a subdomain” 一节的说明,子域名方式需要你准备好:
- DNS 记录:为每个要访问的端口配置 A 记录(如
3000.<domain>、8080.<domain>),或者如果域名服务商支持通配符 DNS,直接配置*.<domain>; - TLS 证书:为这些子域名配置证书,可以是
*.<domain>的通配证书,也可以是每个端口单独一张; - 负责把
*.your-domain.tld流量转发到对应端口的代理(如 Caddy/NGINX 反向代理),这部分属于你自己的基础设施,code-server 只负责生成链接。
code-server 本身不需要为这个功能添加启动参数,它是纯环境变量配置。
设置 VSCODE_PROXY_URI
让 code-server 进程启动时带上这个环境变量即可,替换方式由你控制环境变量的一贯做法决定,例如在启动命令前设置:
VSCODE_PROXY_URI='https://{{port}}.your-domain.tld' code-server或者在管理该进程的环境(systemd 服务的Environment=、容器编排的 env 配置等)中写入同一行,然后重启 code-server。两点注意:
{{port}}是模板占位符,必须原样保留在值里,由 code-server 在转发端口时替换为实际端口号,不要自己填死某个端口;- 如果当前实例后面还有反向代理,子域名方式依赖 Host 头(
--proxy-domain机制同样如此),确保你的反向代理会转发该信息。
验证是否生效
启动日志。code-server 启动时会把配置打进日志,源码 src/node/main.ts 中的逻辑是:
Using proxy URI in PORTS tab: https://{{port}}.your-domain.tld看到这条日志说明环境变量已被进程读取。
终端内检查。
VSCODE_PROXY_URI同时注入到 code-server 的集成终端环境(见 patches/proxy-uri.diff),打开集成终端执行:printenv VSCODE_PROXY_URI输出应为你设置的值;项目 e2e 测试 test/e2e/terminal.test.ts 用的正是
printenv VSCODE_PROXY_URI做校验。Ports 面板链接。启动一个监听固定端口的应用(文档示例用
python3 -m http.server),确认 Ports 面板中该行显示的链接是https://<端口>.your-domain.tld,并且浏览器访问该地址能到达你的代理再到应用,而不是.../proxy/<port>形式的路径。
可选分支:用相对路径而非域名
如果你没有独立域名,只是想换个链接形式,相对路径同样被支持:
VSCODE_PROXY_URI='./proxy/{{port}}'这样生成的链接会相对于当前 code-server 的地址解析。此写法来自 docs/guide.md “Using your own proxy” 一节的说明。
限制与边界
VSCODE_PROXY_URI改变的是 Ports 面板和扩展(asExternalUri等打开本地端口链接的行为)所生成的 URL 模板,应用仍然运行在 code-server 所在机器上;它不负责把流量路由到你的域名,路由由你自己的 DNS 与代理完成。- 内置子路径代理(
/proxy/<port>)依然可用,设置该变量不会关闭它;不设置时默认模板就是<code-server 根路径>/proxy/{{port}}/(见 patches/proxy-uri.diff 中proxyEndpointTemplate的默认值)。 - 应用自身的路径问题与链接指向无关:如果你的应用依赖绝对路径,参考 Setup Guide 中关于
/absproxy与相对 URL 的小节处理应用侧配置。
【免费下载链接】code-serverVS Code in the browser项目地址: https://gitcode.com/GitHub_Trending/co/code-server
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考