Настройте nginx с двумя локациями php-fpm fastcgi_pass

Для сайта wordpress, использующего nginx + php-fpm, мне интересно применить более длинную директиву fastcgi_read_timeout только к каталогу / wp-admin, чтобы избежать тайм-аутов для трудоемких административных задач.

Единственная проблема с приведенным ниже примером кода - это когда я посещаю http://webpage.org/wp-admin Я получаю 404. Когда я посещаю http://webpage.org/wp-admin/index.php публикаций на странице.

Используя директиву nginx add-header для отладки, я смог определить это при посещении http://webpage.org/wp-admin nginx выбирает location ~ .php $ вместо location ^ ~ / wp-admin.

Есть идеи, как это решить? Спасибо

location ^/wp-admin/.*.(php|phps)$  {

    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
    fastcgi_keep_conn on;

    fastcgi_read_timeout 120;
}



location ~ \.php$ {

    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
    fastcgi_keep_conn on;

   }

person Peter    schedule 15.11.2016    source источник
comment
Глупое предложение. В вашей директиве try_files для блока /wp-admin вы можете попробовать URI в качестве каталога (поскольку wp-admin является каталогом в Wordpress), прежде чем возвращать 404. Так что измените его, чтобы читать try_files $uri $uri/ =404; С точки зрения приоритета ваша конфигурация верна.   -  person Keenan Lawrence    schedule 15.11.2016
comment
Спасибо, ваше предложение сработало. Чтобы понять, почему я нашел здесь полезную ссылку, stackoverflow.com/questions/17798457/.   -  person Peter    schedule 16.11.2016
comment
Ура, это было намерением. Рад, что у вас все заработало :) P.S Вы также можете использовать curl -I http://webpage.org/wp-admin для проверки заголовков из интерфейса командной строки (Unix), но отладка Chrome или Firebug одинаково хороши.   -  person Keenan Lawrence    schedule 16.11.2016


Ответы (1)


  • Я протестировал изменение директивы try_files, предложенное Кинаном Лоуренсом, которое помогло мне решить проблему.

  • Полезное объяснение директивы nginx try_files можно найти здесь: как заставить работать эту директиву try_files?

  • Для устранения этой проблемы я использовал директиву add_header, помещая по одной директиве в каждое место. Затем в браузере Chrome я открыл Инструменты разработчика, щелкнул вкладку Сеть, щелкнул Запись сетевого журнала, затем загрузил тестовый wp-admin / page. . Существует вкладка Заголовок, на которую вы затем можете нажать, чтобы проверить, где загружена ваша страница. См. Также https://serverfault.com/questions/404626/how-to-output-variable-in-nginx-log-for-debugging

  • Ниже приведена рабочая конфигурация, включающая директивы заголовка для отладки.

     location ~* ^/wp-admin/.*.(php|phps)$  {
    
        add_header X-debug-message "This page processed from location ^~ /wp-admin . uri =  $uri ." always;
    
        try_files $uri $uri/ =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
        fastcgi_keep_conn on;
    
        fastcgi_read_timeout 120;
    }
    
    
    
    location ~ \.php$ {
    
    add_header X-debug-message "This page processed from location ~ \.php uri =  $uri ." always;
    
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
        fastcgi_keep_conn on;
    
       }
    
person Peter    schedule 16.11.2016