GoDoxy/next-release.md

6.2 KiB

GoDoxy v0.8 changes:

Breaking changes

  • Removed redirect_to_https in config.yml, superseded by redirectHTTP as an entrypoint middleware

  • New notification config format, support webhook notification, support multiple notification providers

    old

    providers:
      notification:
        gotify:
          url: ...
          token: ...
    

    new

    providers:
      notification:
        - name: gotify
          provider: gotify
          url: ...
          token: ...
        - name: discord
          provider: webhook
          url: https://discord.com/api/webhooks/...
          template: discord
    

    Webhook notification fields:

    Field Description Required Allowed values
    name name of the provider Yes
    provider Yes webhook
    url webhook URL Yes Full URL
    template webhook template No empty, discord
    token webhook token No
    payload webhook payload No (if template is used) valid json
    method webhook request method No GET POST PUT
    mime_type mime type No
    color_mode color mode No hex dec

    Available payload variables:

    Variable Description Format
    $title message title json string
    $message message in markdown format json string
    $fields extra fields in json format json object
    $color embed color by color_mode 0xff0000 (hex) or 16711680 (dec)

Non-breaking changes

  • services health notification now in markdown format like Uptime Kuma for both webhook and Gotify

  • docker services now use docker health check if possible, fallback to GoDoxy health check on failure / no docker health check

  • proxy.<alias>.path_patterns fully support http.ServeMux patterns [METHOD ][HOST]/[PATH] (See https://pkg.go.dev/net/http#hdr-Patterns-ServeMux)

  • caching ACME private key in order to reuse ACME account, to prevent from ACME rate limit

  • New: support entrypoint middlewares (applied to routes, before route middlewares)

    entrypoint:
      middlewares:
        - use: CIDRWhitelist
          allow:
            - "127.0.0.1"
            - "10.0.0.0/8"
            - "192.168.0.0/16"
          status: 403
          message: "Forbidden"
    
  • New: support exact host matching, i.e.

    app1.domain.tld:
      host: 10.0.0.1
    

    will only match exactly app1.domain.tld match_domains in config will be ignored for this route

  • New: support host matching without a subdomain, i.e.

    app1:
      host: 10.0.0.1
    

    will now also match app1.tld

  • New: support x-properties (like in docker compose), example usage

    x-proxy: &proxy
      scheme: https
      healthcheck:
        disable: true
      middlewares:
        hideXForwarded:
        modifyRequest:
          setHeaders:
            Host: $req_host
    
    api.openai.com:
      <<: *proxy
      host: api.openai.com
    api.groq.com:
      <<: *proxy
      host: api.groq.com
    
  • new middleware name aliases:

    • modifyRequest = request
    • modifyResponse = response
  • New: support $ variables in request and response middlewares (like nginx config)

    • $req_method: request http method
    • $req_scheme: request URL scheme (http/https)
    • $req_host: request host without port
    • $req_port: request port
    • $req_addr: request host with port (if present)
    • $req_path: request URL path
    • $req_query: raw query string
    • $req_url: full request URL
    • $req_uri: request URI (encoded path?query)
    • $req_content_type: request Content-Type header
    • $req_content_length: length of request body (if present)
    • $remote_addr: client's remote address (may changed by middlewares like RealIP and CloudflareRealIP)
    • $remote_host: client's remote ip parse from $remote_addr
    • $remote_port: client's remote port parse from $remote_addr (may be empty)
    • $resp_content_type: response Content-Type header
    • $resp_content_length: length response body
    • $status_code: response status code
    • $upstream_name: upstream server name (alias)
    • $upstream_scheme: upstream server scheme
    • $upstream_host: upstream server host
    • $upstream_port: upstream server port
    • $upstream_addr: upstream server address with port (if present)
    • $upstream_url: full upstream server URL
    • $header(name): get request header by name
    • $resp_header(name): get response header by name
    • $arg(name): get URL query parameter by name
  • New: Access Logging (entrypoint and per route), i.e.

    # config.yml
    entrypoint:
      access_log:
        format: json # common, combined, json
        path: /app/logs/access.json.log
        filters:
          cidr:
            negative: true # no log for local requests
            values:
              - 127.0.0.1/32
              - 172.0.0.0/8
              - 192.168.0.0/16
              - 10.0.0.0/16
        fields:
          headers:
            default: drop # drop app headers in log
            config: # keep only these
              X-Real-Ip: keep
              CF-Connecting-Ip: keep
              X-Forwarded-For: keep
    

    mount logs directory before setting this

Fixes

  • duplicated notification after config reload
  • timeout was defaulted to 0 in some cases causing health check to fail
  • redirectHTTP middleware may not work on non standard http port
  • various other small bugs
  • realIP and cloudflareRealIP middlewares
  • prometheus metrics gone after a single route reload