# 在同一域名下，将 Discourse 运行在 / 路径，同时将自定义应用运行在 /tickets 路径

**URL:** https://meta.discourse.org/t/running-discourse-at-while-serving-a-custom-app-at-tickets-on-the-same-domain/393888
**Category:** Self-hosting
**Created:** [2026年一月20日 14:36 UTC](https://meta.discourse.org/t/running-discourse-at-while-serving-a-custom-app-at-tickets-on-the-same-domain/393888 "2026-01-20T14:36:36Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![1vernit3](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/1vernit3/32/539886_2.png) [@1vernit3](https://meta.discourse.org/u/1vernit3)
#### Post date: [2026年一月20日 14:36 UTC](https://meta.discourse.org/t/running-discourse-at-while-serving-a-custom-app-at-tickets-on-the-same-domain/393888/1 "2026-01-20T14:36:36Z")

</div>

大家好，

我正试图确认一种 **正确的架构** ，用于在**保持 Discourse 位于根目录 (/)** 的同时，通过 **子路径** 提供 **自定义应用程序** ，而无需修改 Discourse 内部。

### **我想要的结果（最终目标）**

```yaml
https://mydomain.com/ → Discourse
https://mydomain.com/tickets → 自定义工单系统 (Go + Gin)

```

**要求：**

1. Discourse 必须保持在 `/`，自定义应用必须位于 `/tickets`
2. 相同的域名
3. 不使用 Discourse 插件

### **当前环境**

1. OVH VPS (Ubuntu)，Discourse 运行在 Docker 中 (`/var/discourse`)
2. 自定义 Go 应用运行在同一服务器上的 `127.0.0.1:8080`
3. 外部 nginx 安装在宿主机上（不在容器内）

我 **不是** 想在像 /forum 这样的子文件夹中运行 Discourse。哦，在有人问之前，是的，我尝试过使用 Discourse tickets 插件——但它不能按我想要的方式工作。

---

<div class="post-metadata">

### Author: ![itsbhanusharma](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/itsbhanusharma/32/180717_2.png) [@itsbhanusharma](https://meta.discourse.org/u/itsbhanusharma)
#### Post date: [2026年一月20日 14:45 UTC](https://meta.discourse.org/t/running-discourse-at-while-serving-a-custom-app-at-tickets-on-the-same-domain/393888/2 "2026-01-20T14:45:40Z")

</div>

您可以使用 nginx 轻松完成此操作，虽然不推荐，但我不知道 discourse 会将 /tickets 路由用于任何其他目的。

---

<div class="post-metadata">

### Author: ![1vernit3](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/1vernit3/32/539886_2.png) [@1vernit3](https://meta.discourse.org/u/1vernit3)
#### Post date: [2026年一月20日 15:20 UTC](https://meta.discourse.org/t/running-discourse-at-while-serving-a-custom-app-at-tickets-on-the-same-domain/393888/3 "2026-01-20T15:20:51Z")

</div>

感谢您的快速回复！我正在使用 nginx 并且遇到了困难。这是我的配置，但仍然没有成功。

这是在我的 app.yml 文件中

```plaintext
ports:
  - "127.0.0.1:4000:4000"
  #- "80:80" # http
  #- "443:443" # https

```

/etc/nginx/sites-enabled/filename

```plaintext
server {
    listen 80;
    server_name mydomain.com;

    # ---- Tickets app ----
    location ^~ /tickets {
        proxy_pass http://127.0.0.1:5000;
        proxy_http_version 1.1;
        proxy_redirect off;

        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 $scheme;

        # Discourse auth headers
        proxy_set_header X-Discourse-Username $http_x_discourse_username;
        proxy_set_header X-Discourse-User-Id $http_x_discourse_user_id;
        proxy_set_header X-Discourse-Groups $http_x_discourse_groups;
    }

    # ---- Discourse ----
    location / {
        proxy_pass http://127.0.0.1:4000;
        proxy_http_version 1.1;
        proxy_redirect off;

        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 $scheme;
    }
}

```

---

<div class="post-metadata">

### Author: ![itsbhanusharma](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/itsbhanusharma/32/180717_2.png) [@itsbhanusharma](https://meta.discourse.org/u/itsbhanusharma)
#### Post date: [2026年一月20日 15:22 UTC](https://meta.discourse.org/t/running-discourse-at-while-serving-a-custom-app-at-tickets-on-the-same-domain/393888/4 "2026-01-20T15:22:05Z")

</div>

> [@Ivernite](#):
>
> 我正在使用 nginx 并且遇到困难。

您能确切说明您在哪里遇到困难吗？

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2026年一月20日 16:06 UTC](https://meta.discourse.org/t/running-discourse-at-while-serving-a-custom-app-at-tickets-on-the-same-domain/393888/5 "2026-01-20T16:06:55Z")

</div>

> [@Ivernite](#):
>
> 我 **不** 是想在子文件夹（如 /forum）中运行 Discourse。

我认为那些可能是你最好的说明，尽管是反向操作。你将按照那些说明进行操作，但要“反向”进行。你将让你的外部反向代理将 `/` 指向 Discourse，将 `/tickets` 指向你的应用程序。

---

<div class="post-metadata">

### Author: ![1vernit3](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/1vernit3/32/539886_2.png) [@1vernit3](https://meta.discourse.org/u/1vernit3)
#### Post date: [2026年一月20日 16:18 UTC](https://meta.discourse.org/t/running-discourse-at-while-serving-a-custom-app-at-tickets-on-the-same-domain/393888/6 "2026-01-20T16:18:03Z")

</div>

@pfaffman 所以我的理解是： **重用概念，而不是配置** ——在前面放置一个 **外部反向代理** 来路由：

- / → Discourse

- /tickets → 我的自定义应用

Discourse 完全不知道 /tickets 的存在。  
所以是遵循这个指南，对吗：[Serve Discourse from a subfolder (path prefix) instead of a subdomain](https://meta.discourse.org/t/serve-discourse-from-a-subfolder-path-prefix-instead-of-a-subdomain/30507)

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2026年一月20日 16:48 UTC](https://meta.discourse.org/t/running-discourse-at-while-serving-a-custom-app-at-tickets-on-the-same-domain/393888/7 "2026-01-20T16:48:29Z")

</div>

我认为外部 nginx 是最简单的方法。可以创建一个模板让内部的 nginx 来做这件事，但这更复杂，而且我认为收益不大。

> [@Ivernite](#):
>
> 所以看看这个：[从子文件夹（路径前缀）而不是子域名提供 Discourse 服务](https://meta.discourse.org/t/serve-discourse-from-a-subfolder-path-prefix-instead-of-a-subdomain/30507)

是的，但你除了移除 ssl/let’s encrypt 模板和可能使用一个套接字（socket）之外，不需要对 discourse 容器做任何更改。（所以，实际上，该主题中没什么能提供太大帮助的。）

---

<div class="post-metadata">

### Author: ![1vernit3](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/1vernit3/32/539886_2.png) [@1vernit3](https://meta.discourse.org/u/1vernit3)
#### Post date: [2026年一月20日 17:10 UTC](https://meta.discourse.org/t/running-discourse-at-while-serving-a-custom-app-at-tickets-on-the-same-domain/393888/8 "2026-01-20T17:10:58Z")

</div>

**我让它工作了！**

感谢你们两位的回复！

 ![image](https://global.discourse-cdn.com/meta/original/4X/f/8/7/f87d1faff2c119b37e07a682979d3073f7fe7858.png)

我添加到 Discourse 标题中的“Tickets”链接也能正常工作，当它被设置为“blank”（空白）而不是“self”时，因为 `/tickets` 会被当作一个 Discourse 路由来处理并尝试仅切换 react 视图。空白会强制进行完整的页面重新加载。

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2026年一月20日 19:57 UTC](https://meta.discourse.org/t/running-discourse-at-while-serving-a-custom-app-at-tickets-on-the-same-domain/393888/9 "2026-01-20T19:57:39Z")

</div>

> [@Ivernite](#):
>
> 我添加到 Discourse 标题中的“Tickets”链接也可以正常工作，当它被设置为空白而不是 self 时，因为 `/tickets` 会被当作一个 Discourse 路由来处理，并尝试只切换 react 视图。

如果你想修复这个问题，我敢肯定一个主题组件可以通过为 `/tickets` 添加一个路由并告诉它做……某件事（我对 Ember 不太擅长）来解决它。另外，我想你可以在你的 Discourse 服务器上添加另一个子域名（比如 `tickets.mydomain.com`），使用 `DISCOURSE_HOST_ALIASES`，然后链接到该域名，这样会进行重定向，这样 Ember 就不会尝试捕获该路由了。
