Declaración oficial de Discourse sobre la configuración en subcarpetas
Admitimos configuraciones de subcarpetas para nuestros clientes empresariales y superiores. Debido a la gran complejidad de la configuración técnica, recomendamos encarecidamente no utilizar esta configuración a menos que tenga mucha experiencia en configuraciones personalizadas de subcarpetas.
Es fundamental que comprenda a fondo
- La configuración de NGINX en el contenedor Docker de Discourse
- El reenvío seguro de la IP original mediante encabezados personalizados en la cadena del proxy
- La limitación de velocidad en el servidor proxy frontal
Si todo esto le suena extraño, le recomendamos encarecidamente que evite esta configuración.
Para servir Discourse desde una subcarpeta (también conocida como con un prefijo de ruta) en su dominio, como https://www.example.com/=SUBFOLDER=, ¡así es como debe hacerlo!
Configuración de Docker
En la sección env de su archivo yml del contenedor Docker, agregue la configuración DISCOURSE_RELATIVE_URL_ROOT con la subcarpeta que desea usar. Asegúrese de que no termine con una /.
Editar esto actualizará toda la guía.
env:
...
DISCOURSE_RELATIVE_URL_ROOT: /=SUBFOLDER=
La sección run necesita algunos cambios para enviar todas las rutas de Discourse al lugar correcto. Aquí hay una sección run completa con soporte para subcarpetas:
run:
- exec:
cd: $home
cmd:
- mkdir -p public/=SUBFOLDER=
- cd public/=SUBFOLDER= & ln -s ../uploads & ln -s ../backups
- replace:
global: true
filename: /etc/nginx/conf.d/discourse.conf
from: proxy_pass http://discourse;
to: |
rewrite ^/(.*)$ /=SUBFOLDER=/$1 break;
proxy_pass http://discourse;
- replace:
filename: /etc/nginx/conf.d/discourse.conf
from: etag off;
to: |
etag off;
location /=SUBFOLDER= {
rewrite ^/=SUBFOLDER=/?(.*)$ /$1;
}
- replace:
filename: /etc/nginx/conf.d/discourse.conf
from: $proxy_add_x_forwarded_for
to: $http_your_original_ip_header
global: true
$http_your_original_ip_header representa Your-Original-Ip-Header, que es un Encabezado de Confianza que usted establece en el origen y que contiene la IP real del cliente.
Esto es necesario porque el tráfico pasa a través de un proxy central; si Discourse tiene una IP pública, puede falsificarla. Si Discourse es privado, es posible que pueda arreglárselas con X-Forwarded-For.
Después de realizar estos cambios, inicie su contenedor Docker como de costumbre, o reconstruya si está cambiando un contenedor existente.
./launcher bootstrap app
o
./launcher rebuild app
Se adjunta un ejemplo completo de archivo yml para un contenedor independiente.
subfolder-sample.yml (3.1 KB)
Preocupaciones sobre la limitación de velocidad
Si va a utilizar esta configuración, probablemente querrá limitar la velocidad de las solicitudes antes de que lleguen a NGINX en el contenedor, lo que significa que probablemente evitará usar nuestra plantilla de limitación de velocidad. Es muy difícil configurar NGINX en el contenedor para limitar en una IP reasignada y requeriría cambios complejos en la plantilla.
Publicaciones existentes
Si realizó esto con un sitio existente que estaba en un subdominio, encontrará que sus subidas están rotas. Hay una herramienta que puede ayudar a corregir todas las rutas para incluir la subcarpeta. Primero, ingrese al contenedor Docker y navegue al directorio de Discourse:
cd /var/discourse
./launcher enter app
cd /var/www/discourse
Luego, ejecute el comando de remapeo después de hacer una copia de seguridad:
RAILS_ENV=production bundle exec script/discourse remap '/uploads' '/=SUBFOLDER=/uploads'
Vea también: Use a subfolder (path prefix) to serve Discourse with multiple servers sharing a domain para configuraciones más esotéricas.
robots.txt
Ahora que Discourse se ejecuta en una subcarpeta, no puede servir su archivo robots.txt para controlar qué rutas son rastreadas por los rastreadores web. Los rastreadores buscarán el archivo robots.txt de su sitio principal (https://www.example.com/robots.txt). Debe copiar el contenido del archivo robots.txt de Discourse (que se encuentra en https://www.example.com/=SUBFOLDER=/robots.txt) y colocarlo en el archivo robots.txt de su sitio principal.