Nginx学习总结

Nginx高性能HTTP和反向代理服务器

局限:只支持HTTP和Mail两种

Nginx使用高效的网络I/O模型,针对不同的Linux 发布版

? ? ?epoll(Linux 2.6内核)

? ? ?kqueue(FreeBSD)

? ? ?eventport(Solaris 10)

Nginx服务器能够支持高达50000个并发连接数的响应,MEM,CPU资源消耗较低(实际生产环境2~4万并发连接数)

Nginx优势

? ? ?配置文件简单

? ? ?支持Rewrite重写

? ? ? ? ? 能够根据域名,URL,将HTTP请求分到不同的后端服务器

? ? ?支持检查服务器功能

? ? ? ? ? 后端某个Web服务器down,不会影响访问

? ? ?节省带宽

? ? ? ? ? 支持GZIP压缩,可以添加浏览器本地缓存的Header头

? ? ?稳定性高

? ? ?支持热部署

Nginx安装与配置

centos or redhat

yum install nginx

ubuntu

apt-get install nginx

local repo config

/etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1

Nginx配置文件

详细配置文件相关请参考如下连接:

http://wiki.nginx.org/Configuration

? user ?www www; ? ? #主进程以root用户启动,然后切换为当前选项配置USER和GROUP,默认为nobody,默认只配置用户USER,那么组也使用USER名称

? worker_processes ?2; ? ? #一般为内核数量

? pid /var/run/nginx.pid; ? ? #PID文件位置,例如重新加载配置?kill -HUP `cat /var/log/nginx.pid`

?

? # [ debug | info | notice | warn | error | crit ]?

? error_log ?/var/log/nginx.error_log ?info; ? ? #error log位置 不用域日志登记不同

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#in the main section - error

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#in the HTTP section - crit

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#in the server section - crit

?

? events { ? ? #Nginx如何控制connection

? ? worker_connections ? 2000; ? ? #worker可以开启的连接数量

? ? # use [ kqueue | rtsig | epoll | /dev/poll | select | poll ] ; ? ??

? ? use kqueue; ? ? #使用哪种IO网络模型,默认情况根据configure操作系统来决定 epoll在linux版本比较常用

? }

### 一般来说??max clients = worker_processes * worker_connections

### 反向代理 ?max clients = worker_processes * worker_connections/4

?

