常见服务器反向代理配置参考
本页提供 Fast-Https 的站点配置模板。已有 Vue 构建产物时,直接发布静态文件。已有运行中的后端服务时,用反向代理把请求转发到它的监听地址(上游)。选与你的场景对应的一节即可。
| 目标 | 对应示例 | Fast-Https 负责 |
|---|---|---|
| 发布静态文件 | Vue | 读取并返回构建产物 |
| 转发 HTTP 接口 | Flask | 把请求转发到上游服务 |
| 通过 HTTPS 访问后端 | GitLab、Jenkins | 在代理端处理 HTTPS,再转发给 HTTP 上游 |
| 从 HTTP 首页跳转到 HTTPS 入口 | Jira、SonarQube | 80 端口跳转,443 端口代理 |
1 把配置放到正确的位置
Fast-Https v1.5.0 的压缩包在 config/fast-https.json 中用 "include": ["./conf.d"] 加载 config/conf.d/ 下的站点。保留已有配置,按示例给出的文件名创建文件。每个文件放一个 JSON 对象。 使用主配置集中管理站点时,则将每个对象单独添加到 http.server 数组。选一种放置方式即可。
示例中的 *.example.com 是占位域名。改成指向 Fast-Https 主机的实际域名,并确保对应端口可用。127.0.0.1 表示上游与 Fast-Https 在同一台机器上。上游在另一台机器时,把 proxy_pass 换成从 Fast-Https 主机可以访问的地址和端口。HTTPS 示例还要将证书与私钥放到 config/cert/,并更新两处路径。关于证书,参见 配置网站通过 HTTPS 访问。
2 发布 Vue 静态站点
将构建生成的 index.html 和资源文件放在同一个发布目录。将下面的内容保存为 config/conf.d/club.example.com.json,把 root 改为发布目录的实际路径。配置生效后,访问对应的 HTTP 域名应显示 Vue 首页。
{
"listen": 80,
"server_name": "club.example.com",
"location": [
{
"url": "/",
"type": "local",
"root": "/var/www/club.example.com",
"index": ["index.html", "index.htm"]
}
]
}
如果应用需要在刷新子路由时回退到首页,参见 配置发布单页面静态站点。
3 反向代理 Flask 接口
先从 Fast-Https 所在机器访问 Flask 的一个已知接口,确认上游可以响应。将下面的内容保存为 config/conf.d/api.example.com.json。配置生效后,用代理域名访问同一个接口路径,核对状态码和响应内容。
{
"listen": 80,
"server_name": "api.example.com",
"location": [
{
"url": "/",
"type": "proxy",
"proxy_pass": "http://127.0.0.1:5001"
}
]
}
4 通过 HTTPS 访问 GitLab 或 Jenkins
以下模板以已经提供 HTTP 服务的上游为前提。对外访问的域名和协议需要与应用设置的公开地址对应。按需参考 GitLab 的外部 TLS 终止配置 或 Jenkins 的反向代理说明。
GitLab
保存为 config/conf.d/gitlab.example.com.json。该配置会在发给 GitLab 的请求中设置 Connection: keep-alive。
{
"listen": "443 ssl",
"server_name": "gitlab.example.com",
"ssl_certificate": "./cert/gitlab.example.com.pem",
"ssl_certificate_key": "./cert/gitlab.example.com-key.pem",
"location": [
{
"url": "/",
"type": "proxy",
"proxy_pass": "http://127.0.0.1:9980",
"proxy_set_header": [
{
"HeaderKey": "Connection",
"HeaderValue": "keep-alive"
}
]
}
]
}
Jenkins
保存为 config/conf.d/jenkins.example.com.json。
{
"listen": "443 ssl",
"server_name": "jenkins.example.com",
"ssl_certificate": "./cert/jenkins.example.com.pem",
"ssl_certificate_key": "./cert/jenkins.example.com-key.pem",
"location": [
{
"url": "/",
"type": "proxy",
"proxy_pass": "http://127.0.0.1:9780"
}
]
}
5 为 Jira 或 SonarQube 设置 HTTPS 入口
每个服务使用两个文件。HTTP 站点把访问导向 HTTPS 首页,HTTPS 站点把请求转发到上游。下列 rewrite 使用固定目标地址,适合首页入口。如果需要保留子路径和查询参数,先用真实访问路径验证所选的重定向规则。
Jira
将 HTTP 站点保存为 config/conf.d/jira-http.json。
{
"listen": 80,
"server_name": "jira.example.com",
"location": [
{
"url": "/",
"type": "rewrite",
"rewrite": "https://jira.example.com/"
}
]
}
将 HTTPS 站点保存为 config/conf.d/jira-https.json。
{
"listen": "443 ssl",
"server_name": "jira.example.com",
"ssl_certificate": "./cert/jira.example.com.pem",
"ssl_certificate_key": "./cert/jira.example.com-key.pem",
"location": [
{
"url": "/",
"type": "proxy",
"proxy_pass": "http://127.0.0.1:9880"
}
]
}
SonarQube
将 HTTP 站点保存为 config/conf.d/sonarqube-http.json。
{
"listen": 80,
"server_name": "sonarqube.example.com",
"location": [
{
"url": "/",
"type": "rewrite",
"rewrite": "https://sonarqube.example.com/"
}
]
}
将 HTTPS 站点保存为 config/conf.d/sonarqube-https.json。
{
"listen": "443 ssl",
"server_name": "sonarqube.example.com",
"ssl_certificate": "./cert/sonarqube.example.com.pem",
"ssl_certificate_key": "./cert/sonarqube.example.com-key.pem",
"location": [
{
"url": "/",
"type": "proxy",
"proxy_pass": "http://127.0.0.1:9000"
}
]
}
6 应用配置并检查
保存配置文件后,Fast-Https 会在下次启动时读取配置。服务已在运行时,在 Linux 的 Fast-Https 解压目录执行以下命令重新加载配置。
./fast-https reload
静态站点检查首页与资源是否加载。反代站点使用已知能访问的路径,对比直连上游和经过代理的响应。HTTPS 站点还要确认浏览器信任站点证书。如果配置了 HTTP 入口,访问 HTTP 首页,确认地址栏显示 rewrite 中配置的 HTTPS 地址。