Как запустить Discourse в подкаталоге внешнего домена?

Итак, мне удалось решить эту проблему с помощью nginx. Я отказался от использования workers, так как мало что о них знаю…

Суть в том, что мой корневой домен будет указывать на сервер, которым я управляю, а nginx объединит обе платформы.

server
{
    listen 80;
    server_name test.ultraluz.com.br;

    location /blog {
        proxy_set_header Host forum.ultraluz.com.br;
        proxy_pass https://forum.ultraluz.com.br/;
        proxy_redirect https://forum.ultraluz.com.br/ http://test.ultraluz.com.br/blog;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

       location /stylesheets {
        proxy_set_header Host forum.ultraluz.com.br;
        proxy_pass https://forum.ultraluz.com.br/stylesheets;
        proxy_redirect https://forum.ultraluz.com.br/ http://test.ultraluz.com.br/blog;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    
       location /assets {
        proxy_set_header Host forum.ultraluz.com.br;
        proxy_pass https://forum.ultraluz.com.br/assets;
        proxy_redirect https://forum.ultraluz.com.br/ http://test.ultraluz.com.br/blog;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

        location /svg-sprite {
        proxy_set_header Host forum.ultraluz.com.br;
        proxy_pass https://forum.ultraluz.com.br/svg-sprite;
        proxy_redirect https://forum.ultraluz.com.br/ http://test.ultraluz.com.br/blog;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

        location /404-body {
        proxy_set_header Host forum.ultraluz.com.br;
        proxy_pass https://forum.ultraluz.com.br/404-body;
        proxy_redirect https://forum.ultraluz.com.br/ http://test.ultraluz.com.br/blog;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

        location /message-bus {
        proxy_set_header Host forum.ultraluz.com.br;
        proxy_pass https://forum.ultraluz.com.br/message-bus;
        proxy_redirect https://forum.ultraluz.com.br/ http://test.ultraluz.com.br/blog;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

               location /latest.json {
        proxy_set_header Host forum.ultraluz.com.br;
        proxy_pass https://forum.ultraluz.com.br/latest.json;
        proxy_redirect https://forum.ultraluz.com.br/ http://test.ultraluz.com.br/blog;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

                       location /javascripts {
        proxy_set_header Host forum.ultraluz.com.br;
        proxy_pass https://forum.ultraluz.com.br/javascripts;
        proxy_redirect https://forum.ultraluz.com.br/ http://test.ultraluz.com.br/blog;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

                            location /logs {
        proxy_set_header Host forum.ultraluz.com.br;
        proxy_pass https://forum.ultraluz.com.br/logs;
        proxy_redirect https://forum.ultraluz.com.br/ http://test.ultraluz.com.br/blog;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

                                  location /u {
        proxy_set_header Host forum.ultraluz.com.br;
        proxy_pass https://forum.ultraluz.com.br/u;
        proxy_redirect https://forum.ultraluz.com.br/ http://test.ultraluz.com.br/blog;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Это работает, но у меня есть одна проблема. Когда люди переходят по адресу /blog, они видят страницу 404 от Discourse вместо главной страницы? Не уверен, что может быть причиной этого?

Вы идете по неверному пути, пытаясь перечислить каждый отдельный маршрут в вашем файле nginx. Это никогда не сработает.

Сначала установите Discourse на сервере, следуя инструкциям по адресу Serve Discourse from a subfolder (path prefix) instead of a subdomain. Используйте для этого внутреннее доменное имя, чтобы конфигурация работала. Вам также потребуется удалить шаблоны SSL из файла app.yml.

Затем на сервере, где вы управляете фактическим доменом, добавьте один блок location с подпапкой и используйте необходимые директивы прокси для перенаправления трафика на сервер, где расположен Discourse.

Я следовал этой инструкции…

 DISCOURSE_RELATIVE_URL_ROOT: /blog
 DISCOURSE_HOSTNAME: forum.ultraluz.com.br

Поэтому я ожидал, что смогу получить доступ к форуму по адресу forum.ultraluz.com.br/blog, но получаю ошибку «отказ в подключении». Именно это, на мой взгляд, вызывает путаницу в этой инструкции.

Неясно, какой URL следует использовать для загрузки ресурсов…

Если вы следовали руководству Serve Discourse from a subfolder (path prefix) instead of a subdomain, но в итоге не можете получить доступ к форуму, значит, вы где-то серьёзно ошиблись.

Удалите сервер и попробуйте снова.