#wordpress #docker #nginx #docker-compose
Вопрос:
Я собираюсь создать веб-сайт с помощью docker-compose.
Когда пользователь входит в корневой каталог, он переходит в веб-приложение. Когда пользователь вводит http://example.com/blog, он должен перенаправить на wordpress.
Для этого я настроил докер-составьте так
version: "3"
services:
nginx:
image: nginx:latest
depends_on:
- web-app
- wordpress
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
ports:
- 80:80
mysql:
image: mysql:5.7.29
container_name: mysql
restart: always
volumes:
- ./data/mysql/data:/var/lib/mysql
wordpress:
depends_on:
- mysql
image: wordpress:latest
ports:
- 8000:80
restart: always
volumes:
- ./data/blog:/var/www/html/wp-content
- ./blog/wp-config.php:/var/www/html/wp-config.php
web-app:
build: ./app
depends_on:
- mysql
restart: always
command: npm start
environment:
- TZ=UTC
- NODE_ENV=production
networks:
default:
external:
name: common
И это моя конфигурация nginx
worker_processes auto;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '[$time_local] $remote_addr - $request request_time: $request_time';
access_log /var/log/nginx/access.log main;
gzip on;
gzip_http_version 1.1;
gzip_vary on;
gzip_comp_level 6;
gzip_proxied any;
gzip_types text/plain text/html text/css application/json application/javascript application/x$
# make sure gzip does not lose large gzipped js or css files
# see http://blog.leetsoft.com/2007/07/25/nginx-gzip-ssl.html
gzip_buffers 16 8k;
server {
listen 80;
charset utf-8;
location /blog/ {
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;
}
location / {
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_redirect off;
proxy_pass http://web-app:3000;
}
}
}
И я обновил wp-config.php и установите URL-адрес веб-сайта.
define('WP_SITE_URL', 'https://example.com/blog');
define('WP_SITEURL', 'https://example.com/blog');
define('WP_HOME', 'https://example.com/blog');
Однако, когда я войду в https://example.com/blog, он возвращает ERR_TOO_MANY_REDIRECTS
ответ.
Я просмотрел много статей, и в некоторых из них говорится, что это потому, что я использую cloudflare. Как я могу решить вышеуказанную проблему?
Комментарии:
1. Это не очень хорошее решение, но оно может помочь на некоторое время, пока вы не найдете причину:
remove_action( 'template_redirect', 'redirect_canonical' );
Добавьте эту строку вfunctions.php
файл.
Ответ №1:
В вашем config.php ты сделаешь это :
// Define the website URL
define('WP_SITEURL', getenv_docker('WORDPRESS_SITEURL', 'https://example.com/blog'));
// Define the website Home page
define('WP_HOME', getenv_docker('WORDPRESS_HOME', 'https://example.com/blog'));
// Rewrite your access URL to the admin page
$_SERVER['REQUEST_URI'] = str_replace("/wp-admin/", "/blog/wp-admin/", $_SERVER['REQUEST_URI']);
Если вы не версируете свои ресурсы wordpress, используйте напрямую переменные docker compose, подобные этому, вместо использования config.php файл :
WORDPRESS_CONFIG_EXTRA: |
define('WP_HOME','https://example.com/blog');
define('WP_SITEURL','https://example.com/blog');
$_SERVER['REQUEST_URI'] = str_replace("/wp-admin/", "/blog/wp-admin/", $_SERVER['REQUEST_URI']);
И в окне настройки файлов-составьте.yml вы помещаете следующие переменные среды :
environment:
...
- WORDPRESS_SITEURL="https://example.com/blog"
- WORDPRESS_HOME="https://example.com/blog"