nginx的配置系统由一个主配置文件和其他一些辅助的配置文件构成。这些配置文件均是纯文本文件,全部位于nginx安装目录下的conf目录下。这里主要说一下主配置文件nginx.conf。
(1) 注释:所有以#开头,或者若干空格/tab+#开头的都被认为是注释,注释行被读取后会被忽略。
(2)配置指令:即是nginx.conf文件中的配置项及配置值,配置指令由指令和指令参数组成,指令参数就是配置值。配置指令按复杂度分,可分为简单配置指令和复杂配置指令。
简单配置指令,例如:error_log logs/error.log info;
配置项 error_log(error日志); 配置值 logs/error.log(路径)和info(日志级别)两个值。
复杂配置指令,例如:
location / { index index.html; root /html/txsr/htdocs; }
nginx.conf中的配置信息,根据其逻辑上的意义,对它们进行了分类,也就是分成了多个作用域,或者称之为配置指令上下文。
当前nginx支持的几个指令上下文:
main: | nginx在运行时与具体业务功能(比如http服务或者email服务代理)无关的一些参数,比如工作进程数,运行的身份等。 |
---|---|
http: | 与提供http服务相关的一些配置参数。例如:是否使用keepalive啊,是否使用gzip进行压缩等。 |
server: | http服务上支持若干虚拟主机。每个虚拟主机一个对应的server配置项,配置项里面包含该虚拟主机相关的配置。在提供mail服务的代理时,也可以建立若干server.每个server通过监听的地址来区分。 |
location: | http服务中,某些特定的URL对应的一系列配置项。 |
mail: |
实现email相关的SMTP/IMAP/POP3代理时,共享的一些配置项(因为可能实现多个代理,工作在多个监听地址上)。 |
上面说的是最普遍的,当然还有其他的指令上下文,比如 upstream、events等。
下面我们拿一个配置文件具体看一下:
user nobody;
worker_processes 1;
error_log logs/error.log info;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
keepalive_timeout 60;
gzip on;
server {
listen 80;
server_name localhost;
location / {
root html/txsr/back;
index index.html index.htm;
try_files $uri $uri/ @router;
}
location @router {
rewrite ^.*$ /index.html last;
}
error_page 500 502 503 504 /50x.html;
}
server {
listen 8000;
server_name localhost;
location / {
root html/txsr/font;
index index.html index.htm;
try_files $uri $uri/ @router;
}
location @router {
rewrite ^.*$ /index.html last;
}
error_page 500 502 503 504 /50x.html;
}
}
main上下文配置,简化如下:
user nobody;
worker_processes 1;
error_log logs/error.log info;
pid logs/nginx.pid;
events {
...
}
http {
...
}
同理http上下文配置,简化如下:
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 60;
gzip on;
server {
...
}
server {
...
}
}
以此类推,就不单独列出每个指令上下文了。
(1)main上下文常用配置
user 用来指定nginx worker进程运行用户以及用户组,默认nobody账号运行
worker_processes 指定nginx要开启的子进程数量,运行过程中监控每个进程消耗内存(一般几M~几十M不等)根据实际情况进行调整,通常数量是CPU内核数量的整数倍
error_log 定义错误日志文件的位置及输出级别【debug / info / notice / warn / error / crit】
pid 用来指定进程id的存储文件的位置
worker_rlimit_nofile 用于指定一个进程可以打开最多文件数量的描述
(2)event 配置
worker_connections 指定最大可以同时接收的连接数量,这里一定要注意,最大连接数量是和worker processes共同决定的。
multi_accept 配置指定nginx在收到一个新连接通知后尽可能多的接受更多的连接
use epoll 配置指定了线程轮询的方法,如果是linux2.6+,使用epoll,如果是BSD如Mac请使用Kqueue
(3) http 配置
#1)基础配置
sendfile on:配置on让sendfile发挥作用,将文件的回写过程交给数据缓冲去去完成,而不是放在应用中完成,这样的话在性能提升有有好处
tcp_nopush on:让nginx在一个数据包中发送所有的头文件,而不是一个一个单独发
tcp_nodelay on:让nginx不要缓存数据,而是一段一段发送,如果数据的传输有实时性的要求的话可以配置它,发送完一小段数据就立刻能得到返回值,但是不要滥用哦
keepalive_timeout 10:给客户端分配连接超时时间,服务器会在这个时间过后关闭连接。一般设置时间较短,可以让nginx工作持续性更好
client_header_timeout 10:设置请求头的超时时间
client_body_timeout 10:设置请求体的超时时间
send_timeout 10:指定客户端响应超时时间,如果客户端两次操作间隔超过这个时间,服务器就会关闭这个链接
limit_conn_zone $binary_remote_addr zone=addr:5m :设置用于保存各种key的共享内存的参数,
limit_conn addr 100: 给定的key设置最大连接数
server_tokens:虽然不会让nginx执行速度更快,但是可以在错误页面关闭nginx版本提示,对于网站安全性的提升有好处哦
include /etc/nginx/mime.types:指定在当前文件中包含另一个文件的指令
default_type application/octet-stream:指定默认处理的文件类型可以是二进制
type_hash_max_size 2048:混淆数据,影响三列冲突率,值越大消耗内存越多,散列key冲突率会降低,检索速度更快;值越小key,占用内存较少,冲突率越高,检索速度变慢#2)日志配置
access_log logs/access.log:设置存储访问记录的日志
error_log logs/error.log:设置存储记录错误发生的日志#3)SSL证书配置
ssl:表明支持ssl处理
ssl_certificate:PEM编码的SSL证书路径
ssl_certificate_key:PEM编码的SSL密码密钥
ssl_ciphers:支持密码(OpenSSL格式)
ssl_protocols:指令用于启动特定的加密协议,nginx在1.1.13和1.0.12版本后默认是ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2,TLSv1.1与TLSv1.2要确保OpenSSL >= 1.0.1 ,SSLv3 现在还有很多地方在用但有不少被攻击的漏洞。
ssl prefer server ciphers:设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件
ssl_session_cache:所有的worker进程是否共享指定SSL缓存
ssl_session_timeout:提供的参数被存储在缓存中,多久超时#4)压缩配置
gzip 是告诉nginx采用gzip压缩的形式发送数据。这将会减少我们发送的数据量。
gzip_disable 为指定的客户端禁用gzip功能。我们设置成IE6或者更低版本以使我们的方案能够广泛兼容。
gzip_static 告诉nginx在压缩资源之前,先查找是否有预先gzip处理过的资源。这要求你预先压缩你的文件(在这个例子中被注释掉了),从而允许你使用最高压缩比,这样nginx就不用再压缩这些文件了(想要更详尽的gzip_static的信息,请点击这里)。
gzip_proxied 允许或者禁止压缩基于请求和响应的响应流。我们设置为any,意味着将会压缩所有的请求。
gzip_min_length 设置对数据启用压缩的最少字节数。如果一个请求小于1000字节,我们最好不要压缩它,因为压缩这些小的数据会降低处理此请求的所有进程的速度。
gzip_comp_level 设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。我们设置为4,这是一个比较折中的设置。
gzip_type 设置需要压缩的数据格式。上面例子中已经有一些了,你也可以再添加更多的格式。#5)文件缓存配置
open_file_cache 打开缓存的同时也指定了缓存最大数目,以及缓存的时间。我们可以设置一个相对高的最大时间,这样我们可以在它们不活动超过20秒后清除掉。
open_file_cache_valid 在open_file_cache中指定检测正确信息的间隔时间。
open_file_cache_min_uses 定义了open_file_cache中指令参数不活动时间期间里最小的文件数。
open_file_cache_errors 指定了当搜索一个文件时是否缓存错误信息,也包括再次给配置中添加文件。我们也包括了服务器模块,这些是在不同文件中定义的。如果你的服务器模块不在这些位置,你就得修改这一行来指定正确的位置。
(4)sever配置
listen:监听的端口号
server_name:用来指定ip地址或者域名,多个配置之间用空格分隔
charset:用于设置www/路径中配置的网页的默认编码格式
access_log:用于指定该虚拟主机服务器中的访问记录日志存放路径
error_log:用于指定该虚拟主机服务器中访问错误日志的存放路径
(5)location配置
#1)基本配置
location /:表示匹配访问根目录
root:用于指定访问根目录时,访问虚拟主机的web目录
index:在不指定访问具体资源时,默认展示的资源文件列表#2)反向代理配置
#通过反向代理代理服务器访问模式,通过proxy_set配置让客户端访问透明化。
proxy_pass:反向代理路径
proxy_set_header:反向代理请求头设置
(6)upstream配置
upstream name {
ip_hash;
server 192.168.1.100:8080;
server 192.168.1.100:8081 down;
server 192.168.1.100:8082 max_fails=5;
server 192.168.1.100:8083 fail_timeout=30s;
server 192.168.1.100:8084 max_fails=5 fail_timeout=30s;
}ip_hash:指定请求调度算法,默认是weight权重轮询调度,可以指定调度规则
server host:port:分发服务器的列表配置,该配置后可以跟不同的指令,达到不同的效果,
down;表示该主机暂停服务
max_fails=3;表示失败最大次数5,超过失败最大次数暂停服务
fail_timeout=30s;表示如果请求受理失败,30s后重新发起请求
(7)mail配置
mail与http位于同一层级,ssl证书配置也是一样的,就不额外列举了,另外mail配置下的server配置上面已经说了部分,这里也不单独列举了,主要说一下与http不同的部分:
auth_http:提供认证方式,用于POP3/IMAP用户认证使用
imap_capabilities:后端服务支持IMAP4
pop3_capabilities:后端服务支持POP3
protocol:支持的协议
proxy:启用或禁用mail代理
proxy_buffer:代理连接缓冲
proxy_pass_error_message:后端向客户端发出一个有用的错误消息的情况下,该设置起作用
proxy_timeout:默认24小时
这里只是介绍了部分常用配置,更加详细的配置可以查看:Nginx中文文档。