如何使用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
相关产品推荐
相关产品推荐

