今天我注意到我们的日志中存在这个错误:
PHP 消息:PHP 致命错误:require_once():无法打开所需的‘/var/www/app_path/testp3_pospr_waw_pl/some_file.php’(include_path='.:...')在/var/www/path/to/script.php 第 36 行”同时从上游读取响应标头,客户端:offending.ip.address.33,服务器:api.example.com,请求:“GET http://testp3.pospr.waw.pl/testproxy.php HTTP/1.1”,上游:“fastcgi://unix:/var/run/php5-fpm.sock:”,主机:“testp3.pospr.waw.pl”
据我理解,这意味着一个 GET 请求最终到达了我们的服务器,不是 testp3.pospr.waw.pl
。因此,有人将该域名设置为(本地)解析为我们的 IP(我不确定为什么)。
该域名被列为威胁。我已经修补了试图在我们的服务器上使用该脚本的代码require
。但是,就这样吗?我应该采取额外的措施吗?
更新
根据@TeroKilkanen的评论,我正在添加配置文件。正如您所看到的,没有什么特别的:
主站点:
server {
listen 127.0.0.1:80;
server_name example.com;
access_log off;
error_log /var/www/path/to/error.log;
root /var/www/path/to/app;
index index.php index.html index.htm;
location / {
index index.php;
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
API:
server {
listen our.ip.goes.here;
server_name api.example.com;
access_log off;
error_log /var/www/path/to/error.log;
rewrite_log on;
root /var/www/path/to/app/api;
location / {
try_files $uri $uri/ =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
rewrite "/(.*)" /server.php?path=$1 break;
}
}
答案1
您应该有一个default_server
带有选项的虚拟主机,它会对所有访问返回 404。
现在,发生的情况是,当您的 IP 地址收到 HTTP 请求(其中 HTTP Host 标头包含)时testp3.pospr.waw.pl
,nginx 会选择您配置中的第一个虚拟主机来处理该请求。
当你配置一个时default_server
,nginx 会将所有对未知虚拟主机的请求发送到该server
块。
再次,您的软件中有些东西正在使用Host
header 的值作为目录路径,这可能很危险。您也应该修复该问题。