Итак, у меня есть веб-сайт WordPress, работающий за nginx -> лак -> httpd
Правило htaccess для wp-login.php установлено как:
<Files wp-login.php>
allow from client ip
deny from all
</Files>
Раньше это работало нормально без использования лака, но когда я поместил лак посередине между nginx и httpd, возникла проблема с кэшированием или переадресацией IP.
Поскольку я могу легко изменить конфигурацию веб-сервера, я могу легко отключить/включить лак для сайта. Итак, в качестве теста я изменил правило htaccess на:
<Files wp-login.php>
allow from Server Public IP
deny from all
</Files>
Это сделало wp-login доступным для всех. Затем я отключил лак и оставил публичный IP-адрес сервера в htaccess, и теперь никто не может получить доступ к странице (что и должно произойти).
Итак, виноват лак.
У меня настроен mod_cloudflare на apache. Я также проверил, переключив его на mod_remoteip, но безрезультатно.
Вот мои шаблоны vhost nginx: 443, лак: 82 и apache: 8181 (этот IP-адрес 108.148.54.124 является примером для общедоступного IP-адреса сервера):
сервер {
слушать 108.148.54.124:443 ssl http2;
server_name %domain_idn% %alias_idn%;
access_log /usr/local/apache/domlogs/%domain%.bytes bytes;
журнал доступа /usr/local/apache/domlogs/%domain%.log заполнен;
error_log /usr/local/apache/domlogs/%domain%.error.log ошибка;
ssl_certificate %ssl_cert_path%/%domain%.bundle;
ssl_certificate_key %ssl_key_path%/%domain%.key;
ssl_протоколы TLSv1.3;
ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA!RC4:EECDH:!RC4:!aNULL :!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;
ssl_prefer_server_ciphers включен;
ssl_session_cache общий: SSL: 10 м;
ssl_session_timeout 60 м;
место расположения / {
расположение ~.*\.(3gp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|html|htm|txt |js|css|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso|woff|ttf|svg|eot|sh|webp)$ {
корень %docroot%;
истекает макс.;
try_files $uri $uri/ @backend;
}
error_page 405 = @backend;
error_page 500 = @custom;
add_header X-Cache «УДАЛ из бэкенда»;
add_header Strict-Transport-Security "max-age=31536000";
add_header X-XSS-Защита "1; режим = блок" всегда;
add_header X-Content-Type-Options «нюхать» всегда;
proxy_pass %proxy_protocol%://108.148.54.124:82;
включить proxy.inc;
}
местоположение @backend {
внутренний;
proxy_pass %proxy_protocol%://108.148.54.124:82;
включить proxy.inc;
}
местоположение @custom {
внутренний;
proxy_pass %proxy_protocol%://108.148.54.124:82;
включить proxy.inc;
}
расположение ~ .*\.(php|jsp|cgi|pl|py)?$ {
proxy_pass %proxy_protocol%://108.148.54.124:82;
включить proxy.inc;
}
местоположение ~ /\.ht {запретить все;}
местоположение ~ /\.svn/ {запретить все;}
местоположение ~ /\.git/ {запретить все;}
местоположение ~ /\.hg/ {запретить все;}
расположение ~ /\.bzr/ {запретить все;}
location ~\.(ini|log|conf)$ {запретить все;error_page 403 =404 / ;}
disable_symlinks if_not_owner from=%docroot%;
местоположение /.well-known/acme-challenge {
default_type "текст/обычный";
псевдоним /usr/local/apache/autossl_tmp/.well-known/acme-challenge;
}
местоположение /.well-known/pki-validation {
default_type "текст/обычный";
псевдоним /usr/local/apache/autossl_tmp/.well-known/acme-challenge;
}
}
.....
серверная часть %backend_domain% {
.хост = "108.148.54.124";
.порт = "8181";
}
суб vcl_recv {
если (req.http.host ~ "%domain%") {
установить req.backend_hint = %backend_domain%;
# Всегда кэшировать следующие типы файлов для всех пользователей.
если (req.url ~ "(?i)\.(png|gif|jpeg|jpg|ico|swf|css|js|html|htm)(\?[a-z0-9]+)?$") {
отключить req.http.Cookie;
}
# Удалите все файлы cookie на основе Google Analytics
установить req.http.Cookie = regsuball(req.http.Cookie, "has_js=[^;]+(; )?", "");
установить req.http.Cookie = regsuball(req.http.Cookie, "__utm.=[^;]+(; )?", "");
установить req.http.Cookie = regsuball(req.http.Cookie, "_ga=[^;]+(; )?", "");
установить req.http.Cookie = regsuball(req.http.Cookie, "utmctr=[^;]+(; )?", "");
set req.http.Cookie = regsuball(req.http.Cookie, "utmcmd.=[^;]+(; )?", "");
set req.http.Cookie = regsuball(req.http.Cookie, "utmccn.=[^;]+(; )?", "");
# Не кэшировать запросы AJAX.
если (req.http.X-Requested-With == "XMLHttpRequest") {
вернуться (пройти);
}
# Почтовые запросы не будут кэшироваться
if (req.http.Authorization || req.method == "POST") {
вернуться (пройти);
}
if (req.method!= "GET" && req.method!= "HEAD") {
вернуться (пройти);
}
# Не кэшировать авторизованные запросы.
если (треб.http.Авторизация) {
вернуться (пройти);
}
# Прохождение LetsEncrypt Certbot
if (req.url ~ "^/\.well-known/acme-challenge/") {
вернуться (пройти);
}
if (req.url ~ "^/\.well-known/pki-validation/") {
вернуться (пройти);
}
# Переадресация IP клиента на серверную часть
если (треб. перезапусков == 0) {
если (треб.http.X-Real-IP) {
установить req.http.X-Forwarded-For = req.http.X-Real-IP;
} иначе если (req.http.X-Forwarded-For) {
установить req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip;
} еще {
установить req.http.X-Forwarded-For = client.ip;
}
}
### Вордпресс ###
if (req.url ~ "(wp-admin|post\.php|edit\.php|wp-логин)") {
вернуться (пройти);
}
if (req.url ~ "/wp-cron.php" || req.url ~ "preview=true") {
вернуться (пройти);
}
# WP-партнерка
если ( req.url ~ "\?ref=" ) {
вернуться (пройти);
}
set req.http.Cookie = regsuball(req.http.Cookie, "wp-settings-1=[^;]+(; )?", "");
set req.http.Cookie = regsuball(req.http.Cookie, "wp-settings-time-1=[^;]+(; )?", "");
установить req.http.Cookie = regsuball(req.http.Cookie, "wordpress_test_cookie=[^;]+(; )?", "");
set req.http.Cookie = regsuball(req.http.Cookie, "PHPSESSID=[^;]+(; )?", "");
возврат (хэш);
}
}
<VirtualHost 108.148.54.124:8443>
ServerName %domain_idn%
%domain_aliases%
ServerAdmin webmaster@%domain%
DocumentRoot %docroot%
UseCanonicalName Off
ScriptAlias /cgi-bin/ %docroot%/cgi-bin/
CustomLog /usr/local/apache/domlogs/%domain%.bytes bytes
CustomLog /usr/local/apache/domlogs/%domain%.log combined
ErrorLog /usr/local/apache/domlogs/%domain%.error.log
## Custom settings are loaded below this line (if any exist)
# IncludeOptional "/usr/local/apache/conf/userdata/%user%/%domain%/*.conf"
SSLEngine on
SSLCertificateFile %ssl_cert_path%/%domain%.cert
SSLCertificateKeyFile %ssl_key_path%/%domain%.key
SSLCertificateChainFile %ssl_cert_path%/%domain%.bundle
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
<IfModule mod_userdir.c>
UserDir disabled
UserDir enabled %user%
</IfModule>
<IfModule mod_suexec.c>
SuexecUserGroup %user% %group%
</IfModule>
<IfModule mod_suphp.c>
suPHP_UserGroup %user% %group%
suPHP_ConfigPath %home%/%user%
</IfModule>
<IfModule mod_ruid2.c>
RMode config
RUidGid %user% %group%
</IfModule>
<IfModule itk.c>
AssignUserID %user% %group%
</IfModule>
<Directory "%docroot%">
AllowOverride All
SSLRequireSSL
Require all granted
</Directory>
<IfModule proxy_fcgi_module>
<FilesMatch \.php$>
SetHandler "proxy:%backend_fcgi%|fcgi://localhost"
</FilesMatch>
</IfModule>
</VirtualHost>
и это основной файл конфигурации nginx:
пользователь никто;
рабочие_процессы авто;
#worker_rlimit_nofile 65535;
error_log /var/log/nginx/error.log крит;
pid /var/run/nginx.pid;
События {
worker_connections 1024;
использовать эполл;
мульти_принять;
}
http {
отправить файл включен;
tcp_nopush включен;
tcp_nodelay включен;
client_header_timeout 3 минуты;
client_body_timeout 3 м;
client_max_body_size 256 м;
client_header_buffer_size 4k;
client_body_buffer_size 256 КБ;
large_client_header_buffers 4 32 КБ;
send_timeout 3 м;
keepalive_timeout 60 60;
reset_timedout_connection включен;
server_names_hash_max_size 1024;
server_names_hash_bucket_size 1024;
ignore_invalid_headers включено;
connection_pool_size 256;
request_pool_size 4 КБ;
output_buffers 4 32k;
отложить_выход 1460;
включить mime.types;
default_type application/octet-stream;
# Сжатие gzip
gzip включен;
gzip_vary включен;
gzip_disable "MSIE [1-6]\.";
gzip_proxy любой;
gzip_min_length 512;
gzip_comp_level 6;
gzip_buffers 8 64k;
gzip_types text/простой текст/xml text/css text/js application/x-javascript application/xml image/png image/x-icon image/gif image/jpeg image/svg+xml application/xml+rss text/javascript application/ приложение atom+xml/приложение javascript/приложение json/шрифт x-font-ttf/opentype;
# Настройки прокси
прокси_перенаправление выключено;
proxy_set_header Хост $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header Set-Cookie;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
proxy_buffers 32 4k;
proxy_cache_path /var/cache/nginx level=2 keys_zone=cache:10m inactive=60m max_size=512m;
proxy_cache_key "$host$request_uri $cookie_user";
proxy_temp_path /var/cache/nginx/temp;
proxy_ignore_headers Истекает Cache-Control;
proxy_cache_use_stale ошибка timeout invalid_header http_502;
proxy_cache_valid любой 1d;
open_file_cache_valid 120 с;
open_file_cache_min_uses 2;
open_file_cache_errors выключен;
open_file_cache макс. = 5000 неактивных = 30 с;
open_log_file_cache max=1024 inactive=30s min_uses=2;
# Настройки SSL
ssl_session_cache общий: SSL: 10 м;
ssl_протоколы TLSv1.3;
ssl_prefer_server_ciphers включен;
ssl_ciphers "EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA!RC4:EECDH:!RC4:! aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS";
# Журналы
log_format main '$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format full '[$time_local] $remote_addr $remote_user - "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"';
log_format bytes '$body_bytes_sent';
#access_log /var/log/nginx/access.log основной;
доступ_лог выключен;
# Обход кеша
карта $http_cookie $no_cache {
по умолчанию 0;
~СЕСС 1;
~wordpress_logged_in 1;
}
# Включить дополнительную конфигурацию
включить /etc/nginx/cloudflare.inc;
включить /etc/nginx/conf.d/*.conf;
}