当前位置: 首页 > news >正文

非本地地址调用摄像头需要https

  • 现象:有个web项目,其中有调用摄像头。我部署在本地开发环境,使用 http://127.0.0.1:8000 访问项目时,可以正常调用摄像头。但在部署到远程服务器后,通过Nginx反向代理的http地址访问时,却提示:无权限访问摄像头:
    在这里插入图片描述

  • 原因:现代浏览器出于安全考虑,仅允许通过HTTPS使用摄像头功能。如果使用HTTP,除非地址是localhost,浏览器对此有特殊待遇,允许它们绕过一些安全限制。下图来自通义千问:
    在这里插入图片描述

  • 解决:把项目部署为通过https访问。为简单起见,我直接配置Nginx在HTTPS地址监听,转发至内网的http服务。见下面的配置,其中配置SSL证书的部分我只确定ssl_certificate的两行是必需的:

server {listen portA ssl;listen [::]:portA ssl;server_name localhost;ssl_certificate "/etc/pki/*********.pem";ssl_certificate_key "/etc/pki/*********.key";ssl_session_cache shared:SSL:1m;ssl_session_timeout 10m;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;ssl_prefer_server_ciphers on;# 添加CSP头解决混合内容问题add_header Content-Security-Policy "upgrade-insecure-requests";# 其他安全头add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;add_header X-Frame-Options SAMEORIGIN;add_header X-Content-Type-Options nosniff;location / {proxy_pass http://127.0.0.1:****/;proxy_set_header Host $http_host; #后台可以获取到完整的ip+端口号proxy_set_header X-Real-IP $remote_addr; #后台可以获取到用户访问的真实ip地址proxy_buffering off;client_max_body_size 50m;}}

这样通过https://公网IP:portA, 就可以访问服务且正常调用摄像头了。

相关文章:

  • Coze扣子 - AI生成数字人口播视频
  • 多环境开发配置,Spring boot
  • 【leetcode】101. 对称二叉树
  • Mysql 忘记密码后如何修改
  • 长春光博会 | 麒麟信安:构建工业数字化安全基座,赋能智能制造转型升级
  • 零基础学前端-传统前端开发(第四期-JS基础-运算)
  • sqlserver存储过程中入参使用JSON
  • redis穿透、击穿、雪崩
  • linux alignment fault对齐造成设备挂死问题定位梳理
  • 代码训练LeetCode(34)文本左右对齐
  • 行为模式-迭代器模式
  • 基于sample_aiisp再创建一路 h264编码流,和jpg的编码流
  • vue中的三种插槽方式
  • ABP vNext + OpenIddict:自定义 OAuth2/OpenID Connect 认证策略
  • 如何从 Windows 11 或 10 远程访问 Ubuntu 24.04 或 22.04 桌面
  • 使用 C++ 和 OpenCV 构建智能停车场视觉管理系统
  • Linux NFS服务器配置
  • JavaScript数组方法总结
  • 每日Prompt:Steve Winter风格插画
  • PyTorch框架-自动微分模块
  • 苹果给第三方网站做图标/百度信息流广告平台
  • 高端品牌网站建设有哪些/百度图片搜索网页版
  • 湖北网站建设公司/电商平台运营方案思路
  • 做读书笔记的网站/武汉大学人民医院精神科
  • 网站的建设与设计论文/成都最新数据消息
  • iis建设网站教程/发稿服务