整理的比较全的nginx资料

Nginx基础1.  nginx安装2.  nginx 编译参数详解3.  nginx安装配置+清缓存模块安装4.  nginx+PHP 5.55.  nginx配置虚拟主机6.  nginx location配置7.  nginx root&alias文件路径配置8.  ngx_http_core_module模块提供的变量9.  nginx日志配置10. apache和nginx支持SSI配置12. nginx日志切割13. Nginx重写规则指南14. nginx 逻辑运算15. 隐藏Nginx版本号的安全性与方法16. CDN调度器HAProxy、Nginx、Varnish17.lnmp架构下php安全配置分享18. nginx tcp代理19. nginx正向代理20. 搭建nginx反向代理用做内网域名转发21. nginx+keepalived+proxy_cache 配置高可用nginx群集和高速缓存22. Nginx 战斗准备 —— 优化指南23. 确保nginx安全的10个技巧NGINX变量详解1. nginx变量使用方法详解(1)2.nginx变量使用方法详解(2)3. nginx变量使用方法详解(3)4.nginx变量使用方法详解(4)5. nginx变量使用方法详解(5)6. nginx变量使用方法详解(6)7. nginx变量使用方法详解(7)8. nginx变量使用方法详解(8)Nginx模块与案例01. 如何安装nginx第三方模块02. srcache_nginx redis 构建缓存系统应用一例03.nginx+lua+redis构建高并发应用04. ttserver+nginx构建高并发高可用性应用05.nginx生成缩略图配置06. 使用nginx sticky实现基于cookie的负载均衡07. nginx上传模块—nginx upload module08. nginx strip模块优化页面09. nginx + ngx_lua安装测试10. nginx统计响应的http状态码信息(ngx-http-status-code-counter)11. nginx流量带宽等请求状态统计( ngx_req_status)12. nginx实时记录请求状态信息( ngx_realtime_request_module)13. nginx获取大文件MD5值(nginx模块ngx_file_md5)14. nginx不记录特定日志(access_log_bypass_if)15. nginx快速绘制圆形图(ngx_http_circle_gif_module模块)16. nginx实现大小写字母转换(ngx_http_lower_upper_case模块)17. nginx防止高负载的解决方案(sysgurad模块)18. nginx js、css多个请求合并为一个请求(concat模块)19. CDN下nginx获取用户真实IP地址20. nginx实时生成缩略图到硬盘上21. perl + fastcgi + nginx搭建22. nginx+memcached构建页面缓存应用23.memc_nginx+srcache_nginx+memcached构建透明的动态页面缓存24. nginx 同一个IP上配置多个HTTPS主机25. srcache_nginx redis 清除缓存26. nginx动态IP黑白名单构建web防火墙(ngx_white_black_list)27. srcache_nginx+redis构建缓存系统28. nginx模块nginx-http-footer-filter研究使用29. nginx本地缓存模块ngx_slowfs_cache30. nginx+fancy实现漂亮的索引目录31. nginx secure_link下载防盗链32. nginx显示随机首页模块(Random Index)33. nginx实现图片防盗链(referer指令)34.nginx空白图片(empty_gif模块)35. nginx记录分析网站响应慢的请求(ngx_http_log_request_speed)36. nginx map使用方法37. nginx限速白名单配置38. nginx修改upstream不重启的方法(ngx_http_dyups_module模块)39. nginx实现简体繁体字互转以及中文转拼音(ngx_set_cconv模块)40. nginx针对爬虫进行限速配置41. nginx替换网站响应内容(ngx_http_sub_module)43. nginx向响应内容中追加内容(ngx_http_addition_module模块)44. nginx访问控制allow、deny(ngx_http_access_module)45. nginx+perl模块的使用46. nginx索引目录配置47. nginx+video-thumbextractor生成视频缩略图48. nginx限制连接数ngx_http_limit_conn_module模块49. nginx限制请求数ngx_http_limit_req_module模块50. Nginx国人开发缩略图模块(ngx_image_thumb)51. nginx+set-misc-nginx-module模块说明52. nginx geo使用方法53. Nginx 与 Lua54. ngx_http_headers_module模块add_header和expires指令55. NginX and Riak:常见问题01. memc_nginx+srcache_nginx+memcached遇到的问题02. nginx purge更新缓存404错误03. nginx反向代理proxy_set_header自定义header头无效补充内容 (2015-1-15 12:50):官方下载:http://ebook.ttlsa.com/nginx/百度网盘:http://pan.baidu.com/s/1o6KCn7W51CTO:http://down.51cto.com/data/1973879
阅读全文
Nginx

