学习nginx配置,这一篇就够了

以下内容整理自《学习Nginx HTTP Server》一书,深入浅出的介绍了nginx配置文件语法及HTTP核心模块、rewrite等模块的语法和指令。

基本信息

1.作者:(法)Clement Nedelcu 著 陶利军 译 2.出版社:清华大学出版社 3.阅读进度:100%

阅读心得 LEARNINGS

  1. 第1章介绍了linux基础知识,linux初学者建议看一下,以便巩固下linux的知识。

  2. 第2章介绍nginx的下载和安装,主要介绍了安装前的一些先决条件和编译时的配置选项,如有些编译选择已经默认开启,有些则是需要手动启用的。

  3. 第3章介绍了配置文件语法及指令块的结构。

  4. 第4、5章属于本书的重点,介绍了HTTP的配置和rewrite模块。

  5. 第6章 fastcgi入门一节介绍了fastcgi模块和upstream模块;

  6. 第7章 Nginx 反向代理模块对nginx反向代理的指令进行了一些介绍。

一、 nginx的基本配置(整理自第3章)

配置文件语法

配置文件由注释行,指令块配置项和一系列指令配置项组成。每一条指令由配置项名称和值参数组成,值参数可以是一个或多个附加参数,取决于解析该条指令的模块。     

# user nobody;
worker_processes 4;
events {
    worker_connections 1024;
}
  • 块配置项由一个块配置项名和一对大括号组成。块配置后面是否带有参数,如location /webstatic {},取决于解析该配置块的模块。

  • 指令配置项总是以分号结尾(;)。

  • 字符"#"表示该行是注释行,nginx在读取配置文件时将忽略的文本。

指令特点

  • 指令都有作用域,如上面例子,worker_connections 只能放在events区块才有意义。

  • 配置块能相互嵌套。在某些情况下不同配置块能够相互嵌套。如在http区段,可以声明一个或多个server区段,server区段又可以插入一个或多个location区段。

  • 最后同样重要的是配置的继承。在一个区段中嵌套其他区段,那么被嵌套的区段会继承其父区段的配置。在嵌套模块中重新声明指令会覆盖该继承。

指令值的单位

可以使用下面单位来指定配置文件所在上下文中指令值的单位。

  • k或K:千字节

  • m或M:兆字节

  • ms:Milliseconds(毫秒)

  • s:Seconds(秒)

  • m:Minutes(分钟)

  • h:Hours(小时)

  • d:Days(天)

  • w:Weeks(星期)

  • M:Months(月)

  • y:Years(年)

字符串值

注意:如果指令值中包含空格、分号或者是大括号等特殊字符,需要使用单引号或双引号将其括起。

nginx 基本模块

nginx是由一系列模块组成的,大致可以分为核心模块、Http核心模块和其他模块。其中核心模块在编译时不能被禁用。核心模块包含main模块、events模块和include包含指令。

main模块重要指令

main模块位于配置文件根部。提供如进程管理和安全的能力。

daemon on; #启用或禁用守护进程模式。

user  nobody; #worker进程运行的用户和组,如果没有提供则使用nginx的master进程的用户和用户组。   
worker_processes  4;#定义worker进程数量一般和cpu核数一致。

#错误日志,这里的级别由debug,info,notice,warn,error和crit(debug记录了全部日志,crit仅报告关键错误)
#作用域:main, http, mail, stream, server, location
error_log  logs/error.log error; 
pid        logs/nginx.pid; #存放nginx守护进程的pid文件路径。
log_not_found on; #开启或禁用记录404错误。
...
#除上面指令外还有worker_rlimit_core、worker_rlimit_nofile、worker_cpu_affinity、worker_priority等。

events模块

事件模块提供的指令可以用来配置网络机制。

accept_mutex:on; #默认值on,启用或禁用使用一个接受互斥锁来打开套接字监听。   
use epoll; #指定nginx所使用的网络事件模型,可选值有/dev/poll,epoll,kqueue等,通常不需要显式指定它,默认情况下nginx将使用最有效方法。
worker_connections 1024; #定义一个worker进程能够同时连接的数量。

