Рейтинг:0

dockerized nginx try_files приводит к тому, что URL-адрес dockerized wordpress (кроме /wp-admin) выдает ошибку 500 Internal Server Error или автоматическое перенаправление на корневой домен

флаг cn

Я успешно настроил сайт WordPress, работающий на докеризованном nginx. Когда сайт WordPress запущен и работает, я могу перейти на домашнюю страницу: https://мой_домен.com или любые ссылки или после wp-админ/... без каких-либо проблем.

Но когда я иду в https://мой_домен.com/пример-страницы или же https://мой_домен.com/post-id или любой маршрут, кроме после \wp-админ тогда:

сразу перенаправляет на корневой домен http://мой_домен.com если я установлю:

try_files $uri $uri/ /index.php$is_args$args;

или не перенаправлять автоматически на корневой домен, а возвращать внутренняя ошибка сервера 500 если я установлю (добавлю / после index.php):

try_files $uri $uri/ /index.php/$is_args$args;

с маршрутом исключения /вп-админ/ при доступе перенаправляет правильно на https://мой_домен.com/wp-admin/логин.php если вы не вошли в систему и https://мой_домен.com/wp-admin/ если вы вошли в систему, во всех двух случаях try_files выше.

Вот мой конфиг nginx в /nginx/default.conf:

сервер {
    слушать 80;
    слушать [::]:80;
    имя_сервера мой_домен.com www.мой_домен.com;

    место расположения / {
        вернуть 301 https://my_domain.com$request_uri;
    }
}


сервер {
    слушать 443 ssl http2;
    слушать [::]:443 ssl http2;
    имя_сервера мой_домен.com www.мой_домен.com;

    индекс index.php index.html index.htm;

    корень /var/www/html/wordpress;

    SSL включен;
    server_tokens отключены;
    ssl_certificate /etc/nginx/ssl/live/my_domain.com/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/live/my_domain.com/privkey.pem;
    ssl_dhparam /etc/nginx/dhparam/dhparam-2048.pem;

    ssl_buffer_size 8k;
    ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
    ssl_prefer_server_ciphers включен;
    ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;

    add_header X-Frame-Options «SAMEORIGIN» всегда;
    add_header X-XSS-Защита "1; режим = блок" всегда;
    add_header X-Content-Type-Options «нюхать» всегда;
    add_header Referrer-Policy «без реферера при понижении» всегда;
    add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" всегда;
    # add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
    # включайте строгую транспортную безопасность, только если вы понимаете последствия


    место расположения / {
          try_files $uri $uri/ /index.php$is_args$args;

          proxy_pass http://wordpress_host:80; 
          proxy_set_header Хост $http_host;
          proxy_set_header X-Forwarded-Proto $ схема;
    }

    расположение ~ \.php$ {
          try_files $uri = 404;
          fastcgi_split_path_info ^(.+\.php)(/.+)$;
          proxy_pass http://wordpress_host:80;
          fastcgi_index index.php;
          включить fastcgi_params;
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
          fastcgi_param PATH_INFO $fastcgi_path_info;

          proxy_set_header Хост $http_host;
          proxy_set_header X-Forwarded-Proto $ схема;
    }

    местоположение ~ /\.ht {
          отрицать все;
    }
        
    местоположение = /favicon.ico { 
          log_not_found выключен; доступ_лог выключен; 
    }

    местоположение = /robots.txt { 
          log_not_found выключен; доступ_лог выключен; позволять все; 
    }

    расположение ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
          истекает макс.;
          log_not_found выключен;
    }
}

Я также настраиваю в wp-config.php:

определить('FORCE_SSL_ADMIN', правда); 

если ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') 
$_SERVER['HTTPS']='включено';

определить('WP_SITEURL', 'https://www.my_domain.com/');
определить('WP_HOME', 'https://www.my_domain.com/');

Обновлять:

Здесь файл компоновки докера:

версия: «3»;
Сервисы:
  нгинкс:
    изображение: nginx: стабильный-альпийский
    порты:
      - "80:80" # nginx слушает на 80
      - "443:443"
    тома:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
      - ./wordpress/приложение:/var/www/html/wordpress
  дБ:
    изображение: MySQL: 8.0
    имя_контейнера: пример базы данных
    перезапуск: если не остановлен
    env_file: ./wordpress/app/.env
    среда:
      - MYSQL_DATABASE=пример
    тома:
      - ./wordpress/dbdata:/var/lib/mysql
      #- ./wordpress/db/db.sql:/docker-entrypoint-initdb.d/install_wordpress.sql #если у вас есть db.sql ввода проекта здесь
    команда: '--default-authentication-plugin=mysql_native_password'

  wordpress_host:
    зависит от:
      - дб
    изображение: вордпресс
    имя_контейнера: wordpress_host
    порты:
      - "8080:80"
    перезапуск: если не остановлен
    env_file: ./wordpress/app/.env
    среда:
      -WORDPRESS_DB_HOST=дб:3306
      - WORDPRESS_DB_USER=корень
      - WORDPRESS_DB_PASSWORD=корень
      - WORDPRESS_DB_NAME=пример
    тома:
      - ./wordpress/приложение:/var/www/html/wordpress
тома:
  wordpress-хост:
  dbdata

: .env-файл:

MYSQL_ROOT_PASSWORD = корень
MYSQL_USER=пример
MYSQL_PASSWORD=пароль
Zeitounator avatar
флаг fr
Если вы собираетесь использовать быстрый cgi, вы используете неправильный образ WordPress.Посмотрите на теги `*-fpm`. Ваша текущая настройка перенаправляет вызовы из вашей конфигурации nginx на сервер apache, работающий внутри образа `wordpress:latest`. Я почти уверен, что ваша проблема исходит оттуда.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.