? http { ? ? #核心HTTP Server配置

? ? include ? ? ? conf/mime.types; ? ? #可以引入其他的配置文件

? ? default_type ?application/octet-stream; ? ? #指定MIME-type,一般情况下不用配置

?

? ? log_format main ? ? ?‘$remote_addr - $remote_user [$time_local] ?‘ ? ? #日志格式 main为日志格式名称,方便其他位置引用,不允许重复

? ? ? ‘"$request" $status $bytes_sent ‘

? ? ? ‘"$http_referer" "$http_user_agent" ‘

? ? ? ‘"$gzip_ratio"‘;

? ? log_format download ?‘$remote_addr - $remote_user [$time_local] ?‘

? ? ? ‘"$request" $status $bytes_sent ‘

? ? ? ‘"$http_referer" "$http_user_agent" ‘

? ? ? ‘"$http_range" "$sent_http_content_range"‘;

? ? ? ?# $remote_addr:反向代理服务器地址

? ? ? ?#?$remote_user:远程客户端名称

? ? ? ?#?[$time_local]:访问时间与时区

? ? ? ?#?$request:记录请求的URL和协议

? ? ? ?#?$status:记录请求状态

? ? ? ?#?$body_bytes_sent:客户端发送body内松大小

? ? ? ?#?$http_referer:从哪个页面链接访问而来

? ? ? ?#?$http_user_agent:记录client浏览器相关信息

? ? ? ?# $http_x_forwarded_for:记录原有client IP地址和原client请求server IP地址

?

? ? client_header_timeout ?3m; ? ? #指定多长时间等待客户端发送一个请求头

? ? client_body_timeout ? ?3m; ? ? #从客户端读取body超时时间

? ? send_timeout ? ? ? ? ? 3m; ? ? #指定为客户端响应超时时间

?

? ? client_header_buffer_size ? ?1k; ? ? #客户端headerbuffer大小

? ? large_client_header_buffers ?4 4k; ? ? #最大headerbuffer大小

?

? ? gzip on; ? ? #开启gzip压缩

? ? gzip_min_length ?1100; ? ? #Content-Length大于此长度才会被压缩

? ? gzip_buffers ? ? 4 8k; ? ? # compress buffer

? ? gzip_types ? ? ? text/plain; ? ? #添加额外压缩类型,默认已包括text/html

?

? ? output_buffers ? 1 32k;

? ? postpone_output ?1460;

?

? ? sendfile ? ? ? ? on; ? ? #sendfile模式,效率更高,直接通过kernel,而不经过用户空间

? ? tcp_nopush ? ? ? on; ? ? #有点深奥,没花时间研究,跟sendfile一同使用

?

? ? tcp_nodelay ? ? ?on; ? ? #同上

? ? send_lowat ? ? ? 12000;

?

? ? keepalive_timeout ?75 20; ? ? #指定的超时时间,与客户保持连接。服务器将在此时间后关闭连接。

?

? ? # lingering_time ? ? 30;

? ? # lingering_timeout ?10;

? ? # reset_timedout_connection ?on;

?

?

? ? server { ? ? #虚拟服务器配置 基于IP和基于域名两种

? ? ? listen ? ? ? ?one.example.com; ? ? #监听服务器,地址和端口,默认绑定80端口

? ? ? server_name ? one.example.com ?www.one.example.com; ? ? #访问的名称支持正则表达式

?

? ? ? access_log ? /var/log/nginx.access_log ?main; ? ??

? ? ?

? ? ? ? ? # access log位置

? ? ? ? ? # 必须有写入权限,当前定义用户

? ? ? ? ? # 写入过程打开,写入,关闭,可以设置缓冲

?

? ? ? location / { ? ? #根据URL进行不同配置

? ? ? ? ??

? ? ? ? ? # ~区分大小写

? ? ? ? ? # ~*不区分大小写

? ? ? ? ? # / 匹配所有

? ? ? ? ? # =精确匹配,停止搜索其他location

? ? ? ? ? # ^~匹配时,停止搜索其他location

? ? ? ? ? ######################location匹配优先级########################

? ? ? ? ? #= 精确匹配会第一个被处理。如果发现精确匹配,nginx停止搜索其他匹配。

? ? ? ? ? #普通字符匹配,正则表达式规则和长的块规则将被优先和查询匹配,也就是说如果该项匹配还需去看有没有正则表达式匹配和更长的匹配。

? ? ? ? ? #^~ 则只匹配该规则,nginx停止搜索其他匹配,否则nginx会继续处理其他location指令。

? ? ? ? ? #最后匹配理带有"~"和"~*"的指令,如果找到相应的匹配,则nginx停止搜索其他匹配;当没有正则表达式或者没有正则表达式被匹配的情况下,那么匹配程度最高的逐字匹配指令会被使用。

? ? ? ? proxy_pass ? ? ? ? http://127.0.0.1/; ? ? #代理服务器地址和URL映射

? ? ? ? proxy_redirect ? ? off; ? ? #在响应头更新Location和Refresh在代理服务器

?

? ? ? ? proxy_set_header ? Host ? ? ? ? ? ? $host; ? ? #许重新定义和添加request header在代理服务器? ??

? ? ? ? proxy_set_header ? X-Real-IP ? ? ? ?$remote_addr;

? ? ? ? # proxy_set_header ?X-Forwarded-For ?$proxy_add_x_forwarded_for;

?

? ? ? ? client_max_body_size ? ? ? 10m; ? ? #request body最大大小

? ? ? ? client_body_buffer_size ? ?128k; ? ??#request body buffer大小

?

? ? ? ? client_body_temp_path ? ? ?/var/nginx/client_body_temp; ? ? #缓冲临时写入文件

?

? ? ? ? proxy_connect_timeout ? ? ?90; ? ? #超时时间连接到后端服务器,一般不能超过75秒

? ? ? ? proxy_send_timeout ? ? ? ? 90; ? ? #request连到到后端服务器时间,只两次传输,不算开始传到结束

? ? ? ? proxy_read_timeout ? ? ? ? 90; ? ? #读取代理服务器响应时间

? ? ? ? proxy_send_lowat ? ? ? ? ? 12000; ? ? #FreeBSD才有用

?

? ? ? ? proxy_buffer_size ? ? ? ? ?4k; ? ? #读取代理服务器,Response缓冲区

? ? ? ? proxy_buffers ? ? ? ? ? ? ?4 32k; ? ? #数量和缓冲大小读取answer和proxy server

? ? ? ? proxy_busy_buffers_size ? ?64k;

? ? ? ? proxy_temp_file_write_size 64k; ? ? #写入临时文件缓存

?

? ? ? ? proxy_temp_path ? ? ? ? ? ?/var/nginx/proxy_temp; ? ? #request写入位置

?

? ? ? ? charset ?koi8-r; ? ? #指定Content-Type的响应编码

? ? ? }

?

? ? ? error_page ?404 ?/404.html; ? ? #错误页面位置

?

? ? ? location /404.html {

? ? ? ? root ?/spool/www; ? ? # 文档根路径 /spool/www/404.html

?

? ? ? ? charset ? ? ? ? on;

? ? ? ? source_charset ?koi8-r; ? ? #允许重新编码 proxy server或是FastCGI-server

? ? ? }

?

? ? ? location /old_stuff/ {

? ? ? ? rewrite ? ^/old_stuff/(.*)$ ?/new_stuff/$1 ?permanent;

? ? ? }

?

? ? ? location /download/ {

? ? ? ? valid_referers ?none ?blocked ?server_names ?*.example.com;

?

? ? ? ? if ($invalid_referer) {

? ? ? ? ? #rewrite ? ^/ ? http://www.example.com/;

? ? ? ? ? return ? 403;

? ? ? ? }

?

? ? ? ? # rewrite_log ?on;

? ? ? ? # rewrite /download/*/mp3/*.any_ext to /download/*/mp3/*.mp3

? ? ? ? rewrite ^/(download/.*)/mp3/(.*)\..*$ /$1/mp3/$2.mp3 break;

?

? ? ? ? root ? ? ? ? /spool/www;

? ? ? ? # autoindex ? ?on;

? ? ? ? access_log ? /var/log/nginx-download.access_log ?download;

? ? ? }

?

? ? ? ? ? ####################Nginx Rewrite##################

? ? ? ? ? # 规则相关命令if,rewrite,set,return,break

? ? ? ? ? # break:完成当前规则,不在处理rewrite命令

? ? ? ? ? # if:条件判断,只支持单if

? ? ? ? ? ###条件:

? ? ? ? ? ? ?1 变量名:不包括空字符串或是0开始字符

? ? ? ? ? ? ?2 变量可以使用 = 等于 != 不等于

? ? ? ? ? ? ?3 正则表达式可以使用 ~* 和 ~

? ? ? ? ? ? ?4 ~区分大小写字母的匹配

? ? ? ? ? ? ?5 ~* 不区分大小写字母的匹配

? ? ? ? ? ? ?6 !~和!~*作用同5相反

? ? ? ? ? ? ?7 -f 文件是否存在

? ? ? ? ? ? ?8 -d 目录是否存在

? ? ? ? ? ? ?9 -e 判断文件或目录是否存在

? ? ? ? ? ? ?10 -x 文件是否可执行

? ? ? ? ? ### 部分正则表达式()后面可以使用$1,$2,$3来引用

? ? ? ? ? # return:结束规则并返回状态码给client ? ??

? ? ? ? ? # rewrite:根据表达式来重定向URI或是修改字符串

? ? ? ? ? ###Flag标记

? ? ? ? ? ? ? ?1 last 表示完成rewrite

? ? ? ? ? ? ? ?2 break 本次匹配完成后,终止匹配

? ? ? ? ? ? ? ?3 redirect 返回302,临时重定向,浏览器会跳转后URL地址

? ? ? ? ? ? ? ?4 permanenet 返回301,永久重定向,浏览器会跳转后URL地址

? ? ? ? ? # set:用于给变量赋值

? ? ? location ~* ^.+\.(jpg|jpeg|gif)$ {

? ? ? ? root ? ? ? ? /spool/www;

? ? ? ? access_log ? off;

? ? ? ? expires ? ? ?30d; ? ? #控制到期时间

? ? ? }

? ? }

? }