configuration模块

它提供的include 指令能够将其他文件包含在nginx配置文件中。在配置文件的任何地方均可插入该指令。注意如果没有指定绝对路径,那么文件路径将和配置文件的目录相关。

include /file/path.conf;
include sites/*.conf;


二、HTTP 配置(整理自第4章)

介绍HTTP 核心模块

HTTP 核心模块是Nginx中最大的一个模块,它包含了所有的基本的区段、指令和变量。

区段结构

通过下面的例子,来认识http模块的区段结构。

http {
    #在http区段中启用gzip压缩
    gzip on;
    server {
        server_name localhost;
        listen 80;
        location /downloads/ {
             #在此location区段禁用gzip压缩
            gzip off;
        }
    }
}
  • http 区段位于配置文件的根部,在这个区段中允许定义HTTP模块的指令和HTTP模块的相关区段。

  • server区段用于声明一个站点,该区段只能用在http区段中。

  • loation 区段应用于网站特定的URI位置,该区段能够用于server区段中,也能嵌套在其他location中。

模块指令

在http/server/location三个层次的每个层次都可以插入指令,下面介绍的指令都主要由http模块引入,对于每条指令都有它的使用环境。指令对应的级别包括http块、server块、location块,另外还有rewrite模块的if块。注意:—一些指令不能用于某些级别。 下面介绍一些常见指令,如无特殊说明作用域为http,server,location。

套接字和主机配置指令

下表指令可以根据主机名或IP地址和端口的组合创建一个server区段。并通过一些指令来配置TCP套接字选项,以便调整网络设置。

  • listen:用于设置监听套接字使用的ip端口号。 语法:listen [address][:port][其他选项] 其他选项: default:指定监听的默认套接字,该server区段被用于默认的网站,在该IP地址和端口上接受任何客户端的请求。 ssl:指定的网站提供SSL服务。 其他选项依赖于bind和listen系统调用:backlog=num,rcvbuf=size,sndbuf=size,accept_filter=filter,deferred和bind。 作用域:server

  • server_name:在server区段中指定一个或多个主机名。 nginx收到http请求时,根据请求header中Host值与所有server区段比较,第一个与主机名匹配的server块将被选中,否则如果没有server区段与客户端请求的主机名匹配,nginx会选择第一个server区段,匹配监听参数(如listen *:80),另外具有default选项的listen会被优先选择。注意该指令接受通配符。 作用域:server

server_name www.website.com website.com;
server_name *.website.com;
server_name *.website.*;
  • tcp_nodelay:开启或关闭使用TCP_NODELAY套接字选项,仅用于keep-alive连接。它禁用了Nagle 缓冲算法。

  • tcp_nopush 开启或禁用TCP_NOPUSH(FreeBSD)或TCP_CORK(Linux)的scoket选项。如果tcp_nopush开启,则nginx将尝试在整个tcp数据包中发送整个http响应头。

  • sendfile 指定nginx是否调用sendfile系统函数来输出文件,减少内核空间和用户空间的上下文切换。对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。

另外还有sendfile_max_chunk、send_lowat等指令。

路径和文档

下表指令用来设置根目录、主页、错误页等。

  • root:定义文档的根目录。 作用域:http,server,location,if。

  • alias:location 指定uri路径的别名,它不会改变root的值。 作用域:location

location  /i/ {
  alias  /spool/w3/images/;
}
#例如:请求"/i/top.gif",将返回这个文件: "/spool/w3/images/top.gif"。
#正如你所看到的,uri中location后面的部分会追加到这个目录后面,而location自身指定的uri路径是"丢弃的"
  • error_page 允许修改访问URI所产生的HTTP相应代码,并选择性地将它替换为其他代码。 作用域:http,server,location,if。 语法:error_page code1 [code2 ...] [=replacement code] [=@

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值