С .htaccess дела имел более-менее, а вот в такой конфигурации (Linux, Nginx, php-fpm) сервер настраиваю впервые.
# favicon.ico
location = /favicon.ico {
log_not_found off;
access_log off;
}
# robots.txt
location = /robots.txt {
log_not_found off;
access_log off;
}
# assets, media
location ~* \.(?:css(\.map)?|js(\.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ {
expires 30d;
access_log off;
}
# svg, fonts
location ~* \.(?:svgz?|ttf|ttc|otf|eot|woff2?)$ {
add_header Access-Control-Allow-Origin "*";
expires 30d;
access_log off;
}
# gzip
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 8;
gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;
gzip_disable "msie6";
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/letsencrypt;
}
location = /.well-known/acme-challenge/ {
return 404;
}
# 404
try_files $fastcgi_script_name =404;
# default fastcgi_params
include fastcgi_params;
# fastcgi settings
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
fastcgi_index index.php;
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
# fastcgi params
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$base/:/usr/lib/php/:/tmp/";
location ~ /\.ht {
deny all;
# Запрещает доступ к файлам .htaccess и .htpasswd, которые могут быть в каталогах сайтов
}
location ~* \.(gif|jpeg|jpg|txt|png|tif|tiff|ico|jng|bmp|doc|pdf|rtf|xls|ppt|rar|rpm|swf|zip|bin|exe|dll|deb|cur)$ {
expires 168h;
# Включает кэширование на стороне браузера, сообщая тому, что "срок годности" указаных файлов - 168 часов (1 неделя)
}
location ~* \.(css|js)$ {
expires 180m;
# Кэширование для скриптов и стилей
}
# phpMyAdmin
location /phpmyadmin {
root /usr/share/;
index index.php;
location ~ ^/phpmyadmin/(.+\.php)$ {
try_files $uri =404;
root /usr/share/;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
root /usr/share/;
expires 1M;
}
}
# security headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# . files
location ~ /\.(?!well-known) {
deny all;
}
# Запрет авторизации в админ-панели для всех, кроме разрешенных IP
location = /wp-login.php {
try_files /does_not_exists @deny;
}
location /wp-admin/ {
try_files $uri $uri/ @deny ;
}
location @deny {
allow 192.168.111.0/24;
allow 000.000.000.000;
deny all;
include fastcgi_params;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$base/:/usr/lib/php/:/tmp/";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
# Запрет доступа к php-файлам в wp-includes
location ~* /wp-includes/.*.php$ {
deny all;
access_log off;
log_not_found off;
}
# Запрет доступа к php-файлам в wp-content
location ~* /wp-content/.*.php$ {
deny all;
access_log off;
log_not_found off;
}
# Запрет доступа к php-файлам в папке uploads
location ~* /(?:uploads|files)/.*.php$ {
deny all;
access_log off;
log_not_found off;
}
# Запрет доступа к php-файлам в папках themes
location ~* /themes/.*.php$ {
deny all;
access_log off;
log_not_found off;
}
# Запрет доступа к php-файлам в папках plugins
location ~* /plugins/.*.php$ {
deny all;
access_log off;
log_not_found off;
}
# Запрет доступа к xmlrpc.php
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
}
Об этом речь? Или я не понял чего-то?