Skip to content

docs: send every /exapps/ request to HaRP behind nginx and let WebSockets through Apache - #162

Merged
oleksandr-nc merged 1 commit into
mainfrom
docs/reverse-proxy-exapps
Nov 7, 2026
Merged

oleksandr-nc merged 1 commit into
mainfrom
docs/reverse-proxy-exapps

Conversation

@oleksandr-nc

Copy link
Copy Markdown
Contributor

Added to the server block of Nextcloud's documented nginx configuration, the plain location /exapps/ loses to Nextcloud's regular expression locations, so /exapps/ requests for .js, .css, images, fonts and .php paths get Nextcloud's 404 instead of reaching HaRP. That breaks the scripts, styles and icons of ExApp UIs, which AppAPI and the ExApp frontends load through /exapps/, while registering the ExApp still works. location ^~ /exapps/ sends all of them to HaRP and changes nothing for Nextcloud's own paths.

The Apache example did not pass WebSocket upgrades to ExApps; upgrade=websocket on ProxyPass does.

Changes

  • NGINX: location ^~ /exapps/, and a sentence on why it goes directly into Nextcloud's server block.
  • Apache: upgrade=websocket on ProxyPass.

…kets through Apache

Signed-off-by: Oleksandr Piskun <oleksandr2088@icloud.com>
@coderabbitai

coderabbitai Bot commented Nov 7, 2026 •

Copy link
Copy Markdown

Explain Change →

Walkthrough

The README updates its NGINX example to use ^~ /exapps/ and explains location precedence and placement in the Nextcloud server block. The Apache example adds upgrade=websocket to the /exapps/ proxy rule and states that this option requires Apache 2.4.47 or newer.

Merge Risk: Low · up to a2a0b

The README changes are documentation only. Users on Apache 2.4.47–2.4.52 may see idle WebSocket connections close early unless they use a newer Apache or raise TimeOut. This does not block the merge, but the note could be added.

Pre-merge checks: Passed 5

Check name Status Explanation
Title check Passed The title identifies the NGINX routing and Apache WebSocket changes.
Description check Passed The description explains the NGINX routing and Apache WebSocket changes.
Docstring Coverage Passed No eligible functions found in the changed files. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentat…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

No eligible functions found in the changed files. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 0 functions across 0 files. (1 skipped: 1 unsupported.)

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Tip

🎯 Customize your risk assessments

Guide how CodeRabbit assesses merge risk and security architecture risk. Highlight sensitive changes and explain your security boundaries using Merge Risk Instructions and Security Risk Instructions in your review settings. Security architecture risk assessments require the Advanced plan or above.

✅ Automatic approvals, with your rules

Let CodeRabbit approve pull requests once required threads are resolved, pre-merge checks pass, and your risk limits are met. Enable Automatic approvals in review settings, with overrides for teams or file paths.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Review info

Run configuration

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 48ea3f47-5474-472b-a406-3f13a49537e3
Commits

Reviewing files that changed from the base of the PR and between 27764eb and a2a0b37.

Files selected for processing: 1

  • README.md

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

Comment thread README.md
ProxyTimeout 1800
```

`upgrade=websocket` (Apache 2.4.47 and newer) lets WebSocket connections through to ExApps.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Major · Stability & Availability · Quick win

Account for the WebSocket timeout in older Apache versions.

On unpatched Apache 2.4.47–2.4.52, the tunnel uses the shorter client or backend timeout. With the default TimeOut 60, an idle WebSocket closes after 60 seconds despite ProxyTimeout 1800. (raw.githubusercontent.com)

Document this limit and recommend Apache 2.4.53 or newer, or an appropriate virtual-host TimeOut. (raw.githubusercontent.com)

@oleksandr-nc
oleksandr-nc merged commit 27be1d0 into main Nov 7, 2026
18 checks passed
@oleksandr-nc
oleksandr-nc deleted the docs/reverse-proxy-exapps branch November 7, 2026 12:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant