subruta nginx para redirigir al contenedor docker de wordpress

3 minutos de lectura

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.phpy 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

  1. subrutas de paso de proxy nginx no redirigidas
  2. ¿Cómo puedo tener la misma regla para dos ubicaciones en la configuración de NGINX?
  3. redirección nginx al contenedor docker

avatar de usuario
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:

http://tu-sitio-web.com/wp

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

¿Ha sido útil esta solución?

subruta nginx para redirigir al contenedor docker de wordpress

3 minutos de lectura

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.phpy 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

  1. subrutas de paso de proxy nginx no redirigidas
  2. ¿Cómo puedo tener la misma regla para dos ubicaciones en la configuración de NGINX?
  3. redirección nginx al contenedor docker

avatar de usuario
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:

http://tu-sitio-web.com/wp

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

¿Ha sido útil esta solución?