# 从子文件夹（路径前缀）而不是子域提供 Discourse

**URL:** <https://meta.discourse.org/t/serve-discourse-from-a-subfolder-path-prefix-instead-of-a-subdomain/30507>\
**Category:** Self-Hosting\
**Tags:** docker, subfolder, how-to, advanced-setup\
**Created:** [2015年六月26日 19:18 UTC](https://meta.discourse.org/t/serve-discourse-from-a-subfolder-path-prefix-instead-of-a-subdomain/30507 "2015-06-26T19:18:04Z")\
**Posts on this page:** 11\
**Page:** 2

<div class="post-metadata">

**Author:** ![Miguel\_Angel\_García](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/miguel_angel_garc%C3%ADa/32/201988_2.png) [@Miguel\_Angel\_García](https://meta.discourse.org/u/Miguel_Angel_Garc%C3%ADa)\
**Post date:** [2022年二月2日 09:26 UTC](https://meta.discourse.org/t/serve-discourse-from-a-subfolder-path-prefix-instead-of-a-subdomain/30507/118 "2022-02-02T09:26:42Z")

</div>

非常感谢您的回复 @pfaffman，我真的很感激。

深入调查后，我尝试在容器内使用 `/var/discourse/launcher enter app` 进入容器，并还原 `/etc/nginx/conf.d/discourse.conf` 中的所有更改。  
还原 `discourse.conf` 文件后，我执行了 `/var/discourse/launcher rebuild app` 进行重建。  
我尝试访问网站（不带 `/forum` 路径），但出现了同样的“Oops”错误（即我在上一条评论中附上的第一张图片）。

此外，我还尝试在容器内执行以下命令：

```plaintext
RAILS_ENV=production bundle exec script/discourse remap '/forum/uploads' '/uploads' 

```

但出现了另一个错误（我认为这与 @ahmed_khan1 指出的错误相同）：

```plaintext
bundler: failed to load command: script/discourse (script/discourse)
Traceback (most recent call last):
	73: from /usr/local/bin/bundle:25:in `<main>'
	72: from /usr/local/bin/bundle:25:in `load'
	71: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.4/exe/bundle:36:in `<top (required)>'
	70: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.4/lib/bundler/friendly_errors.rb:103:in `with_friendly_errors'
	69: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.4/exe/bundle:48:in `block in <top (required)>'
	68: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.4/lib/bundler/cli.rb:25:in `start'
	67: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.4/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
	66: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.4/lib/bundler/cli.rb:31:in `dispatch'
	65: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.4/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
	64: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
	63: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.4/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
	62: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.4/lib/bundler/cli.rb:484:in `exec'
	61: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.4/lib/bundler/cli/exec.rb:23:in `run'
	60: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.4/lib/bundler/cli/exec.rb:58:in `kernel_load'
	59: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.4/lib/bundler/cli/exec.rb:58:in `load'
	58: from script/discourse:290:in `<top (required)>'
	57: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor/base.rb:485:in `start'
	56: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
	55: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
	54: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
	53: from script/discourse:37:in `remap'
	52: from script/discourse:270:in `load_rails'
	51: from script/discourse:270:in `require'
	50: from /var/www/discourse/config/environment.rb:7:in `<top (required)>'
	49: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/railtie.rb:207:in `method_missing'
	48: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/railtie.rb:207:in `public_send'
	47: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/application.rb:391:in `initialize!'
	46: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/initializable.rb:60:in `run_initializers'
	45: from /usr/local/lib/ruby/2.7.0/tsort.rb:205:in `tsort_each'
	44: from /usr/local/lib/ruby/2.7.0/tsort.rb:226:in `tsort_each'
	43: from /usr/local/lib/ruby/2.7.0/tsort.rb:347:in `each_strongly_connected_component'
	42: from /usr/local/lib/ruby/2.7.0/tsort.rb:347:in `call'
	41: from /usr/local/lib/ruby/2.7.0/tsort.rb:347:in `each'
	40: from /usr/local/lib/ruby/2.7.0/tsort.rb:349:in `block in each_strongly_connected_component'
	39: from /usr/local/lib/ruby/2.7.0/tsort.rb:415:in `each_strongly_connected_component_from'
	38: from /usr/local/lib/ruby/2.7.0/tsort.rb:415:in `call'
	37: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/initializable.rb:50:in `tsort_each_child'
	36: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/initializable.rb:50:in `each'
	35: from /usr/local/lib/ruby/2.7.0/tsort.rb:421:in `block in each_strongly_connected_component_from'
	34: from /usr/local/lib/ruby/2.7.0/tsort.rb:431:in `each_strongly_connected_component_from'
	33: from /usr/local/lib/ruby/2.7.0/tsort.rb:422:in `block (2 levels) in each_strongly_connected_component_from'
	32: from /usr/local/lib/ruby/2.7.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component'
	31: from /usr/local/lib/ruby/2.7.0/tsort.rb:228:in `block in tsort_each'
	30: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/initializable.rb:61:in `block in run_initializers'
	29: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/initializable.rb:32:in `run'
	28: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/initializable.rb:32:in `instance_exec'
	27: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/engine.rb:633:in `block in <class:Engine>'
	26: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/engine.rb:633:in `each'
	25: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/engine.rb:634:in `block (2 levels) in <class:Engine>'
	24: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/engine.rb:680:in `load_config_initializer'
	23: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/notifications.rb:205:in `instrument'
	22: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/engine.rb:681:in `block in load_config_initializer'
	21: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/dependencies.rb:326:in `load'
	20: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/dependencies.rb:299:in `load_dependency'
	19: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/dependencies.rb:326:in `block in load'
	18: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.9.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:60:in `load'
	17: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.9.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:60:in `load'
	16: from /var/www/discourse/config/initializers/004-message_bus.rb:122:in `<main>'
	15: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/model_schema.rb:380:in `table_exists?'
	14: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_handling.rb:283:in `connection'
	13: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_handling.rb:327:in `retrieve_connection'
	12: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:1128:in `retrieve_connection'
	11: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:428:in `connection'
	10: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:588:in `checkout'
	 9: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:866:in `acquire_connection'
	 8: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:905:in `try_to_checkout_new_connection'
	 7: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:926:in `checkout_new_connection'
	 6: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:882:in `new_connection'
	 5: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:882:in `public_send'
	 4: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql_adapter.rb:37:in `postgresql_connection'
	 3: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql_adapter.rb:78:in `new_client'
	 2: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/pg-1.2.3/lib/pg.rb:58:in `connect'
	 1: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/pg-1.2.3/lib/pg.rb:58:in `new'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/pg-1.2.3/lib/pg.rb:58:in `initialize': connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: Peer authentication failed for user "discourse" (PG::ConnectionBad)
	71: from /usr/local/bin/bundle:25:in `<main>'
	70: from /usr/local/bin/bundle:25:in `load'
	69: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.4/exe/bundle:36:in `<top (required)>'
	68: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.4/lib/bundler/friendly_errors.rb:103:in `with_friendly_errors'
	67: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.4/exe/bundle:48:in `block in <top (required)>'
	66: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.4/lib/bundler/cli.rb:25:in `start'
	65: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.4/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
	64: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.4/lib/bundler/cli.rb:31:in `dispatch'
	63: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.4/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
	62: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
	61: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.4/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
	60: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.4/lib/bundler/cli.rb:484:in `exec'
	59: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.4/lib/bundler/cli/exec.rb:23:in `run'
	58: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.4/lib/bundler/cli/exec.rb:58:in `kernel_load'
	57: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.3.4/lib/bundler/cli/exec.rb:58:in `load'
	56: from script/discourse:290:in `<top (required)>'
	55: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor/base.rb:485:in `start'
	54: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
	53: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
	52: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
	51: from script/discourse:37:in `remap'
	50: from script/discourse:270:in `load_rails'
	49: from script/discourse:270:in `require'
	48: from /var/www/discourse/config/environment.rb:7:in `<top (required)>'
	47: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/railtie.rb:207:in `method_missing'
	46: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/railtie.rb:207:in `public_send'
	45: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/application.rb:391:in `initialize!'
	44: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/initializable.rb:60:in `run_initializers'
	43: from /usr/local/lib/ruby/2.7.0/tsort.rb:205:in `tsort_each'
	42: from /usr/local/lib/ruby/2.7.0/tsort.rb:226:in `tsort_each'
	41: from /usr/local/lib/ruby/2.7.0/tsort.rb:347:in `each_strongly_connected_component'
	40: from /usr/local/lib/ruby/2.7.0/tsort.rb:347:in `call'
	39: from /usr/local/lib/ruby/2.7.0/tsort.rb:347:in `each'
	38: from /usr/local/lib/ruby/2.7.0/tsort.rb:349:in `block in each_strongly_connected_component'
	37: from /usr/local/lib/ruby/2.7.0/tsort.rb:415:in `each_strongly_connected_component_from'
	36: from /usr/local/lib/ruby/2.7.0/tsort.rb:415:in `call'
	35: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/initializable.rb:50:in `tsort_each_child'
	34: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/initializable.rb:50:in `each'
	33: from /usr/local/lib/ruby/2.7.0/tsort.rb:421:in `block in each_strongly_connected_component_from'
	32: from /usr/local/lib/ruby/2.7.0/tsort.rb:431:in `each_strongly_connected_component_from'
	31: from /usr/local/lib/ruby/2.7.0/tsort.rb:422:in `block (2 levels) in each_strongly_connected_component_from'
	30: from /usr/local/lib/ruby/2.7.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component'
	29: from /usr/local/lib/ruby/2.7.0/tsort.rb:228:in `block in tsort_each'
	28: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/initializable.rb:61:in `block in run_initializers'
	27: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/initializable.rb:32:in `run'
	26: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/initializable.rb:32:in `instance_exec'
	25: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/engine.rb:633:in `block in <class:Engine>'
	24: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/engine.rb:633:in `each'
	23: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/engine.rb:634:in `block (2 levels) in <class:Engine>'
	22: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/engine.rb:680:in `load_config_initializer'
	21: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/notifications.rb:205:in `instrument'
	20: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/engine.rb:681:in `block in load_config_initializer'
	19: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/dependencies.rb:326:in `load'
	18: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/dependencies.rb:299:in `load_dependency'
	17: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/dependencies.rb:326:in `block in load'
	16: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.9.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:60:in `load'
	15: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.9.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:60:in `load'
	14: from /var/www/discourse/config/initializers/004-message_bus.rb:122:in `<main>'
	13: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/model_schema.rb:380:in `table_exists?'
	12: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_handling.rb:283:in `connection'
	11: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_handling.rb:327:in `retrieve_connection'
	10: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:1128:in `retrieve_connection'
	 9: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:428:in `connection'
	 8: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:588:in `checkout'
	 7: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:866:in `acquire_connection'
	 6: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:905:in `try_to_checkout_new_connection'
	 5: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:926:in `checkout_new_connection'
	 4: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:882:in `new_connection'
	 3: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:882:in `public_send'
	 2: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql_adapter.rb:37:in `postgresql_connection'
	 1: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql_adapter.rb:77:in `new_client'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql_adapter.rb:81:in `rescue in new_client': connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: Peer authentication failed for user "discourse" (ActiveRecord::NoDatabaseError)

```

所以我不确定我还能做些什么 😕

---

<div class="post-metadata">

**Author:** ![rrit](https://avatars.discourse-cdn.com/v4/letter/r/b5ac83/32.png) [@rrit](https://meta.discourse.org/u/rrit)\
**Post date:** [2022年二月3日 21:25 UTC](https://meta.discourse.org/t/serve-discourse-from-a-subfolder-path-prefix-instead-of-a-subdomain/30507/119 "2022-02-03T21:25:30Z")

</div>

## 如何编辑 `nginx/discourse.conf`

> [@Miguel\_Angel\_García](#):
>
> 我已经尝试在 **容器内的** `/etc/nginx/conf.d/discourse.conf` 中恢复所有更改，[…]。  
> 恢复 `discourse.conf` 文件后，我 **进行了重建** ，使用了 `/var/discourse/launcher rebuild app`。

我假设任何对容器内 `discourse.conf` 的更改都会在重建时被恢复。

要保留更改，您必须以某种方式将其添加到容器配置中——例如，`web_only.yml`：

```yaml
# […]
## 请记住，这是 YAML 语法——一个名称的块只能有一个
run:
  - exec: echo "开始自定义命令"
# […]
  - replace:
      filename: /etc/nginx/conf.d/discourse.conf
      from: $proxy_add_x_forwarded_for
      to: $http_x_real_ip
      global: true
# […]

```

## 如何调试子文件夹安装的 Discourse

在子文件夹安装的 Discourse 中，对 Discourse 的调用如下所示：  
`example.org/forum` → `[example.org 的外部代理]` → `/path-to-discourse/discourse/shared/web-only/nginx.http.sock` → `[Discourse 网页容器中的 Nginx]`

因此，如果出现错误，我们必须首先找到它：

- 外部代理
- Discourse 容器中的 Nginx
- Discourse 本身

### 外部代理

- 在浏览器中调用它并检查结果。
- 检查外部代理的错误日志。

### Discourse 容器中的 Nginx

1. SSH 进入您的网络服务器。
2. 使用 `curl` 直接连接到套接字。
3. 调试 `curl` 输出和 `Discourse 中的 Nginx` 的日志

**重要提示** ：使用 `http` URL——而不是 `https`。

```bash
curl -I --unix-socket /path-to-discourse/discourse/shared/web-only/nginx.http.sock http://www.example.org/forum/

```

如果这有效，请尝试一个实际的调用，例如：

```bash
curl --unix-socket /path-to-discourse/discourse/shared/web-only/nginx.http.sock \
-H "user-agent: Chrome/88.0.4324.182" \
-H "Accept-Encoding: gzip" \
http://www.example.org/forum/t/test-thread/12345 --output test-encoded.html.gz

```

---

<div class="post-metadata">

**Author:** ![Miguel\_Angel\_García](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/miguel_angel_garc%C3%ADa/32/201988_2.png) [@Miguel\_Angel\_García](https://meta.discourse.org/u/Miguel_Angel_Garc%C3%ADa)\
**Post date:** [2022年二月7日 10:56 UTC](https://meta.discourse.org/t/serve-discourse-from-a-subfolder-path-prefix-instead-of-a-subdomain/30507/120 "2022-02-07T10:56:13Z")

</div>

He @pfaffman and @rrit,

I have some more insights about the problem. In the Discourse log, as @pfaffman said:

> [@pfaffman](#):
>
> `/var/discourse/shared/standalone/logs/rails/production.log`

the error thrown is:

```plaintext
Started GET "/" for XX.XX.XX.XX at 2022-02-07 10:51:02 +0000
Processing by ListController#latest as HTML
  Rendered list/list.erb within layouts/application (Duration: 12.4ms | Allocations: 4137)
  Rendered layout layouts/application.html.erb (Duration: 23.6ms | Allocations: 8794)
Completed 500 Internal Server Error in 343ms (ActiveRecord: 0.0ms | Allocations: 62982)
ActionView::Template::Error (undefined method `[]' for nil:NilClass)
lib/svg_sprite/svg_sprite.rb:501:in `block in custom_icons'
lib/svg_sprite/svg_sprite.rb:500:in `each'
lib/svg_sprite/svg_sprite.rb:500:in `custom_icons'
lib/svg_sprite/svg_sprite.rb:275:in `block in all_icons'
lib/distributed_cache.rb:25:in `defer_get_set'
lib/svg_sprite/svg_sprite.rb:516:in `get_set_cache'
lib/svg_sprite/svg_sprite.rb:268:in `all_icons'
lib/svg_sprite/svg_sprite.rb:337:in `bundle'
lib/svg_sprite/svg_sprite.rb:285:in `block in version'
lib/distributed_cache.rb:25:in `defer_get_set'
lib/svg_sprite/svg_sprite.rb:516:in `get_set_cache'
lib/svg_sprite/svg_sprite.rb:284:in `version'
lib/svg_sprite/svg_sprite.rb:290:in `path'
app/helpers/application_helper.rb:586:in `client_side_setup_data'
app/views/layouts/application.html.erb:61
lib/topic_list_responder.rb:13:in `block (2 levels) in respond_with_list'
lib/topic_list_responder.rb:9:in `respond_with_list'
app/controllers/list_controller.rb:103:in `block (2 levels) in <class:ListController>'
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:356:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:198:in `call'
ActionController::RoutingError (No route matches [GET] "/service-worker-cce5f3834b22e40a87291d786315f7def48e1456ba24fe116a16d5a38af4012a.js")
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:198:in `call'
ActionController::RoutingError (No route matches [GET] "/service-worker-cce5f3834b22e40a87291d786315f7def48e1456ba24fe116a16d5a38af4012a.js")
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:198:in `call'
Job exception: uninitialized constant DiscourseAlgolia::UserIndexer::SETTINGS
Did you mean? String

```

Does this ring a bell for you?

Btw, @rrit I’ve tried to search the `nginx.http.sock` file, in the folder you suggested and also in the whole project, but I didn’t found, so I was not able to try what you said 😕

Regards,  
Miguel.

---

<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:** [2022年二月7日 12:27 UTC](https://meta.discourse.org/t/serve-discourse-from-a-subfolder-path-prefix-instead-of-a-subdomain/30507/121 "2022-02-07T12:27:54Z")

</div>

我实在看不出你在这里做了什么或者想做什么。

我猜你没有备份你上次能正常工作的数据库和 yml 文件？

我想我会尝试恢复到你上次的设置，进行备份，然后在测试站点上重新开始。

---

<div class="post-metadata">

**Author:** ![rrit](https://avatars.discourse-cdn.com/v4/letter/r/b5ac83/32.png) [@rrit](https://meta.discourse.org/u/rrit)\
**Post date:** [2022年二月8日 19:58 UTC](https://meta.discourse.org/t/serve-discourse-from-a-subfolder-path-prefix-instead-of-a-subdomain/30507/122 "2022-02-08T19:58:35Z")

</div>

> [@Miguel Ángel García](#):
>
> 顺便说一句，@rrit 我尝试在你建议的文件夹以及整个项目中搜索 `nginx.http.sock` 文件，但没有找到，所以我无法尝试你说的话 😕

抱歉，我指的是类似这样的设置：

容器配置 `web_only.yml`：

```yaml
templates:
# [...]
  - "templates/web.socketed.template.yml"
# [...]
#expose:
# - "80:80" # http
# - "443:443" # https

```

外部 `nginx-site.conf`：

```nginx
server {
    listen 443 ssl default_server;
# [...]
    location ~ ^/forum {
        proxy_pass http://unix:/path-to-discourse/discourse/shared/web-only/nginx.http.sock:;
        proxy_set_header Host $http_host;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Accept-Encoding $http_accept_encoding;
    }
# [...]
}

```

---

<div class="post-metadata">

**Author:** ![Miguel\_Angel\_García](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/miguel_angel_garc%C3%ADa/32/201988_2.png) [@Miguel\_Angel\_García](https://meta.discourse.org/u/Miguel_Angel_Garc%C3%ADa)\
**Post date:** [2022年二月9日 09:59 UTC](https://meta.discourse.org/t/serve-discourse-from-a-subfolder-path-prefix-instead-of-a-subdomain/30507/123 "2022-02-09T09:59:06Z")

</div>

感谢您的回复@pfaffman。说实话，我没有备份，因为它是一个测试实例。所以问题不大，我已经能够使用子域方法启动一个新实例。

但我仍然对执行命令时出现的错误感到好奇：

```plaintext
RAILS_ENV=production bundle exec script/discourse remap '/forum/uploads' '/uploads'

```

您对这个错误有什么见解吗？

---

<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:** [2022年二月9日 15:39 UTC](https://meta.discourse.org/t/serve-discourse-from-a-subfolder-path-prefix-instead-of-a-subdomain/30507/124 "2022-02-09T15:39:47Z")

</div>

所以您想在子文件夹安装和非子文件夹安装之间切换？我不推荐这样做。而且，几乎没有人认为子文件夹安装是个好主意。

---

<div class="post-metadata">

**Author:** ![tig3](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tig3/32/126647_2.png) [@tig3](https://meta.discourse.org/u/tig3)\
**Post date:** [2024年十月19日 10:44 UTC](https://meta.discourse.org/t/serve-discourse-from-a-subfolder-path-prefix-instead-of-a-subdomain/30507/126 "2024-10-19T10:44:20Z")

</div>

> [@jomaxro](#):
>
> Nothing, that should be copied as written.

In my case leaving it as written, it was showing 127.0.0.1 for all users, even though in nginx logs the user ip was correctly logged.

Applying @varun21 's answer [Serve Discourse from a subfolder (path prefix) instead of a subdomain - #111 by varun21](https://meta.discourse.org/t/serve-discourse-from-a-subfolder-path-prefix-instead-of-a-subdomain/30507/111?u=tig3) solved the issue.

Thank you @varun21

---

<div class="post-metadata">

**Author:** ![sergey2](https://avatars.discourse-cdn.com/v4/letter/s/f14d63/32.png) [@sergey2](https://meta.discourse.org/u/sergey2)\
**Post date:** [2025年一月8日 03:29 UTC](https://meta.discourse.org/t/serve-discourse-from-a-subfolder-path-prefix-instead-of-a-subdomain/30507/127 "2025-01-08T03:29:27Z")

</div>

感谢您发布此指南！当我在 `/var/discourse` 文件夹中运行此命令时：

`RAILS_ENV=production bundle exec script/discourse remap '/uploads' '/forum/uploads'`

我收到此错误：

`Could not locate Gemfile or .bundle/ directory`

我使用 `snap install ruby --classic` 命令安装了 Ruby。我对 Gems 不是很熟悉。有人能告诉我还需要安装什么才能运行它吗？

---

<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:** [2025年一月8日 12:24 UTC](https://meta.discourse.org/t/serve-discourse-from-a-subfolder-path-prefix-instead-of-a-subdomain/30507/128 "2025-01-08T12:24:56Z")

</div>

您需要在容器内运行命令

```plaintext
cd /var/discourse 
./launcher enter app 
cd /var/www/discourse 

```

我认为最后一个 `cd` 可能不是必需的。

---

<div class="post-metadata">

**Author:** ![MichaIng](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/michaing/32/251089_2.png) [@MichaIng](https://meta.discourse.org/u/MichaIng)\
**Post date:** [2026年四月14日 21:15 UTC](https://meta.discourse.org/t/serve-discourse-from-a-subfolder-path-prefix-instead-of-a-subdomain/30507/129 "2026-04-14T21:15:09Z")

</div>

有一段时间了，我们频繁看到容器输出 `X-Accel-Mapping header missing` 消息，但并非每次访问或每次导航步骤都会触发。我注意到该头在 Nginx 配置中已显式定义，但并非针对所有请求：[discourse/config/nginx.sample.conf at main · discourse/discourse · GitHub](https://github.com/discourse/discourse/blob/main/config/nginx.sample.conf)

由于我在论坛其他地方没看到有人报告此问题，我怀疑这是否与我们使用的子目录（subdir）设置有关，尽管我目前看不出具体关联。

我不确定究竟是什么在发出该消息，但我推测只有当 `X-Sendfile-Type` 设置为 `X-Accel-Redirect` 而 `X-Accel-Mapping` 未设置时才会发生。而当前配置要么同时定义两者，要么将两者都设为空 🤔。

实际上，该消息仅在访问备份时出现，更关键的是，在访问上传内容时出现。我刚刚测试并确认，只要查看包含上传图片或类似内容的帖子，就会触发该消息。查看配置后，按理说不可能出现 `X-Accel-Redirect` 已设置而 `X-Accel-Mapping` 未设置的情况。此外，这是由容器内的 Nginx 设置的请求头，仅被 Discourse/unicorn/pitchfork/backend 消费，也就是说它根本不会进入或离开容器。

啊，我们配置 Nginx 将日志输出到 STDERR，而我在 Discourse 日志中没看到这些信息，因此可以确定是 Nginx 本身发出的。这很可能也是其他人尚未注意到该问题的原因，因为它出现在 Nginx 日志文件中。是否有人有空检查一下他们的 `shared/*/log/var-log/nginx/error.log` 是否也包含这些日志？如果是的话，我会再联系那些未使用子目录设置的用户，以便进一步缩小问题范围。

[上一頁](https://meta.discourse.org/t/serve-discourse-from-a-subfolder-path-prefix-instead-of-a-subdomain/30507.md?page=1)
