У меня есть nginx установка, в которой я нуждаюсь для хостинга веб-сайтов в разработке так, чтобы другие люди могли проверить их.
Прямо сейчас я настроил виртуальный хост к единственному субдомену и в той символьной ссылке каталога I проекты, которые должны быть открыты для тестирования. Как Вы видите, имеют меня ограниченный доступ к целому сайту, но включил для определенного каталога, но хранения его частный с простым auth_basic.
PHP работает, но я продолжаю получать 404 с для чего-либо кроме / или/wp-admin/, все другие постоянные ссылки дает 404 с. Я сделал примерно все, чтобы заставить это работать, но я понятия не имею, что я делаю неправильно. Укажите на мою ошибку в следующей конфигурации:
server {
listen 80;
server_name dev.example.com;
client_max_body_size 20m;
server_tokens off;
root /srv/dev.example.com;
index index.php index.html index.htm;
location / {
deny all;
}
location /my-site {
allow all;
try_files $uri $uri/ /index.php?$args;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/auth.d/.htpasswd-my-site;
location ~ \.php$ {
include fastcgi_params;
fastcgi_index index.php;
fastcgi_pass php5-fpm-sock;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_intercept_errors on;
fastcgi_param HTTPS $https;
}
}
}
Спасибо!
ОБНОВЛЕНИЕ:
Этот запрос работал бы: http://dev.example.com/my-site/
, это привело бы к загрузке файла /srv/dev.example.com/my-site/index.php
.
Запрос к администраторскому интерфейсу Wordpress работал бы также: http://dev.example.com/my-site/wp/wp-admin
, также идя непосредственно в индексный файл: /srv/dev.example.com/my-site/wp/wp-admin/index.php
. Все в администраторе соединяет интерфейсом с работами, так как это не использует постоянные ссылки, но сырые данные вводятся.
Однако, как только я пытаюсь загрузить постоянную ссылку (я использую самый простой формат /%postname%/
) это перестало работать в нахождении его и try_files директиве в location /my-site {}
должен соответствовать им. Это означает, что маршруты, такие как следующее не работают:
http://dev.example.com/my-site/about
http://dev.example.com/my-site/contact
http://dev.example.com/my-site/etc
Я предполагаю, что следующие файлы не существуют в вашей файловой системе:
/srv/dev.example.com/my-site/about/index.{php,html,htm}
/srv/dev.example.com/my-site/contact/index.{php,html,htm}
/srv/dev.example.com/my-site/etc/index.{php,html,htm}
Ваша проблема возникает из-за того, что ваше резервное местоположение php вложено в / my-site
location и директива try_files
может работать не так, как вы ожидаете.
Действительно, try_files
принимает в качестве последнего параметра либо:
Для вариантов 1 и 2 это будет означать внутреннее перенаправление на указанный элемент. В вашем случае /index.php?$args
интерпретируется как URI, и nginx выполнит внутреннее перенаправление на него, если $ uri
, $ uri /
, ] $ uri / index.php
, $ uri / index.html
, $ uri / index.htm
отсутствуют.
Другой момент: вы используете вложенное расположение для обработки файлов php. Но поскольку ваш последний параметр try_files
- это URI /index.php?$args
, он не будет соответствовать местоположению вершины / my-site
, поэтому он обрабатывается серверный блок, и если URI не может быть преобразован в локальный файл, вы получите ответ HTTP 404.
Обратите внимание, что директива index
также будет подразумевать внутренние перенаправления на указанные файлы индекса , но так как URI начинаются с / my-site
, он всегда будет находиться в вашем местоположении php.
Таким образом, вы должны либо переместить это местоположение на тот же уровень, что и другие, либо префикс своего try_files
URI с префиксом местоположения вершины и убедитесь, что файл php находится в нужном месте.