判断逻辑大概是:
如果 UA=="TargetUA" 且 请求路径=="/TargetPHP.php" 则
转发请求给PHP-FPM处理执行php
写入请求成功日志到 /var/log/nginx/TargetPHP.access.log
写入请求失败日志到 /var/log/nginx/TargetPHP.error.log
否则
重定向(重写) https://domain/请求路径 [永久]
然后这是我现在尝试使用的配置:
server {
listen 80;
listen [::]:80;
root /path/to/root;
index index.php;
server_name domain1;
location = /TargetPHP.php {
if ( $http_user_aget !~ "TargetUA" ){
break;
}
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
access_log /var/log/nginx/TargetPHP.access.log;
error_log /var/log/nginx/TargetPHP.error.log;
}
location / {
rewrite ^(.*)$ https://$host$1 permanent;
access_log /var/log/nginx/Rewrite.access.80.log;
error_log /var/log/nginx/Rewrite.error.80.log;
}
}
现在已知的是底下匹配/的location然后重定向没问题,上边那个匹配单个文件的location貌似不能匹配上.另外文件什么的都是存在的,而且如果把rewrite去掉,全部目录启用php,也是可以访问到的.我只是出于安全和保密以及重定向到https的考虑,才想着只开放一个php,这个php是只允许本地使用curl调用的(crontab做的定时任务),所以加了个UA的限制,如果能过滤到IP(例如把localhost/127.0.0.1来的请求单独处理)也是可以接受的.
求大佬们帮忙Debug.....