Vì vậy, tôi có một trang web wordpress chạy phía sau nginx -> varnish -> httpd
Quy tắc htaccess cho wp-login.php được đặt là:
<Files wp-login.php>
allow from client ip
deny from all
</Files>
Điều này từng hoạt động tốt mà không cần sử dụng véc ni, nhưng khi tôi đặt véc ni ở giữa nginx và httpd, sự cố bộ đệm hoặc sự cố chuyển tiếp IP này bắt đầu xảy ra.
Vì tôi có thể dễ dàng thay đổi cấu hình máy chủ web nên tôi có thể vô hiệu hóa/bật vecni cho một trang web một cách dễ dàng. Vì vậy, để thử nghiệm, tôi đã thay đổi quy tắc htaccess thành:
<Files wp-login.php>
allow from Server Public IP
deny from all
</Files>
Điều này làm cho wp-login có thể truy cập được cho tất cả mọi người. Sau đó, tôi đã vô hiệu hóa véc ni và giữ IP công khai của Máy chủ trong htaccess, và bây giờ không ai có thể truy cập trang (đó là điều đáng lẽ phải xảy ra).
Vì vậy, thủ phạm là vecni.
Tôi đã thiết lập mod_cloudflare trên apache. Tôi cũng đã thử nghiệm bằng cách chuyển nó sang mod_remoteip nhưng không có kết quả.
Đây là các mẫu vhost nginx:443, varnish:82 và apache:8181 của tôi (IP 108.148.54.124 này là một ví dụ cho IP công khai của máy chủ):
người phục vụ {
nghe 108.148.54.124:443 ssl http2;
server_name %domain_idn% %alias_idn%;
access_log /usr/local/apache/domlogs/%domain%.bytes byte;
access_log /usr/local/apache/domlogs/%domain%.log đầy đủ;
error_log /usr/local/apache/domlogs/%domain%.error.log lỗi;
ssl_certificate %ssl_cert_path%/%domain%.bundle;
ssl_certificate_key %ssl_key_path%/%domain%.key;
ssl_protocols 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;
bật ssl_prefer_server_ciphers;
ssl_session_cache được chia sẻ:SSL:10m;
ssl_session_timeout 60m;
địa điểm / {
vị trí ~.*\.(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)$ {
gốc %docroot%;
hết hạn tối đa;
try_files $uri $uri/ @backend;
}
error_page 405 = @backend;
error_page 500 = @custom;
add_header X-Cache "HIT từ phụ trợ";
add_header Strict-Transport-Security "max-age=31536000";
add_header X-XSS-Protection "1; mode=block" luôn luôn;
add_header X-Content-Type-Options "nosniff" luôn;
proxy_pass %proxy_protocol%/108.148.54.124:82;
bao gồm proxy.inc;
}
vị trí @backend {
nội bộ;
proxy_pass %proxy_protocol%/108.148.54.124:82;
bao gồm proxy.inc;
}
vị trí @custom {
nội bộ;
proxy_pass %proxy_protocol%/108.148.54.124:82;
bao gồm proxy.inc;
}
vị trí ~ .*\.(php|jsp|cgi|pl|py)?$ {
proxy_pass %proxy_protocol%/108.148.54.124:82;
bao gồm proxy.inc;
}
vị trí ~ /\.ht {từ chối tất cả;}
vị trí ~ /\.svn/ {từ chối tất cả;}
vị trí ~ /\.git/ {từ chối tất cả;}
vị trí ~ /\.hg/ {từ chối tất cả;}
vị trí ~ /\.bzr/ {từ chối tất cả;}
vị trí ~\.(ini|log|conf)$ {từ chối tất cả;error_page 403 =404 / ;}
disable_symlinks if_not_owner from=%docroot%;
vị trí /.well-known/acme-challenge {
default_type "text/plain";
bí danh /usr/local/apache/autossl_tmp/.well-known/acme-challenge;
}
vị trí /.well-known/pki-validation {
default_type "text/plain";
bí danh /usr/local/apache/autossl_tmp/.well-known/acme-challenge;
}
}
.....
phụ trợ %backend_domain% {
.host = "108.148.54.124";
.port = "8181";
}
phụ vcl_recv {
if (req.http.host ~ "%domain%") {
đặt req.backend_hint = %backend_domain%;
# Luôn lưu trữ các loại tệp sau cho tất cả người dùng.
if (req.url ~ "(?i)\.(png|gif|jpeg|jpg|ico|swf|css|js|html|htm)(\?[a-z0-9]+)?$") {
hủy đặt req.http.Cookie;
}
# Xóa mọi cookie dựa trên Google Analytics
đặt req.http.Cookie = regsuball(req.http.Cookie, "has_js=[^;]+(; )?", "");
đặt req.http.Cookie = regsuball(req.http.Cookie, "__utm.=[^;]+(; )?", "");
đặt req.http.Cookie = regsuball(req.http.Cookie, "_ga=[^;]+(; )?", "");
đặt req.http.Cookie = regsuball(req.http.Cookie, "utmctr=[^;]+(; )?", "");
đặt req.http.Cookie = regsuball(req.http.Cookie, "utmcmd.=[^;]+(; )?", "");
đặt req.http.Cookie = regsuball(req.http.Cookie, "utmccn.=[^;]+(; )?", "");
# Không lưu trữ các yêu cầu AJAX.
if (req.http.X-Requested-With == "XMLHttpRequest") {
trả lại (vượt qua);
}
# Yêu cầu bài viết sẽ không được lưu trữ
if (req.http.Authorization || req.method == "POST") {
trở về (vượt qua);
}
if (req.method != "GET" && req.method != "HEAD") {
trở về (vượt qua);
}
# Không lưu trữ các yêu cầu được ủy quyền.
nếu (req.http.Authorization) {
trả lại (vượt qua);
}
# LetsEncrypt xác nhận certbot
if (req.url ~ "^/\.well-known/acme-challenge/") {
trở về (vượt qua);
}
if (req.url ~ "^/\.well-known/pki-validation/") {
trở về (vượt qua);
}
# Chuyển tiếp IP của khách hàng đến phụ trợ
nếu (req.restarts == 0) {
nếu (req.http.X-Real-IP) {
đặt req.http.X-Forwarded-For = req.http.X-Real-IP;
} khác nếu (req.http.X-Forwarded-For) {
đặt req.http.X-Forwarded-For = req.http.X-Forwarded-For + "," + client.ip;
} khác {
đặt req.http.X-Forwarded-For = client.ip;
}
}
### Wordpress ###
if (req.url ~ "(wp-admin|post\.php|edit\.php|wp-login)") {
trả lại (vượt qua);
}
if (req.url ~ "/wp-cron.php" || req.url ~ "preview=true") {
trở về (vượt qua);
}
# WP-Chi nhánh
nếu ( req.url ~ "\?ref=" ) {
trở về (vượt qua);
}
đặt req.http.Cookie = regsuball(req.http.Cookie, "wp-settings-1=[^;]+(; )?", "");
đặt req.http.Cookie = regsuball(req.http.Cookie, "wp-settings-time-1=[^;]+(; )?", "");
đặt req.http.Cookie = regsuball(req.http.Cookie, "wordpress_test_cookie=[^;]+(; )?", "");
đặt req.http.Cookie = regsuball(req.http.Cookie, "PHPSESSID=[^;]+(; )?", "");
trả lại (băm);
}
}
<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>
và đây là tệp conf nginx chính:
người dùng không ai;
worker_processes tự động;
#worker_rlimit_nofile 65535;
error_log /var/log/nginx/error.log crit;
pid /var/run/nginx.pid;
sự kiện {
công_nhân kết_nối 1024 ;
sử dụng epoll;
multi_accept on;
}
http {
gửi tệp trên;
bật tcp_nopus;
bật tcp_nodelay;
client_header_timeout 3 phút;
client_body_timeout 3 phút;
client_max_body_size 256m;
client_header_buffer_size 4k;
client_body_buffer_size 256k;
large_client_header_buffers 4 32k;
gửi_thời gian chờ 3 phút;
keepalive_timeout 60 60;
reset_timedout_connection bật;
server_names_hash_max_size 1024;
server_names_hash_bucket_size 1024;
bỏ qua_invalid_headers bật;
kết_nối_pool_size 256;
request_pool_size 4k;
đầu ra_bộ đệm 4 32k;
hoãn_xuất 1460 ;
bao gồm mime.types;
ứng dụng default_type/octet-stream;
# Nén gzip
bật gzip;
bật gzip_vary;
gzip_disable "MSIE [1-6]\.";
gzip_proxied bất kỳ;
gzip_min_length 512;
gzip_comp_level 6;
gzip_buffers 8 64k;
văn bản gzip_types/văn bản thuần túy/văn bản xml/văn bản css/ứng dụng js/ứng dụng x-javascript/hình ảnh xml/hình ảnh png/hình ảnh biểu tượng x/hình ảnh gif/hình ảnh jpeg/ứng dụng svg+xml/văn bản xml+rss/ứng dụng javascript/ ứng dụng nguyên tử + xml/ứng dụng javascript/ứng dụng json/phông chữ x-font-ttf/opentype;
# Cài đặt proxy
proxy_redirect tắt;
proxy_set_header Máy chủ lưu trữ $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header Đặt cookie;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
proxy_buffers 32 4k;
proxy_cache_path /var/cache/nginx levels=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 Hết hạn kiểm soát bộ đệm;
hết thời gian chờ lỗi proxy_cache_use_stale invalid_header http_502;
proxy_cache_valid 1 ngày bất kỳ;
open_file_cache_valid 120s;
open_file_cache_min_uses 2;
open_file_cache_errors tắt;
open_file_cache max=5000 không hoạt động=30s;
open_log_file_cache max=1024 không hoạt động=30s min_uses=2;
# Cài đặt SSL
ssl_session_cache được chia sẻ:SSL:10m;
ssl_protocols TLSv1.3;
bật 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";
# Nhật ký
log_format chính '$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"';
byte log_format '$body_bytes_sent';
#access_log /var/log/nginx/access.log chính;
truy cập_đăng xuất;
# Bỏ qua bộ đệm
bản đồ $http_cookie $no_cache {
mặc định 0;
~PHẦN 1;
~wordpress_logged_in 1;
}
# Bao gồm cấu hình bổ sung
bao gồm /etc/nginx/cloudflare.inc;
bao gồm /etc/nginx/conf.d/*.conf;
}