Мне интересно, можно ли сопоставить каталог Wordpress и конкретный файл в одном месте, поэтому на данный момент у меня есть правило сопоставления только с каталогом wp-admin:
## Restricted Access directory
location ^~ /wp-admin/ {
auth_basic "Access Denied!";
auth_basic_user_file .users;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Я хотел бы также сопоставить wp-login.php
файл, но я не могу приступить к работе, я пробовал следующее:
location ^~ /(wp-admin/|wp-login.php) {
...
Ваша попытка не работает из-за того, как nginx выбирает location
директива. Блокирует использование ~
имеют приоритет перед теми, кто использует ^~
, так что .php
блок выбирается для wp-login.php
. Вероятно, лучший подход - поймать это внутри .php
блок:
location ~ \.php$ {
location ~ ^/wp-login\.php$ {
auth_basic "Access Denied!";
auth_basic_user_file .users;
}
fastcgi_pass unix:/var/run/php-fpm/www.sock;
...
}
Читая ваши комментарии к ответам mgorven, я считаю, что это то, чего вы пытаетесь достичь.
Добавьте этот блок перед блоком соответствия \ .php $.
location ~* ^/wp-admin/$ {
allow 192.168.0.10;
deny all;
include fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass your_back_endphp;
}
location ~* ^/wp-login.php$ {
allow 102.168.0.10;
deny all;
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass your_back_endphp;
}
С wp-admin у вас не может быть fastcgi_split_path_info, потому что это нарушит стили и обслуживаемые js.