Хобрук: Ваш путь к мастерству в программировании

Слишком много редиректов с обратным прокси

Настройка:

  • облачный DNS
  • docker-compose
  • обратный прокси nginx
  • вордпресс фпс
  • PHP-обработчик nginx

Проблема

Слишком много редиректов, как в этих логах:

Attaching to wp_db, wp, wp_web
wp_db     | 2020-01-27 12:13:10+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 1:10.4.11+maria~bionic started.
wp_db     | 2020-01-27 12:13:10+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
wp_db     | 2020-01-27 12:13:10+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 1:10.4.11+maria~bionic started.
wp        | [27-Jan-2020 12:13:10 UTC] PHP Warning:  mysqli::__construct(): (HY000/2002): Connection refused in Standard input code on line 22
wp        | 
wp        | MySQL Connection Error: (2002) Connection refused
wp_db     | 2020-01-27 12:13:11 0 [Note] mysqld (mysqld 10.4.11-MariaDB-1:10.4.11+maria~bionic-log) starting as process 1 ...
wp_db     | 2020-01-27 12:13:11 0 [Note] InnoDB: Using Linux native AIO
wp_db     | 2020-01-27 12:13:11 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
wp_db     | 2020-01-27 12:13:11 0 [Note] InnoDB: Uses event mutexes
wp_db     | 2020-01-27 12:13:11 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
wp_db     | 2020-01-27 12:13:11 0 [Note] InnoDB: Number of pools: 1
wp_db     | 2020-01-27 12:13:11 0 [Note] InnoDB: Using SSE2 crc32 instructions
wp_db     | 2020-01-27 12:13:11 0 [Note] mysqld: O_TMPFILE is not supported on /tmp (disabling future attempts)
wp_db     | 2020-01-27 12:13:11 0 [Note] InnoDB: Initializing buffer pool, total size = 256M, instances = 1, chunk size = 128M
wp_db     | 2020-01-27 12:13:11 0 [Note] InnoDB: Completed initialization of buffer pool
wp_db     | 2020-01-27 12:13:11 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
wp_db     | 2020-01-27 12:13:11 0 [Note] InnoDB: 128 out of 128 rollback segments are active.
wp_db     | 2020-01-27 12:13:11 0 [Note] InnoDB: Creating shared tablespace for temporary tables
wp_db     | 2020-01-27 12:13:11 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
wp_db     | 2020-01-27 12:13:11 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB.
wp_db     | 2020-01-27 12:13:11 0 [Note] InnoDB: 10.4.11 started; log sequence number 20529037; transaction id 14604
wp_db     | 2020-01-27 12:13:11 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
wp_db     | 2020-01-27 12:13:11 0 [Note] Plugin 'FEEDBACK' is disabled.
wp_db     | 2020-01-27 12:13:11 0 [Note] Server socket created on IP: '::'.
wp_db     | 2020-01-27 12:13:11 0 [Note] InnoDB: Buffer pool(s) load completed at 200127 12:13:11
wp_db     | 2020-01-27 12:13:11 0 [Warning] 'proxies_priv' entry '@% root@8da7502dc057' ignored in --skip-name-resolve mode.
wp_db     | 2020-01-27 12:13:11 0 [Note] Reading of all Master_info entries succeeded
wp_db     | 2020-01-27 12:13:11 0 [Note] Added new Master_info '' to hash table
wp_db     | 2020-01-27 12:13:11 0 [Note] mysqld: ready for connections.
wp_db     | Version: '10.4.11-MariaDB-1:10.4.11+maria~bionic-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  mariadb.org binary distribution
wp        | [27-Jan-2020 12:13:13] NOTICE: fpm is running, pid 1
wp        | [27-Jan-2020 12:13:13] NOTICE: ready to handle connections
wp        | 192.168.48.4 -  27/Jan/2020:12:13:56 +0000 "GET /index.php/wp-admin/install.php"     302
wp_web    | 172.28.0.4 - - [27/Jan/2020:12:13:56 +0000] "GET /index.php/wp-admin/install.php HTTP/1.1" 302 5 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:71.0) Gecko/20100101 Firefox/71.0" "MYSERVERIP, 162.158.90.139"
wp        | 192.168.48.4 -  27/Jan/2020:12:13:56 +0000 "GET /index.php/wp-admin/install.php" 302
wp_web    | 172.28.0.4 - - [27/Jan/2020:12:13:56 +0000] "GET /index.php/wp-admin/install.php HTTP/1.1" 302 5 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:71.0) Gecko/20100101 Firefox/71.0" "MYSERVERIP, 162.158.90.139"
// here is the loop

