Apache Guacamole + Nginx 代理管理器 = 语法错误

Apache Guacamole + Nginx 代理管理器 = 语法错误

我在 Docker 中运行 Apache Guacamole,并且我想使用 Nginx 代理管理器使其可公开访问。

这是 Guacamole 的 Docker Stack:

version: "3"

volumes:
  mysql:
    driver: local

services:
  guacamole:
    image: guacamole/guacamole:latest
    container_name: guacamole_server
    restart: always
    ports:
      - 8080:8080
    depends_on:
      - mysql
      - guacd
    environment:
      - MYSQL_HOSTNAME=mysql
      - MYSQL_PORT=3306
      - MYSQL_DATABASE=guacamole
      - MYSQL_USER=guacamole
      - MYSQL_PASSWORD=secret
      - GUACD_HOSTNAME=guacd
      - GUACD_PORT=4822

  mysql:
    image: mysql:latest
    container_name: guacamole_mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=guacamole
      - MYSQL_USER=guacamole
      - MYSQL_PASSWORD=secret
      - MYSQL_DATABASE=guacamole
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-u", "root", "--password=guacamole"]
      interval: 10s
      timeout: 5s
      retries: 5
    volumes:
      - mysql:/var/lib/mysql

  guacd:
    image: guacamole/guacd:latest
    container_name: guacamole_guacd
    restart: always

当我通过本地 IP 的 8080 端口访问 Guacamole 时,一切都运行正常。

然后我向 Nginx 代理管理器添加了一个新的代理主机,其配置如下:

细节:

  • 域名:(某物)
  • 方案:http
  • IP:192.168.123.123
  • 端口:8080
  • 缓存资产:已禁用
  • 阻止常见漏洞:已启用
  • Websockets 支持:已启用
  • 访问列表:可公开访问

SSL:

  • 强制 SSL:已启用
  • HSTS 已启用:已启用
  • HTTP/2 支持:已启用
  • HSTS 子域名:已禁用

自定义位置:

  • (没有任何)

先进的:

  • (没有什么)

到目前为止它仍然运行良好。

如果我现在更改配置:(从https://github.com/jc21/nginx-proxy-manager/issues/104

自定义位置:

  • 地点: /
  • 方案:http
  • 转发主机名:192.168.123.123/guacamole/
  • 端口:8080
  • 高级:(无)

然后我得到一个空白页,但是所有的源代码都已加载并且所有请求的状态都是 200。在浏览器的控制台中我看到:

Uncaught SyntaxError: expected expression, got '<'

当我不使用“自定义位置”配置而是使用自己的高级配置时,也会发生同样的事情:

location / {
    proxy_pass $forward_scheme://$server:$port/guacamole/;
}

我也尝试了不同的配置,但总是出现该错误。在网上搜索了很久也没找到任何提示。

答案1

不使用‘自定义位置’。

将其放入高级:

location / {
    proxy_pass http://192.168.123.123:8080/guacamole/;
    proxy_buffering off;
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $http_connection;
    proxy_cookie_path /guacamole/ /;
    access_log off;
}

答案2

我相信我在尝试配置鳄梨酱时遇到了同样的问题,最近偶然发现了一个解决方案。

详情:

  • 域名:example.com
  • 方案:http
  • IP:192.168.123.123
  • 端口:8080
  • 缓存资产:已禁用
  • 阻止常见漏洞:已启用
  • Websockets 支持:已启用
  • 访问列表:可公开访问

然后,SSL:

  • 强制 SSL:已启用
  • HSTS 已启用:已启用
  • HTTP/2 支持:已启用
  • HSTS 子域名:已禁用

到目前为止一切顺利,可以通过 example.com/guacamole 访问 guacamole。

为了转发子目录,以便 example.com 指向 example.com/guacamole,自定义位置应该是:

  • 地点: /
  • 方案:http
  • 转发主机名:example.com/guacamole
  • 端口:8080

意思是,您实际上转发的是现有域子目录,而不是实际的服务器 IP。我不知道具体细节,但经过多次尝试后,这种方法对我来说是有效的。

相关内容