时间: 2024-08-08 13:50:39

Nginx学习总结的相关文章

Nginx学习指南之模块的应用

一.自述 Nginx模块功能也是相当的丰富,但对于Apache Web来说,两者之间还是有区别的,大家都知道Nginx模块是直接被编译进了nginx.conf配置文件,而Apache则是被编译成为.SO文件,有些是需要在httpd.conf配置文件中指定是否加载,这样才能激活模块功能.Nginx模块有三个角色,Handlers(处理一个HTTP请求,并产生输出):Filters(处理由一个handler生成的输出):load-balancers(负载均衡器,当后端服务器符合一个以上后,依据算法选

Nginx学习回顾总结 部分:

21:46 2015/11/9Nginx学习回顾总结进程间通信,近似于socket通信的的东西:才发现这种通信并不是很难,并不是我想象的那样很多内容,新领域,入门只是几个函数的使用而已.以前猜过是这样,今天总算验证了.包括pdo是数据库连接,smarty,xml解析,应该都是这样,入门都不难,然后就是需要看一下手册之类的,了解一下有哪些内容而已.主要就是消息的读写解析,部分参数的设置----以我浅显的认识来讲应该是的.然后一般会有几种选项或分类,如单向通信,双向通信等进程通信方式,不过还是最常用

Nginx学习——负载均衡

负载均衡 Nginx提供了较多的负载均衡策略,包括加权轮询.IP哈希.fair.一致哈希等.前两个是Nginx官方源码内置的策略,而后面几个都是第三方模块,所以下面我们重点来看前两个内置策略. Nginx默认采用round_robin加权算法,如果要采用IP哈希策略,那么必须在Nginx的配置文件里通过配置指令ip_hash明确指定. 当整个http配置块被Nginx解析完毕之后,会调用各个http模块对应的初始函数.对于模块ngx_http_upstream_module而言,对应的main配

Nginx学习总结(1):Nginx简介

(最近,部门组织了好几个技术兴趣小组,对当前的热门技术进行研究.我加入了Nginx学习小组,与几个同事一道围绕Nginx来进行研究和学习.从今天起,我会陆陆续续发一系列有关Nginx的学习总结.本文是系列之一:Nginx简介.) 一.Nginx概况 1.Nginx是Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日.目前最新的版本是nginx-1.9.0(2015年4月28日发布). 2.Nginx是一款高性能的HTTP和

nginx学习笔记之基于端口的虚拟主机基于主机名的虚拟主机root、alias、index配置

nginx学习笔记之基于端口的虚拟主机基于主机名的虚拟主机root.alias.index配置 实验环境: centos 测试节点IP:172.16.3.101 基于端口的虚拟主机: vim /etc/nginx/nginx.conf # 向里面的http {}里面加入如下内容   server { # server定义一个虚拟主机         listen 8080; # 监听本机所有IP端口8080         server_name www.test.com; # 虚拟主机名为:w

Nginx学习指南之安装与配置

一.简介 Nginx [engine x]是Igor Sysoev编写的一个HTTP和反向代理服务器,另外它可以作为邮件代理服务器.Nginx已经在众多流量很大的俄罗斯网站上使用了很长时间,这些网站包括Yandex,Mail.Ru.VKontakte,以及Rambler,在国内使用Nginx作为Web Server,Cache Server,Proxy Server网站包括百度,新浪,腾讯,网易,机锋网等,根据Netcraft统计,在2012年8月份,世界上最繁忙的网站中有11.48使用Ngin

Nginx学习之如何搭建文件防盗链服务

Nginx学习之如何搭建文件防盗链服务 前言 大家都知道现在很多站点下载资料都是要收费的,无论是积分还是金币,想免费只能说很少很少了,那么这些网站是如何做到资源防盗链的呢? 这里推荐一款比较容易上手的神器,Nginx本身提供了secure_link来完成防盗链功能,可以给服务器文件链接添加时间戳和校验码,从而保护服务器文件不被任意下载盗用. 时序图 Nginx配置 如何安装Nginx这里不再赘述,安装的时候记得开启ngx_http_secure_link_module即可. ./configur

nginx学习(八):nginx配置gzip

开启gzip压缩功能,目的是 提高传输效率,节约带宽 配置gzip gzip on; #限制最小压缩,小于1字节文件不会压缩 gzip_min_length 1; #定义压缩的级别 gzip_comp_level 3; gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css; 验证 HTTP/1.1 200 OK Server: nginx/1.

nginx学习3:实现nginx反向代理和负载均衡

nginx学习3:实现nginx反向代理和负载均衡 正向代理和反向代理的区别(这里不赘述什么是正向代理和反向代理) 一句话概括:正向代理隐藏真实客户端,反向代理隐藏真实服务端:即正向代理服务器不知道客户端是谁,反向代理客户端不知道服务器是谁: 反向代理实例1 需求描述:输入nginx监听IP:8081,可以访问真实的IP:8088 tomcat服务 准备tomcat服务 1-准备tomcat服务(8088端口) 2-开放防火墙8088端口 ##添加8088端口[[email protected]

nginx 学习(二) hello world 程序

hello wrold 1 本节目的 2实现步骤 2.1config编写 2.2模块代码实现 2.3配置文件的编写 3将模块编译进nginx中 1本节的目的 本节用nginx来实现一个经典程序hello world,这个程序也是我们学任何编程语言时首先接触的程序,这个程序的目的是 初步了解nginx怎样嵌入第三方模块,也是学习nginx的HTTP模块的入门. 2实现步骤 nginx 提供了一种简单的方式将第三方模块嵌入nginx中:只需要三个步骤 步骤一:编写config 步骤二:实现模块的代码