Конфигурации:

docker-compose.yml

version: '3'

services:
  wp_db:
    image: mariadb
    container_name: wp_db
    command: --transaction-isolation=READ-COMMITTED --log-bin=mysqld-bin --binlog-format=ROW
    restart: always
    volumes:
      - ./wp_db:/var/lib/mysql
    environment:
      - PUID=33
      - PGID=33
      - MYSQL_PASSWORD=wordpress # needs to be hardcoded
      - MYSQL_DATABASE=wordpress # needs to be hardcoded
      - MYSQL_USER=wordpress # needs to be hardcoded
      - MYSQL_ROOT_PASSWORD=***
    networks:
      - wordpress

  wp:
    image: wordpress:php7.4-fpm-alpine
    container_name: wp
    depends_on:
      - wp_db
    restart: always
    environment:
      - PUID=33
      - PGID=33
      - WORDPRESS_DB_USER=${MYSQL_WORDPRESS_USER}
      - WORDPRESS_DB_PASSWORD=${MYSQL_WORDPRESS_PASSWORD}
      - WORDPRESS_DB_NAME=${MYSQL_WORDPRESS_DB}
      - WORDPRESS_DB_HOST=wp_db
    volumes:
      - ./wordpress-la:/var/www/html:rw
    networks:
      - wordpress

  wp_web:
    build: ./wp_web
    container_name: wp_web
    restart: always
    volumes:
      - ./wordpress-la:/var/www/html
      - ./wp_web/nginx.conf:/etc/nginx/nginx.conf
    environment:
      - PUID=33
      - PGID=33
      - VIRTUAL_HOST=domain.com
      - LETSENCRYPT_HOST=domain.com
    depends_on:
      - wp
    networks:
      - wordpress
      - proxy-tier

networks:
  proxy-tier:

  wordpress:

nginx.conf для wp_web

worker_processes auto;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    keepalive_timeout  65;
    real_ip_header    X-Real-IP;

    upstream php {
        server wp:9000;
    }

    server {
        server_name domain.com;

        root /var/www/html;
        index index.php;

        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }

        location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }

        location / {
                try_files $uri $uri/ /index.php?$args;
        }

        location ~ \.php$ {
                #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
                include fastcgi.conf;
                fastcgi_intercept_errors on;
                fastcgi_pass php;
        proxy_redirect off;
        }

        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                expires max;
                log_not_found off;
        }
     }
}

Обратный прокси-сервер nginx автоматически создает свои конфигурации и просто перенаправляет запросы на wp_web (IIRC).

Проблема:

Как исправить цикл перенаправления? Все остальное вроде работает. У меня также есть другие контейнеры, работающие и доступные через domain2.com без проблем.

Заранее спасибо ;)


  • Похоже, что обратный прокси-сервер использует LetsEncrypt для HTTPS для адресата, отличного от https? Попробуйте добавить $_SERVER['HTTPS'] = 'on'; к wp-config.php, очистите кеш браузера и перезагрузите. Посмотрите, работает ли это. 27.01.2020
  • Я пробовал это раньше, клянусь! Большое спасибо, это действительно сработало... Просто не знаю, почему не в первый раз. 27.01.2020

Ответы:


1

Как сказал @Damocles, должно быть

$_SERVER['HTTPS'] = 'on'; в wp-config.php. Стандартная конфигурация

 if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
     $_SERVER['HTTPS'] = 'on';
 }

вроде не хватает.

27.01.2020
Новые материалы

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..

React Hooks: основы деструктуризации массива
Kent C. Dodds написал классный пост о том, как грядущая функция React под названием Hooks работает на капоте. Предстоящий хук React useState основан на деструктурировании массива, давайте..

Пакеты R, используемые в Tesla
Добро пожаловать обратно! R — очень популярный язык программирования, используемый множеством компаний, включая Tesla! Итак, давайте взглянем на некоторые пакеты R, которые использует Tesla...

Сокращение и слияние токенов для эффективных моделей VL: обзор
Часто в задачах, связанных с компьютерным зрением и НЛП, вычислительно затратная и требующая большого объема памяти обработка становится препятствием для более быстрого логического вывода модели, а..