一个nginx匹配很诡异的问题
nginx配置如下:
location ~ \.php$ {
root /opt/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
按照道理说访问地址如:
xxx.com/statichtml/json.php
应该可以正常访问,可每次访问都是直接下载json.php文件,试了很多次,每次都是如此。
我自己创建一个phpinfo.php,安装目录
xxx.com/statichtml/phpinfo.php却可以正常访问。
难道是权限的问题??
看了下我自己创建phpinfo.php使用root身份创建的。
-rw-r--r-- 1 root root 17 Sep 20 04:53 phpinfo.php
json.php却是:
-rwxrwxrwx 1 user1 root 4151 Sep 12 09:48 json.php*
创建者是user1.
发现问题不是上面,出在:
location ~* /statichtml/.*\.php$ {
root /opt/nginx/html/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ^~ /statichtml/ { 如果开启这个,json2.php就直接下载了。因为这个匹配会覆盖掉.php。不管放在前面还是后面。
root /opt/nginx/html/;
}
上面做法不对,
两个匹配不能区分静态文件和.php文件。
我改成:
location ~* /statichtml/.*\.(json|gif|jpg|png|jpeg|html|jpeg|css|js)$ {
root /opt/nginx/html/;
}
可以解决问题。
后来想的办法:
location ~* /statichtml/.*\.php$ {
root /opt/nginx/html/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /statichtml {
root /opt/nginx/html;
}
也可以。
参考文章:
nginx alias的设置
nginx也有像apache的别名功能,格式为:
location ~ /alias {
root /home/www/default;
index index.php;
}
但nginx在处理php脚本时,需要传递给fastcgi才能处理,所以比apache的别名设置多一个,下面我们以phpmyadmin别名设置为例:
location ~ ^/phpmyadmin.+.php$ {
root /home/www/default;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /phpmyadmin {
root /home/www/default;
index index.php;
}
最后匹配理带有"~"和"~*"的指令,如果找到相应的匹配,则nginx停止搜索其他匹配;当没有正则表达式或者没有正则表达式被匹配的情况下,那么匹配程度最高的逐字匹配指令会被使用。
参考:
http://www.cnblogs.com/youxin/p/3944568.html
一个nginx匹配很诡异的问题的更多相关文章
- 如何在tomcat前部署一个nginx
在tomcat应用已经发布后,如何在tomcat前部署一个nginx,可以正常访问jsp,静态资源(html,css,js) 这里tomcat的端口号是8888 upstream morris { s ...
- 从docker到docker-compose部署一个nginx+flask+mysql+redis应用
目的是把一个flask项目的mysql数据库.redis数据库.flask应用.nginx服务分别装到四个容器中,然后用docker-compose命令同时启动与关闭 一.安装docker Docke ...
- Spring:通配符的匹配很全面, 但无法找到元素 XXXXX' 的声明
问题:配置Spring的时候容易发生如题的这样一个经常性的错误,错误如下(以context为例) org.springframework.beans.factory.xml.XmlBeanDefini ...
- 写一个nginx监控日志
下面的代码是实现一个nginx监控日志功能,是不是很好玩呢.
- springMVC:通配符的匹配很全面, 但无法找到元素 'mvc:annotation-driven' 的声明
转自:http://blog.csdn.net/tolcf/article/details/50845483 报错信息:通配符的匹配很全面, 但无法找到元素 'mvc:annotation-drive ...
- jquery[siblings]取得一个包含匹配的元素集合中每一个元素的所有唯一同辈元素的元素集合
取得一个包含匹配的元素集合中每一个元素的所有唯一同辈元素的元素集合,用于筛选同辈元素的表达式 $("#pageList").click(function(){ $(this).pa ...
- nested exception is org.xml.sax.SAXParseException; lineNumber: 8; columnNumber: 56; cvc-complex-type.2.4.c通配符的匹配很全面, 但无法找到元素 'dubbo:application' 的声明
严重: Exception sending context initialized event to listener instance of class org.springframework.we ...
- 通配符的匹配很全面, 但无法找到元素 'cache:advice' 的声明
EB-INF\classes\spring-jdbc.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineN ...
- idea调试SpringMvc, 出现:”通配符的匹配很全面, 但无法找到元素 'mvc:annotation-driven' 的声明“错误的解决方法
调试json格式输出,出现以下错误: HTTP Status 500 - Servlet.init() for servlet HelloDispatcher threw exception ty ...
随机推荐
- lucene全文检索---打酱油的日子
检索内容,一般的程序员第一时间想到的是sql的like来做模糊查询,其实这样的搜索是比较耗时的.已经有lucene帮我们 封装好了,lucene采用的是分词检索等策略. 1.lucene中的类描述 I ...
- ggplot2包的说明文档[分享]
- Codeforces Round #FF(255) DIV2
A - DZY Loves Hash 水题,开辟一个数组即可 #include <iostream> #include <vector> #include <algori ...
- c# 获取项目的根目录
编写程序的时候,经常需要用的项目根目录.自己总结如下 1.取得控制台应用程序的根目录方法 方法1.Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径 ...
- About_类与对象03
php中的static: 1:属于静态变量:: 2:是全部类的属性: 3:调用静态变量要用::(两个冒号). eg:1 <html> <head> <title>s ...
- [Android]用图库打开指定的文件夹,没错是第一个画面直接是图库的文件夹画面
参考了这个里面的代码 http://bbs.csdn.net/topics/380084274 一直报错 06-16 23:58:50.698 26148-26161/com.example.myap ...
- Node.js的学习路线
http://www.admin10000.com/document/4624.html 顺便关注一下博客:http://blog.fens.me/series-nodejs/ php socket框 ...
- 3.线性表-cursor
fatal.h #include <stdio.h> #include <stdlib.h> #define Error( Str ) FatalError( Str ) #d ...
- PHP 创建缩略图
一.成比例缩小图像 <?php /* 创建缩略图 */ $file = __DIR__.'/button.png'; $scale = 0.5; // 比例 $image = ImageCrea ...
- Python 随机数生成总结
random.uniform(a, b),返回[a,b]之间的浮点数 random.randint(a, b),返回[a,b]之间的整数 random.randrange([start], stop[ ...