nginx

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_

  • Nemo
    Nemo
3 min read
php

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

我在之前一篇笔记里面写了如何用php下载文件,里面写了两种方法来下载文件 nginx配置直接try_files下载文件 php读取文件之后再输出 对于第二种方法,php-fpm和nginx的内存和IO情况都有飙升。 在传统的文件传输过程中,文件数据经历了以下步骤: 硬盘 -> 内核buffer -> 用户buffer -> socket相关缓冲区 -> 协议栈 而sendfile机制被开启之后,减少了一次文件copy,提升了文件传输性能,文件数据经历的步骤如下: 硬盘 -> 内核buffer -> socket相关缓冲区

  • Nemo
    Nemo
2 min read
php

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->

  • Nemo
    Nemo
5 min read
cname

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.

  • Nemo
    Nemo
3 min read
php

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配置

  • Nemo
    Nemo
8 min read
php

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。

  • Nemo
    Nemo
9 min read
nginx

nginx location rules

nginx location匹配规则 首先说几种常见的匹配规则 精确匹配= location = /uri { …… } 对开头匹配^~ location ^~ /uri { …… } 正则表达式区分大小写~ location ~ pattern { …… } 正则表达式不区分大小写~* location ~* pattern { …… } 无修饰符 location /uri { …… } 通用匹配 location / { …… } location的匹配并不是绝对按照声明顺序来的,它有一定的优先级,优先级从高往低如下: =全匹配 ^~匹配开头 ~或者~*正则表达式匹配前缀(2017-12-1修订:不是匹配前缀,而是匹配是否是uri的子串) 无修饰符,匹配字符串比较长 无修饰符,

  • Nemo
    Nemo
6 min read
nginx

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

  • Nemo
    Nemo
1 min read
http

强制把http变成https

最近阿里云官网上有免费的SSL证书可以买,就决定把网站改成支持https的。还想把对于http的访问全部导向https。 可以在nginx里面这样配置: http监听的是80端口,https监听的是443端口 对于80端口,nginx配置可以这样写: server { listen 80; server_name yoursitename; # redirect http to https return 301 https://yoursitename$request_uri; } 然后还要对443端口进行配置 server { listen 443 ssl; server_name youtsitename; …… …… } 关于301和302重定向

  • Nemo
    Nemo
2 min read
php

nginx隐藏版本号、php隐藏版本号

nginx隐藏版本号、php隐藏版本号 nginx隐藏版本号 有时候会出现404、500之类的页面,里面会暴露nginx的版本号,如果你没有及时更新到最新版本,黑客可以根据版本号来攻击你。 隐藏nignx的版本号,需要改动的地方是: 编辑nginx.conf 把server_tokens on的on改成off 找到php-fpm的配置文件,即fastcgi.conf和fastcgi_param 找到fastcgi_param SERVER_SOFTWARE nginx/$nginx_version改成fastcgi_param SERVER_SOFTWARE nginx 重启nginx 隐藏HTTP头里面的php版本号 步骤如下:

  • Nemo
    Nemo
1 min read