nginx代理如何配置和如何踩到坑篇

一、需求场景

在 web 页面渲染并操作真机。

二、研发过程

通过websocket获取到H.264视频流数据后,需通过浏览器提供的VideoDecoder方法对其进行解码然后渲染在canvas上操作真机(也就是操作画布)。

三、注意事项

VideoDecoder API(属于 WebCodecs API)仅在 HTTPS 协议或本地开发环境。

四、本地nginx代理,配置自签证书,实现本地https协议访问

1、配置如下:首先在我的nginx.bat和nginx.exe同级别下,有一个conf文件夹

2、conf文件夹下有nginx.conf配置文件,此配置文件中未写主要代理地址,而是在此文件中,将需要加载的.conf内容指向了同级别下的vhost中的所有的.conf文件

conf 复制代码
worker_processes 1;
worker_rlimit_nofile 65535;
pid logs/nginx.pid;

events {
    worker_connections 1024;
}

http {
    include       mime.types;
    include       vhost/*.conf;  # 包含所有vhost下的配置文件
    
    # WebSocket支持
    map $http_upgrade $connection_upgrade {
        default upgrade;
        '' close;
    }

    default_type  application/octet-stream;
    
    # 其他原有配置保持不变...
}

3、配置解释:

include 指令

markdown 复制代码
-   用于将外部文件的内容动态加载到当前 Nginx 配置中,类似于"合并"文件内容。
-   目的是让配置更清晰、模块化,避免主配置文件(如 `nginx.conf`)过于臃肿。

vhost/*.conf 路径

markdown 复制代码
-   `vhost/` 是目录名(通常存放虚拟主机配置)。
-   `*.conf` 表示匹配该目录下所有以 `.conf` 结尾的文件。
-   例如:`vhost/example.com.conf`、`vhost/blog.conf` 等文件都会被加载。

4、vhost下的自定义名称.conf文件,https-443.conf

配置文件的内容:

conf 复制代码
server {
    listen 443 ssl; # https协议监听443端口
    server_name localhost; # 这里是代理后的访问地址

    # SSL证书配置(请确认路径正确),配置的自签证书
    ssl_certificate D:/nginx-1.16.1/conf/cert/6107996__eversaas.cn.pem;
    ssl_certificate_key D:/nginx-1.16.1/conf/cert/6107996__eversaas.cn.key;
    
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    location / {
        proxy_pass http://localhost:8080; #这是本地前端代码起的服务地址,表示访问https://localhost:443代理到此地址展示前端页面
        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 https;
    }

    location /ws {
        proxy_pass http://192.168.111.222:5000; # 这里表示将/ws的开头的请求都代理到此地址
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto https;
    }
    location /pcap {
        proxy_pass http://192.168.66.99:5500; # 这里表示将/pcap的开头的请求都代理到此地址
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto https;
    }
    location /action {
        proxy_pass http://192.168.88.22:5000; # 这里表示将/action的开头的请求都代理到此地址
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto https;
    }
}

5、配置完成之后保存,然后打开nginx.bat,选择对应序号重启nginx。

此时nginx进程已经跑起来了,不出意外访问 https://localhsot (这里默认443端口),会直接代理出来你的前端页面。

五、我踩的坑来了,前提是我在之前配置过这个nginx.conf,启动过nginx进程,本次修改了ws代理地址

我访问https://localshot 这里可以代理出来我的前端页面,但是配置的nginx转发未生效,真机页面无法渲染,/pcap和/action都没有数据。

此时在nginx.exe下,文件地址栏输入powershell

1.执行:tasklist /fi "imagename eq nginx.exe" 查看我的nginx进程

发现除了我新启动的两个进程外还有两个进程,那么我先尝试关闭所有进程。

2.执行:taskkill /f /im nginx.exe 关闭所有nginx进程

此时发现有两个权限不足导致未能关闭的进程。

3.右击电脑左下角windows图标, 打开Power Shell(管理员)(A),再次关闭所有进程

可以看到之前的两个因为权限不足未关闭的进程被关闭了,此时我访问https://localshsot 直接访问不出来了,发现问题所在了吗?

其实我的代理一直走的是我之前在Power Shell(管理员)(A)中启动后一直未关闭的nginx进程,而非我修改nginx.conf配置之后重启的nginx进程,由于使用的还是之前的nginx进程,我的配置文件又改了且没重启nginx,所以代理肯定不能正确转发。

此时再打开nginx.bat,选择对应序号启动nginx,此时使用的才是新启动的nginx进程,真机正确展示。

总结:不要在两个面板中(例如Power Shell(管理员)(A)和Power Shell(l))用同一个配置文件启动nginx进程,容易混淆具体使用的是那个进程,使用完之后记得关闭进程。

相关推荐
追梦人物10 分钟前
Uniswap 手续费和协议费机制剖析
前端·后端·区块链
拾光拾趣录1 小时前
基础 | 🔥6种声明方式全解⚠️
前端·面试
朱程3 小时前
AI 编程时代手工匠人代码打造 React 项目实战(四):使用路由参数 & mock 接口数据
前端
PineappleCoder3 小时前
深入浅出React状态提升:告别组件间的"鸡同鸭讲"!
前端·react.js
wycode3 小时前
Vue2源码笔记(1)编译时-模板代码如何生效之生成AST树
前端·vue.js
程序员嘉逸3 小时前
LESS 预处理器
前端
橡皮擦1993 小时前
PanJiaChen /vue-element-admin 多标签页TagsView方案总结
前端
程序员嘉逸3 小时前
SASS/SCSS 预处理器
前端
咕噜分发企业签名APP加固彭于晏3 小时前
腾讯云eo激活码领取
前端·面试
子林super3 小时前
MySQL 复制延迟的排查思路
前端