一步一步深入理解Nginx(四)Nginx进程间的关系

  今天有一件高兴的事要跟大家分享,果子博客重新整顿风格后,人气一直飙升,今天早上起来一看,已经10K+访问量了,这都离不开大家的支持,由于时间关系,今天我只跟大家分享下Nginx工作进程处理关系图,后续将更新Nginx配置解析模块。 运行中的Nginx进程间的关系 首先我们来看一副图再作讲解:​ 在上一节中,我们提到了Nginx的master进程,即Nginx的“管理员”进程,它的进程ID有且仅有一个,它仅专注于自己的纯管理工作,即管理它的worker进程,当做生意一个对外提供服务的worker进程出现错误从而导致coredump时,master进程会立刻启动新的worker进程继续服务;此外,它还可以为管理员提供命令行服务,包括前面小节中提到的向Nginx发送信号、启动服务、停止服务、重载配置文件、平滑升级等。通常情况下它是以root用户启动或编译选项中指定的用户来启动。 多个worker进程处理互联网请求不但可以提高服务的健壮性——一个worker进程出错后,其它worker进程仍然可以提供服务,事实上,它最重要的功能在于,可以充分利用现在觉的SMP多核架构,从而实现微观上真正的多核并发处理,所以,在Nginx的配置文件中有一个配置项work_processes number,其中number为指定的进程数,一般为CPU的核数,worker_cpu_affinity 配置项为绑定CPU的核数,以下为一个简单的配置组合: work_processes 4; worker_cpu_affinity 1000 0100 0010 0001; 这里,我们可以拿另一个WEB服务器Apache来作比较,Apache上每个进程在同一时刻只能处理一个请求,因此,如果希望WEB服务器拥有更多的并发请求,就要把Apache的进程或线程数设置的更多,通过一台服务器拥有几百个工作进程,这样在并发请求时,大量的进程间切换将带来巨大的系统资源消耗。   而Nginx则不同,一个worker进程可以同时处理的请求数只受限于内存大小,而且在架构设计上,不同的worker进程之间处理并发请求时几乎没有同步锁的限制,也不会进入睡眠状态,当Nginx上的进程数与CPU核心数相等时,进程间的切换代价是最小的。    
阅读全文
Nginx

一步一步深入理解Nginx(三)解读Nginx命令行参数

  前面两节我们学习了Nginx的安装,以及如何配置php-fpm模块进行PHP网页脚本的解析,接下来我们再来看一看nginx二进制参数有哪些。现在网络上很多关于Nginx的讲解,一上来就是以一套庞大的编译命令,冗长的配置讲解,再辅以高大上的架构图,瞬间把你以万伏的高压电击晕。我写这个系列的文章只是让大家能感觉到以玩的心态来进行学习,每一条命令,每一条配置我都会亲自进行实验,确定正确无误后再贴出来,有些比较复杂的配置以及脚本,我就先提前写好,让大家能迅速体验到成就感,我觉得这样学习才有乐趣。 1、Nginx默认启动时都做了些什么 前面我们已经把nginx二进制安装到/usr/local/nginx/sbin中了,当我们直接运行/usr/local/nginx/sbin/nginx时,会发生什么呢? 答:什么也没有发生,也没有任何输出。 那么它在后台默默的做了什么事情呢? 这里果子将教你使用一个神器:strace命令,我们执行如下命令: strace /usr/local/nginx/sbin/nginx > nginx.strace 2>&1  接下来,我们再用vim打开,我截取了部分内容,如下图,可以发现,它默认加载了/usr/local/nginx/nginx.conf配置,以及打开了/usr/local/nginx/error.log日志:   那么有童鞋就会问了,果子你到底想说明什么? 如果细心的朋友可能会发现了,这两个路径其实分别就是我们--config-path 和--error-log-path两个选项指定的文件路径,还有些其它选项我们就不一一列举了,有兴趣的朋友可自行查阅。 到这里,我们可以得出结论:直接运行nginx二进制文件时,它根据配置选项来作为默认参数执行。 为了方便我们下文讲解,我们再来看下其它参数: # /usr/local/nginx/sbin/nginx -h nginx version: nginx/1.8.0 Usage: nginx Options: -?,-h : this help -v : show version and exit #显示版本信息后退出 -V : show version and configure options then exit #显示编译选项,这个很有用,当下次编译时就可以直接复制过来配置并编译了。 -t : test configuration and exit #测试配置文件是否正确 -T : test configuration, dump it and exit -q : suppress non-error messages during configuration testing #测试配置文件时不显示错误信息到终端 -s signal : send signal to a master process: stop, quit, reopen, reload #向nginx发送信号 -p prefix : set prefix path (default: /usr/local/nginx/) #指定安装路径 -c filename : set...
