安装文档:https://github.com/linuxserver/docker-chromium?tab=readme-ov-file

为什么要用docker安装浏览器,还是涉及到外网访问内网的问题,在内网的NAS上安装了一些应用,但是没有必要通过FRP代理的方式来访问,每有一个服务启动都需要在FRP中新增一个反向端口代理,之前也用过异地组网,但是异地组网的速度实在太慢,就算使用了自建的异地组网服务还是比不上FRP。有些服务一般来说在排查BUG的时候需要用到,这时候你又是使用外网会很不方便,所以安装一个浏览器。

services:
  chromium:
    image: lscr.io/linuxserver/chromium:latest
    container_name: chromium
    security_opt:
      - seccomp:unconfined #optional
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
      - CHROME_CLI=https://www.linuxserver.io/ #optional
    volumes:
      - /path/to/config:/config
    # network_mode: host
    ports:
      - 3000:3000
      - 3001:3001
    shm_size: "1gb"
    restart: unless-stopped

需要注意的是不能通过host模式来启动,即使启动了也会无法正常的运行。那就只能够绕道而行了,通过 ip addr | grep docker 命令获取到宿主机在docker网段中的IP地址,然后浏览器就通过这个IP访问。

chrome使用

开启启用本地输入法,不然键盘无法输入。这个版本的chrome只有英文,不支持中文,连访问中文网站中文字符也没法正常显示。

使用nginx反向代理

飞牛里面的浏览器是通过nginx反向代理的,只对/chromium/路径。很容易就能够找到飞牛浏览器项目的源地址,你会发现是魔改一个开源项目就是我上面composer中的那个,我一开始还不明白,为什么要修改。现在明白了其中一个原因就是反向代理的原因,因为大多数网站服务都是直接占用整个端口的,没有考虑到这种特定路径的代理。像是这个浏览器项目的/websockify是websocket就是直接请求端口的,如果你用特定路径反向代理了浏览器,它就无法找到正确的服务地址,所以需要也对/websockify进行代理。但是麻烦的是如果服务一多,很难保证不会有重名的情况,这样就会出现问题。所以最好还是项目本身就支持这种代理方式。

server {
        listen        80;
        server_name  localhost;
        location ^~ /chromium/ {
            rewrite ^/chromium/(.*)$ /$1 break;
            
            add_header              'Access-Control-Allow-Origin' '*' always;
            add_header              'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header              'Access-Control-Allow-Headers' 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,Keep-Alive,X-Requested-With,If-Modified-Since';
            add_header              'Access-Control-Allow-Credentials' 'true';
            add_header              'Cross-Origin-Embedder-Policy' 'require-corp';
            add_header              'Cross-Origin-Opener-Policy' 'same-origin';
            add_header              'Cross-Origin-Resource-Policy' 'same-site';
            proxy_pass               http://127.0.0.1:3000;
            proxy_buffering          off;
    #proxy_pass http://127.0.0.1:3000;
    }
    location ^~ /websockify {
            proxy_http_version      1.1;
            proxy_set_header        Host $host;
            proxy_set_header        Upgrade $http_upgrade;
            proxy_set_header        Connection "upgrade";
            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;
            proxy_set_header        Cookie "";
            proxy_read_timeout      3600s;
            proxy_send_timeout      3600s;

            add_header              'Access-Control-Allow-Origin' '*' always;
            add_header              'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header              'Access-Control-Allow-Headers' 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,Keep-Alive,X-Requested-With,If-Modified-Since';
            add_header              'Access-Control-Allow-Credentials' 'true';
            add_header              'Cross-Origin-Embedder-Policy' 'require-corp';
            add_header              'Cross-Origin-Opener-Policy' 'same-origin';
            add_header              'Cross-Origin-Resource-Policy' 'same-site';
            proxy_pass               http://127.0.0.1:3000;
            proxy_buffering          off;
    }
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

目录