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

如何使用Docker部署支持HTTPS访问的OSRM服务(自签名证书配置)

OSRM服务配置自签名HTTPS可行方案

官方osrm-routed组件原生仅支持HTTP协议,要实现HTTPS访问,我们通过新增Nginx反向代理层做SSL证书终止的方案实现,配置步骤如下:

步骤1:生成自签名SSL证书

先在当前工作目录创建ssl文件夹存储证书,执行openssl生成命令:

mkdir -p ./ssl
openssl req -x509 -newkey rsa:4096 -keyout ./ssl/osrm.key -out ./ssl/osrm.crt -sha256 -days 3650 -nodes -subj "/CN=localhost"

参数说明:证书有效期为10年,CN值如果后续需要用域名访问可以替换为你的实际域名,默认值localhost适配本地测试场景。

步骤2:原有OSRM数据预处理步骤不变

你之前的4步数据处理命令不需要任何调整,直接执行即可:

# 下载斯里兰卡地图数据
wget https://download.geofabrik.de/asia/sri-lanka-latest.osm.pbf
# 提取路网数据
docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-extract -p /opt/car.lua /data/sri-lanka-latest.osm.pbf
# 分区处理(适配MLD算法)
docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-partition /data/sri-lanka-latest.osrm
# 自定义预处理
docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-customize /data/sri-lanka-latest.osrm

步骤3:调整OSRM服务启动方式

最后启动osrm-routed的时候不需要对外映射5000端口,仅需要给容器指定固定名称,方便后续Nginx容器内部通信:

docker run -d --name osrm-backend -v "${PWD}:/data" osrm/osrm-backend osrm-routed --algorithm mld /data/sri-lanka-latest.osrm

其中-d参数让服务后台运行,--name osrm-backend给容器设定固定识别名称。

步骤4:编写Nginx反向代理配置

在当前工作目录创建nginx.conf文件,内容如下:

events {}
http {
    server {
        listen 443 ssl;
        server_name localhost;

        # 配置自签名证书路径
        ssl_certificate /etc/nginx/ssl/osrm.crt;
        ssl_certificate_key /etc/nginx/ssl/osrm.key;

        # 安全SSL配置
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers HIGH:!aNULL:!MD5;

        location / {
            # 反向代理到OSRM服务
            proxy_pass http://osrm-backend:5000;
            proxy_set_header Host $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;
        }
    }
}

步骤5:启动Nginx代理服务

执行以下命令启动Nginx容器,关联OSRM容器,挂载证书和配置文件,对外映射443端口:

docker run -d --name osrm-nginx -p 443:443 \
  -v "${PWD}/nginx.conf:/etc/nginx/nginx.conf" \
  -v "${PWD}/ssl:/etc/nginx/ssl" \
  --link osrm-backend:osrm-backend \
  nginx:alpine

验证服务

执行以下命令测试HTTPS接口是否正常(-k参数是跳过自签名证书的信任校验,因为自签名证书没有公共CA背书):

curl -k "https://localhost/route/v1/driving/79.8617,6.9271;79.8884,6.9125?steps=true"

如果能正常返回JSON格式的路径规划结果就是配置成功。

注意事项

  • 自签名证书仅适合内部测试使用,浏览器访问时会提示不安全警告属于正常现象,如果需要对外提供服务请替换为公共CA签发的可信证书
  • 如果需要修改HTTPS端口,只需要修改Nginx启动命令里的端口映射即可,比如-p 8443:443就可以通过8443端口访问

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:09:03