在Nginx下如何实现某个虚拟主机同时匹配指定路径与UA时执行php其余情况按规则301重定向

判断逻辑大概是:

如果 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.....

阅读 1.6k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题