nginx位置和优先级(拒绝* .php忽略)

我以前是一个有点经验的阿帕奇pipe理员,但是我决定冒险尝试学习nginx。 到目前为止,一切看起来相当直观,但很明显,我还没有完全内化nginx的做法,所以我相当肯定这是一个容易解决的问题,但我似乎无法find明显的答案。

我有一个服务器,它使用php-fpm服务器的PHP,我希望通过源IP(例如:phpmyadmin,我写的一些testing脚本等)限制访问我的文档根目录中的一些子目录。 无论出于何种原因,对于目录和文件的限制似乎都可以正常工作,但FastCGI服务器提供的PHP文件显然是绕过了这种访问限制。 我已经通过在限制目录中创build不同types的testing文件来validation这种情况。 文本和HTML文件确实被拒绝,并返回一个403,但PHP文件无论其内容似乎被parsing并提供给客户端。

这里是我认为是我的网站configuration的相关部分:

# pass all PHP scripts to FastCGI server socket location ~ \.php$ { # Filter out arbitrary code execution location ~ \..*/.*\.php$ {return 404;} fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.sock; } # allow access to tools pages as necessary location ~ /tools/ { allow 10.11.12.13/32; allow 10.11.12.14/32; deny all; } 

还有更多的configuration,但没有影响PHP文件或/工具/位置的指令,据我所知。 我正在寻找的行为是在/ tools /下的所有文件被限制,无论文件types是什么,除非有明确的IP范围的允许规则。

任何你可以在这方面的光芒指向正确的方向将是最受欢迎的!

这是因为nginx从一个匹配的位置块提供请求,而不是多个。 另外,nginx有一个特定的过程来select它,在类似的问题上阅读我的答案或阅读正式文档的细节。

我猜你也使用index指令某处告诉nginx服务一个index.php文件时,inputtools目录或子目录,这个指令触发内部redirect到PHP位置块的访问不受限制。

您将需要使用嵌套的位置块或使用更具体的正则expression式。