Fondo
Estoy trabajando para agregar una pila de blog Dockerizada (WordPress + MariaDB) a nuestro sitio web existente que se ejecuta en Nginx. location /
ya sirve el sitio web, y me han indicado que agregue lógica a la configuración de Nginx donde /blog
redirige todo el tráfico al contenedor Docker.
Intento 1
- Empecé el contenedor de wordpress en
localhost:9999
en el servidor - Usando las referencias, agregué lógica adicional:
location ^~ /blog {
proxy_pass http://localhost:9999;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
}
Problema:
WordPress redirigido http://server/blog
a http://wp-admin/install.php
y como no había una regla para esto, obtuve un 404.
Intento 2
cambié el location
procesar /blog
así como cualquier URL que contenga wp-.*
. La suposición es que todas las páginas de WordPress tendrán esa URL.
location ~ ^/(blog|wp-.*) {
Esto funcionó a través de la configuración de WordPress. Y si visito explícitamente http://server/wp-admin
Puedo ir a las páginas de administración del blog.
Problema:
- Las páginas del blog de WordPress no satisfacen las expresiones regulares anteriores y devuelven un 404. p.
http://server/?p=31
es un enlace a una publicación de blog.
Intento 3
Solo por el gusto de hacerlo, redirigí location /
al contenedor Docker y el blog funciona perfectamente. Pero esa no es la declaración del problema que tengo, lamentablemente.
Pregunta
¿Qué debo hacer a continuación para atender todas las solicitudes específicas de wordpress? Siento que me estoy metiendo en un bucle de lucha contra las expresiones regulares cuando podría haber una solución más elegante aquí.
Referencias
- subrutas de paso de proxy nginx no redirigidas
- ¿Cómo puedo tener la misma regla para dos ubicaciones en la configuración de NGINX?
- redirección nginx al contenedor docker
shawn c
Según una pregunta SO autorespondida https://stackoverflow.com/a/41479776/1264360
// add these lines to wp-config.php
define('WP_SITE_URL', 'http://example.com/blog');
define('WP_HOME', 'http://example.com/blog');
$_SERVER['REQUEST_URI'] = '/blog' . $_SERVER['REQUEST_URI'];
-
$_SERVER['REQUEST_URI'] = '/blog' . $_SERVER['REQUEST_URI'];
es donde está, gracias.– WadeWilliams
4 oct 2018 a las 21:43
-
¿Puedes marcarla como la respuesta para ayudar a otros en el futuro?
– Shawn C.
4 oct 2018 a las 22:13
-
@vish 👆 ¿harías los honores si esto respondiera a tu pregunta?
– WadeWilliams
4 oct 2018 a las 23:45
Supongamos que desea que su sitio web de wordpress sea accesible a través de wp
subdirectorio. Por ejemplo:
Así es como logré que esto funcionara sin alterar wp-config.php. La clave es usar working_dir
directiva.
docker-compose.yml
version: '3'
services:
nginx:
image: nginx:1.17
container_name: nginx
restart: unless-stopped
depends_on:
- wordpress
ports:
- '80:80'
networks:
- app-network
volumes:
- ./config/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
db:
image: mysql:5.7
container_name: db
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
networks:
- app-network
wordpress:
container_name: wordpress
depends_on:
- db
image: wordpress:latest
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
working_dir: /var/www/html/wp
volumes:
- wordpress:/var/www/html/wp
networks:
- app-network
networks:
app-network:
driver: bridge
volumes:
db_data:
wordpress:
nginx.conf
events {}
http {
server {
listen 80;
location /wp/ {
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_pass http://wordpress;
}
}
}