我在Web服务器上使用nginx和modsecurity和php-fpm。
我使用OWASP ModSecurity Core Rule Set。
我正在尝试对一个 php 文件使用一些特定的规则(联系人.php)
这是我的nginx配置:
location /contact.php {
ModSecurityEnabled on;
ModSecurityConfig ../owasp-modsecurity-crs/modsecurity_rule1.conf; # Specific rules for this file
}
location ~ .php$ {
root /home/user/public_html;
try_files $uri =404;
fastcgi_pass 127.0.0.1:9001;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
include fastcgi_params;
ModSecurityEnabled on;
ModSecurityConfig ../owasp-modsecurity-crs/modsecurity.conf;
}
当我使用此配置运行时,出现"500 内部服务器错误"
而这个错误在php-fpm的错误.log文件中:
2015/01/28 05:43:01 [alert] 1395#0: *1 no upstream configuration, client: IPAdress, server: example.com, request: "POST /contact.php HTTP/1.1", host: "www.example.com", referrer: "https://www.example.com/"
我想这两个"位置"块存在混淆。
怎么想通呢?
位置
/联系人.php没有配置上游。您必须从第二个位置复制粘贴所有剩余的指令
或者如果你想保持干燥,也许这会起作用:
http {
map $request_uri $mod_sec_config {
/contact.php modsecurity_rule1.conf;
default modsecurity.conf;
}
}
.....
location ~ .php$ {
root /home/user/public_html;
try_files $uri =404;
fastcgi_pass 127.0.0.1:9001;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
include fastcgi_params;
ModSecurityEnabled on;
ModSecurityConfig ../owasp-modsecurity-crs/$mod_seq_config;
}
不确定这是否有效,根据nginx作者的说法,复制粘贴是编写配置的正确方法