#wordpress #docker #nginx
#wordpress #docker #nginx
Вопрос:
Привет, я пробовал разные вещи, но они приводят меня к начальной странице nginx, ошибка 403 или ошибка 404. В настоящее время я запускаю WordPress без php-fpm, но он работает не так хорошо, поэтому я хочу его изменить, но при этом у меня возникли проблемы.
Мой WordPress Docker-compose (без db):
wordpress:
container_name: wordpress
links:
- wordpress-db
depends_on:
- wordpress-db
image: wordpress:php7.4-fpm
ports:
- 9000:9000
restart: always
volumes:
- /media/storage/wordpress:/var/www/html
- .secrets/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
networks:
- wordpress
environment:
- TZ=Europe/Berlin
env_file:
- .secrets/wordpress.env
Мой файл nginx compose:
services:
nginx:
restart: always
container_name: nginx
image: cptdaydreamer/nginx:latest
ports:
- 80:80
- 443:443
- 4443:4443
volumes:
- /media/storage/log:/var/log/nginx
- /etc/ssl:/etc/ssl
external_links:
- wordpress
environment:
- TZ=Europe/Berlin
build:
context: /media/storage/nginx
dockerfile: Dockerfile
networks:
- nextcloudpi
- wordpress
- matomo
- php
А теперь важная часть. Моя конфигурация nginx:
http {
server_names_hash_bucket_size 64;
access_log off;
error_log /var/log/nginx/error.log;
autoindex_localtime on;
#more_clear_headers Server;
ssl_certificate /etc/ssl/tld.pem;
ssl_certificate_key /etc/ssl/tld.key;
gzip on;
gzip_min_length 1000;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css text/xml application/javascript application/json application/xml application/rss xml image/svg xml;
gzip_disable "MSIE [1-6].";
proxy_send_timeout 180s;
proxy_read_timeout 180s;
fastcgi_send_timeout 180s;
fastcgi_read_timeout 180s;
server {
listen 80 default_server;
server_name _;
server_name_in_redirect off;
location / {
return 404;
}
}
server {
listen 80;
listen [::]:80;
server_name tld.de cloud.tld.de www.tld.de stats.tld.de;
return 301 https://$host$request_uri;
}
# WordPress
server {
server_name tld.de www.tld.de ts.tld.de;
#access_log /var/log/nginx/wordpress-access.log;
error_log /var/log/nginx/wordpress-error.log;
listen 443 ssl http2;
listen [::]:443 ssl http2;
client_max_body_size 500m;
underscores_in_headers on;
root /var/www/html;
index index.php;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ .php$ {
try_files $uri =404;
fastcgi_split_path_info ^(. .php)(/. )$;
fastcgi_pass wordpress:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
Ошибки, которые я получаю, например, такие: индекс каталога /var/www/html запрещен.
Если я удалю $uri/
, например, я получу ошибку 404. Что мне нужно сделать, чтобы запустить мой экземпляр? Но я прав, что я могу использовать свой существующий экземпляр WordPress, и меняется только способ доступа к нему или нет?
Ответ №1:
вы прослушиваете ssl, но не указали путь к сертификатам?
вы случайно не используете какого-либо внешнего поставщика ssl, такого как Cloudflare? если да, то вам нужно либо прослушать порт 80 (который используется по умолчанию в Cloudflare), либо настроить в Cloudflare, чтобы получить https-сайт, в этом случае вам также необходимо указать свой собственный путь к сертификату.
Во-вторых, в вашем location /
блоке у меня есть это try_files $uri $uri/ /index.php?url=$uri;
и несколько других настроек
location / {
try_files $uri $uri/ /index.php?url=$uri;
}
location ~ .(php)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_read_timeout 3000;
proxy_connect_timeout 3000s;
proxy_send_timeout 3000;
proxy_read_timeout 3000;
}
fastcgi_pass 127.0.0.1:9000
будет по-другому, в вашем случае это wordpress:9000
Комментарии:
1. Я использую SSL-сертификат Cloudflare, это верно. Я определил это в части http. Другие мои контейнеры, такие как matomo, nextcloud и прочее, хорошо работают с конфигурацией для прослушивания на 443. Итак, что именно вы имеете в виду под прослушиванием на порту 80? Где и что тогда нужно прослушивать на порту 80? Я добавлю http-часть к вопросу.
2. Если я удалил индекс и root, я получаю только добро пожаловать в nginx!. В противном случае я получаю запрещенный индекс каталога «/ usr/ share/nginx / html/», что также неверно.
3. Я вижу, что такое uid
www-data
пользователя каталога/var/www/html
? вы можете попробовать создать ссылку на эту папкуroot /usr/share/nginx/html/
, которая должна принадлежатьwww-data
с uid 824. Вы на неправильном пути. Я что-то пропустил в учебнике, и теперь я перехожу на начальную страницу, но 13: Разрешение отказано для каждого изображения и содержимого wp-контента.