nginx的autoindex

如果想要把服务器上的某个目录对外开放,让所有人可以看到并下载目录里面的文件,可以使用nginx的autoindex 举个例子,我想把/home/nemo/publicdir/file/这个目录对外开放,我可以设置请求http://wwww.mysite.com/testpublic/这个url的时候,自动映射到我要开放的目录。nginx配置如下: location /testpublic/ { alias /home/nemo/publicdir/file/; autoindex on; } location / { root /home/nemo/www; try_files /notfound.html 404; } 然后重启nginx,之后在浏览器里面输入http://wwww.mysite.com/testpublic/就可以看到/home/nemo/publicdir/file/这个目录里面的文件了。 注意:…

使用nginx的XSendfile提升php下载文件性能

我在之前一篇笔记里面写了如何用php下载文件,里面写了两种方法来下载文件 nginx配置直接try_files下载文件 php读取文件之后再输出 对于第二种方法,php-fpm和nginx的内存和IO情况都有飙升。 在传统的文件传输过程中,文件数据经历了以下步骤: 硬盘 -> 内核buffer -> 用户buffer -> socket相关缓冲区 -> 协议栈 而sendfile机制被开启之后,减少了一次文件copy,提升了文件传输性能,文件数据经历的步骤如下: 硬盘 -> 内核buffer -> socket相关缓冲区 -> 协议栈 在当前流行的几个web服务器(apache、nginx、lighttpd等)里面,都有关于sendfile的配置。 下面说说如何使用nginx的XSendfile来提升PHP文件下载性能。 关于nginx的XSendfile的详细内容可以看官方文档 1. nginx开启sendfile 在nginx.conf里面,设置sendfile on表示开启sendfile机制…

php读取excel文件

PHP读取excel文件 我用的是PHPExcel这个库,相关的方法网上都有介绍,我这里主要是记录一下使用过程中遇到的问题 按单元格读取 先来看一段示例代码,这段示例代码是使用PHPExcel按单元格读取excel的内容 $firstfilename = 'test.xlsx'; if ( !file_exists($firstfilename)) { echo "$firstfilename not exits"; exit; } // init excel reader $reader = new PHPExcel_Reader_Excel2007(); // 判断是xlsx还是xls文件 if ( !$reader->canRead($firstfilename)) { $reader = new PHPExcel_Reader_Excel5(); if ( !$reader->canRead($firstfilename)) { exit("cannot read $firstfilename&…

CNAME

我之前写过一片笔记使用七牛云存储博客图片, 在使用七牛云的CDN的时候,需要把自己的域名cname到七牛云提供的一个域名上面去。 这篇笔记记录一下CNAME记录与A记录的区别。 可以先看一下七牛云官方网站上面对CNAME的介绍,如下图所示: 上图已经说得比较详细了,下面主要说几个点: 1.假如说域名www.A.com CNAME到了 www.B.com,在向域名A发请求的时候,浏览器里面看到的地址是谁的? 2.假如说域名www.A.com CNAME到了 www.B.com, nginx配置文件里面server_name应该监听哪个域名才能够正常处理请求? 3.自己的域名被别人恶意CNAME了怎么办?自己的服务器IP被别人恶意A了怎么办? 假如说域名www.A.com CNAME到了 www.B.com,在向域名A发请求的时候,浏览器里面看到的地址是谁的? 先来说第一个问题,可以自己试一下,比如说ping一下京东,如下图所示。 看上图,可以看到ping www.jd.com它最终到了www.jdcdn.…

php-fpm与服务器502、504相关知识

上周报名了一个活动,结果对方服务器nginx 502了,有朋友进去了活动页面,我都没进得去!后来听说是php配置文件没配置好,导致了这个问题。 正好最近入了php的坑,就来学习一些php配置里面可能会导致服务器nginx 502的地方。 nginx 502 一般是以下几种情况: php-fpm进程没有启动,或者nginx的fastcgi_pass设置错误,导致nginx连不到php php worker进程不够,请求太多处理不过来 php-fpm执行超时,被kill掉,导致nginx与其连接被断开 nginx 504 一般是以下情况: 虽然php脚本还在执行,但nginx与上游通信时间超时。 下面就来以此解决这几个问题: 一、 php-fpm进程或者nginx fastcgi_pass配置 确认php-fpm是否已启动,可使用命令ps aux|grep php-fpm查看进程 确认nginx的fastcgi_pass是否正确: 先确认php-fpm已启动 fastcgi_pass有两种形式 ip:port。(如:127.0.0.1:…

CGI、FastCGI相关知识

CGI 一个请求是如何被回应的,普通用户感知的如下图 实服务器收到一个http请求之后,解析http请求,服务器负责解析HTTP请求,并把请求的参数*(如REQUEST_METHOD,PATH_INFO)*塞到进程的变量里面。然后调用相关程序,由程序产生内容。然后由服务器再加上适当的head,返回给浏览器。 解析了请求之后,以nginx为例,,会进入location模块匹配相应的规则。(location规则可以查阅我之前的笔记) 比如说你请求静态文件*(如html等)*,那么可能的nginx location配置是这样的: location ~ \.html$ { root /home/users/nemo/dir; } 找不到相应文件的话,就会404。找到了这个文件就返回这个文件。浏览器会解析html,然后呈现在界面上。 但网站不可能只有静态的html,还需要有动态的内容或者交互,就需要有服务器上有程序能够产生动态内容。所以服务器就需要调用CGI程序获得你的项目的输出。 CGI,即common gateway inteface是服务器与请求处理程序之间的传输数据的标准。CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。 为什么需要CGI呢,因为服务器有Nginx、Apache、…

nginx location rules

nginx location匹配规则 首先说几种常见的匹配规则 精确匹配= location = /uri { …… } 对开头匹配^~ location ^~ /uri { …… } 正则表达式区分大小写~ location ~ pattern { …… } 正则表达式不区分大小写~* location ~* pattern { …… } 无修饰符 location /uri { …… } 通用匹配 location / { …… } location的匹配并不是绝对按照声明顺序来的,它有一定的优先级,优先级从高往低如下: =全匹配 ^~匹配开头 ~或者~*正则表达式匹配前缀(2017-12-1修订:不是匹配前缀,而是匹配是否是uri的子串) 无修饰符,匹配字符串比较长 无修饰符,匹配字符串比较短 关于~和无修饰符的优先级,这里有一个比较容易混淆的地方: 举例: location ~ /tt/ { 规则A; } location /tt/qq/ { 规则B; } 假如说此时来了一个uri是/tt/qq/,那么规则A会被匹配到。表示~…

nginx多域名配置

nginx 多域名配置 假如说你只有一台服务器,但是要运行两个域名的不同网站,两个网站都是80端口,那么就可以使用nginx进行多域名配置。 操作步骤如下: 在nginx安装目录里面(比如说我的安装目录就是/usr/local/nginx),找到conf文件夹 cd conf mkdir vhost cd vhost 新建配置文件,建议命名成你容易理解的名字,比如domainA.conf、domainB.conf 编辑具体的配置文件,比如说编辑domainA.conf server { listen 80; server_name domainA; …… …… } 编辑domainB.conf server { listen 80; server_name domainB; …… …… } 然后cd .. 编辑nginx.conf配置文件,在http模块里面,加上下面这两句: include vhost/domainA.…