Ich werde eine Website mit docker-compose erstellen.
Wenn der Benutzer das Stammverzeichnis betritt, wechselt es zur Web-App. Wenn der Benutzer die http://example.com/blog es sollte zu WordPress umleiten.
Dazu habe ich Docker-Compose wie folgt konfiguriert
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
Und das ist meine Nginx-Konfiguration
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;
}
}
}
Und ich habe die wp-config.php aktualisiert und die Website-URL festgelegt.
define('WP_SITE_URL', 'https://example.com/blog');
define('WP_SITEURL', 'https://example.com/blog');
define('WP_HOME', 'https://example.com/blog');
Allerdings, wenn ich eintrete https://example.com/blog es gibt die zurück ERR_TOO_MANY_REDIRECTS
Antwort.
Ich habe viele Artikel durchsucht und einige davon sagen, dass es daran liegt, dass ich Cloudflare verwende. Wie kann ich das obige Problem lösen?
Nemoxi
In deiner config.php
Du machst das :
// 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']);
Wenn Sie Ihre WordPress-Ressourcen nicht versionieren, verwenden Sie direkt die Docker-Compose-Variablen wie diese, anstatt die zu verwenden config.php
Datei :
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']);
Und in der Datei docker-compose.yml
Sie setzen die folgenden Umgebungsvariablen:
environment:
...
- WORDPRESS_SITEURL="https://example.com/blog"
- WORDPRESS_HOME="https://example.com/blog"
Zum Initialisieren WordPress in einem Unterverzeichnis wie /blog
du kannst den … benutzen working_dir
Attribut.
Der Standard WordPress Bild verwendet /var/www/html
wie Wurzel und Sie können zu verschieben /var/www/html/blog
an dieser Stelle zu initialisieren.
# ...
wordpress:
image: wordpress:apache
working_dir: /var/www/html/blog
volumes:
- ./data/blog:/var/www/html/blog/wp-content
- ./blog/wp-config.php:/var/www/html/blog/wp-config.php
# ...
Jetzt können Sie zu navigieren http://localhost/blog .
Vollständiges Beispiel
Folgend ist eine vollständige docker-compose.yml
Beispiel:
version: '3.1'
x-wordpress: &wordpress
depends_on:
- db
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
working_dir: /var/www/html/blog
volumes:
- wp_root:/var/www/html/blog
- ./wp-content/plugins:/var/www/html/blog/wp-content/plugins
- ./wp-content/themes:/var/www/html/blog/wp-content/themes
- ./wp-content/uploads:/var/www/html/blog/wp-content/uploads
- ./wp-content/languages:/var/www/html/blog/wp-content/languages
services:
# Database
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
- ./backup/blog.sql:/docker-entrypoint-initdb.d/dump.sql:ro
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
# phpmyadmin
phpmyadmin:
depends_on:
- db
image: phpmyadmin/phpmyadmin
ports:
- 8080:80
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: password
# WordPress
wordpress:
<<: *wordpress
image: wordpress:apache
ports:
- 80:80
wpcli:
<<: *wordpress
image: wordpress:cli
volumes:
wp_root:
driver_opts:
type: tmpfs
device: tmpfs
db_data:
Steve Lng C
Was bei mir tatsächlich funktioniert hat, ist diese Kombination:
nginx :
upstream test {
least_conn;
server test_wordpress_1;
}
server {
listen 443 ssl;
server_name slapps.fr;
#...
#SSL CONFIG
#...
location /test/ {
#rewrite ^/test/(.*)$ /$1 break; #This didn't work for me
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_set_header X-Forwarded-Proto $scheme;
proxy_pass http://test/;
}
}
wp-config.php
:
define('WP_HOME','https://slapps.fr/test');
define('WP_SITEURL','https://slapps.fr/test');
$_SERVER['REQUEST_URI'] = str_replace("/wp-admin/", "/test/wp-admin/", $_SERVER['REQUEST_URI']);
Irgendwie kommt folgende config rein docker-compose.yml
hat bei mir nicht funktioniert, die $_SERVER
würde nicht durchgehen, aber die ersten Defines taten es
WORDPRESS_CONFIG_EXTRA: |
define( 'WP_HOME', 'https://slapps.fr/test' );
define( 'WP_SITEURL', 'https://slapps.fr/test' );
$$_SERVER['REQUEST_URI'] = str_replace("/wp-admin/", "/test/wp-admin/", $$_SERVER['REQUEST_URI']);
143495 0 0 cookie-check Installieren Sie WordPress im Unterverzeichnis mit docker-compose und nginx yes
Dies ist keine gute Lösung, aber es kann eine Weile helfen, bis Sie die Ursache gefunden haben:
remove_action( 'template_redirect', 'redirect_canonical' );
Fügen Sie diese Zeile der hinzufunctions.php
Datei.– Iwan Schatsky
5. Juni 2021 um 14:03 Uhr