阅读全文
Nginx

一步一步深入理解Nginx(二)LNMP架构的实现

  前面一节中,我们初体验了Nginx的安装以及使用浏览器访问自己的html页面,Nginx作为一个优秀的WEB服务器,如果只是支持静态页面,那么整个互联网数据就没法和用户进行沟通。那么有童鞋就问了,为什么静态页面就没法和用户沟通了?   因为一个网站如果要想和用户沟通,那么就必须允许用户进行数据的输入与提交,从技术角度来讲,就是我们常说的动态网页,除了动态网页还不够,我们还必须存储用户提交的数据,比如:评论、留言等。那么这些就是我们今天要讲的一个后台Service,LNMP架构的实现,即Linux+Nginx+Mysql+PHP,其中PHP就是一种网页制作动态语言,当然除了它,我们还有Perl、Python、Jsp、Asp等动态网页脚本语言,而LNMP架构是当前互联网中使用最广泛的架构之一。   今天我们要讲的与网上绝大多数的LNMP架构搭建可能都不太一样,网上绝大多数文章一上来就是使用源码,各种编译,各种找编译问题,想要看源码编译折腾的童鞋可以看我另外一篇文章:http://www.guoziweb.com/?p=748 而本文中,我尽量以一种简洁快速的方式让大家轻松实现,到底有多简洁呢?请看下文。 1、安装PHP-FPM和MYSQL 在CentOS系统中,很容易安装这两样服务,那么为什么是安装PHP-FPM而不是PHP呢?   PHP-FPM其实是PHP的5.3版本就内置添加进来的一个第三方插件,现在既然是内置了,那么就不存在第三方的说法了,直接变成私有的东西。它的存在就是为了作为FCGI技术解决Nginx本身不能解析PHP脚本设计,并不是说Nginx做得不够强大,而是它做得足够灵活,它能提供各种第三方接口,以体现其强大的灵活性。   关于FCGI技术的解释这里就不作多写了,有兴趣的童鞋可以自行上百度或谷歌查阅。好了,安装我们还是使用yum在线安装的方式,这就是前面我们提到的简洁的方式(其实我们Nginx也可以使用yum在线安装方式,只是因为我们后面会涉及到开发Nginx模块,所以使用了源码编译的方式,让大家深入了解下)。 yum -y install php-fpm php-* mysql-server   怎么样?是不是很简单,我们安装了php-fpm模块,为了避免少PHP扩展库,我们把所有的php扩展库都安装上了,同时也安装好了mysql的server端。我们可以使用如下命令继续查看php-fpm安装的具体位置:   # rpm -qa | grep php-fpm php-fpm-5.3.3-46.el6_6.x86_64 # rpm -ql php-fpm-5.3.3-46.el6_6.x86_64 /etc/logrotate.d/php-fpm /etc/php-fpm.conf /etc/php-fpm.d /etc/php-fpm.d/www.conf /etc/rc.d/init.d/php-fpm /etc/sysconfig/php-fpm /usr/sbin/php-fpm /usr/share/doc/php-fpm-5.3.3 /usr/share/doc/php-fpm-5.3.3/LICENSE /usr/share/doc/php-fpm-5.3.3/php-fpm.conf.default /usr/share/fpm/status.html /usr/share/man/man8/php-fpm.8.gz /var/log/php-fpm /var/run/php-fpm 2、开始配置 我们先把/etc/php-fpm.conf备份下,同时去掉所有注释和空行语句:   cp /etc/php-fpm.conf /etc/php-fpm.conf.bak grep -Ev '^(;|$)' /etc/php-fpm.conf.bak >/etc/php-fpm.conf   查看下该配置文件内容如下: include=/etc/php-fpm.d/*.conf pid = /var/run/php-fpm/php-fpm.pid error_log = /var/log/php-fpm/error.log daemonize = no   这时,我们在/etc/php-fpm.d/目录下会发现有一个www.conf文件,我们如法炮制:   cd /etc/php-fpm.d cp www.conf www.conf.bak grep -Ev '^(;|$)' www.conf.bak > www.conf   从现在开始,我们下面的配置字段将都不做解释,你只管按我的配置好就行了,随着学习的慢慢深入,我们后面会接触到。 我们将其中的user和group字段值修改成www,listen字段值修改成/tmp/php-fcgi.sock,为了和Nginx接口进行对接,修改了一些参数,最后的内容如下:   listen = /tmp/php-fcgi.sock listen.allowed_clients = 127.0.0.1 user = www group = www pm...
阅读全文
Nginx

一步一步深入理解Nginx(一)安装初体验

  前言:从今天开始,我们将开始了解、学习、深入Nginx,如果不知道Nginx是什么东西的童鞋,自行查找资料。其实我们每天接触的互联网中,每两个网站中几乎就有它的支持,截止到写本文,另一个市场占有率,也是排第一的WEB服务器是Apache,为什么它排第一位?这是有历史原因的。为什么我们不学习市场占用率第一的WEB服务器?这也是有历史原因的,正是因为这样,它背负了太多的历史,导致它现在越来越臃肿,当然不可否认它的伟大性,任何一个东西存在即是有它的原因的。讲一个小的笑话,从前有一个软件,从它出生起就开始打Patch,啊,又一个Patch,a,又一个Patch,然后我们就把它命名为Apache。好了今天我们要学习的Nginx,它是一个快速的,高扩展性,高可靠性,低消耗,自由的WEB服务器。在后面的学习中,我们将慢慢认识并热恋它。 1、环境准备 系统:CentOS 6.6  当前企业使用最多的Linux发行版本之一 Linux内核:2.6+    我们使用要系统已经满足条件了,为什么使用2.6+内核版本?因为epoll异步编程模型只有在Linux 2.6+内核上才支持,在2.6以前的内核中,普遍使用的是select或poll模型,它们无法解决高并发压力的问题。 2、必备软件 1) gcc编译器 这个就不用解释了吧。 2) pcre库 Perl Compatible Regular Expressions,意为Perl兼容的正则表达式,这个在我们后面配置的nginx.con配置文件中将会用到正则表达式,所以得用到这个库 3) zlib库 对HTTP包的内容做gzip格式的压缩,这个在nginx.conf中有一个gzip on的选项,开启此选项后,可以降低文件或数据传输时的大小,节省带宽,但会带来额外的CPU开销,这个可根据服务器配置做适当调整,一般现代服务器CPU都很强大了,所以该选项也一般是开启的。 4) openssl库 常见的https网站离不开它的功能,可以说整个互联网的安全都离不开它,建议安装nginx时,配置上该选项。 那么在CentOS中如何安装以上列出的这些库呢?很简单,只需要在联网的情况下,执行以下命令即可: yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel CentOS中比较有意思的是,当写上一个包名,后面接上-devel意思就是说这是一个开发才需要的库。 3、获取Nginx源码 截止到写作本文,Nginx的版本已经是1.9.9,根据官网:http://www.nginx.org的介绍,其中增加了好多新功能,我当前使用的时候是1.0.8的版本,新增了一些比如tcp代理、线程池的支持,这些东西我们后面再说。在实际产品开发过程中,一般会选取stable release版本,即稳定版本,这里我们选择1.8.0稳定版本,源码地址: wget http://nginx.org/download/nginx-1.8.0.tar.gz 4、编译安装 我们把源码下载到opt目录下,解压,可以使用以下命令进行配置选项的查看: ./configure --help 以下是其输出:   --help                             print this message   --prefix=PATH                      set installation prefix   --sbin-path=PATH                   set nginx binary pathname   --conf-path=PATH...
阅读全文