ngnix.conf配置文件
... #全局块
events{ #events 块
...
}
http{ #http 块
... #http 全局块
server{ #server 块
... #server 全局块
location [PATTERN]{ #location 块
...
}
location [PATTERN]{ #location 块
...
}
}
server{ #server 块
...
}
... #http 全局块
}
1.全局块
全局块是默认配置文件从开始到events块之间的一部分内容,主要设置一些影响Nginx服务器整体运行的配置指令,因此,这些指令的作用域是Nginx服务器全局。
通常包括配置运行Nginx 服务器的用户(组)、允许生成的worker process数、Nginx 进程 PID存放路径、日志的存放路径和类型以及配置文件引入等。
2.events 块
events 块涉及的指令主要影响Nginx 服务器与用户的网络连接。常用到的设置包括是否开启对多worker process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型处理连接请求,每个 worker process可以同时支持的最大连接数等。
这一部分指令对 Nginx服务器的性能影响较大,在实际配置中应该根据实际情况灵活调整。
3.http 块
http块是Nginx 服务器配置中的重要部分,代理、缓存和日志定义等绝大多数的功能和第三方模块的配置都可以放在这个模块。可以在 http全局块中配置的指令包括文件引入、MIME-Type定义、日志自定义、是否使用sendfile传输文件、连接超时时间、单连接q 请求数上限等。
4.server 块
server 块和“虚拟主机”的概念有密切联系。在 server 全局块中,最常见的两个配置项是本虚拟主机的监听配置和本虚拟主机的名称或 IP 配置。
5.location 块
location 块的主要作用是,基于Nginx服务器接受到的q 请求字符串,对除虚拟主机名称之外的字符串j 进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能都是在这部分实现。许多第三方模块的配置也是在location块中提供功能。
配置运行Nginx服务器用户(组)
user user [group];
user,指定可以运行Nginx服务器的用户。
group,可选项,指定可以运行Nginx 服务器的用户组。
注意:在 Nginx 配置文件中,每一条指令都必须以分号结束,请不要忘记。
配置允许生成的worker process数
worker process是 Nginx服务器实现并发处理服务的关键所在。从理论上来说,worker process的值越大,可以支持的并发处理量也越多,
但实际上它还要受到来自软件本身、操作系统本身资源和能力、硬件设备等的制约。
配置Nginx进程PID存放路径
Nginx进程作为系统的守护进程,我们需要在某文件中保存当前运行程序的主进程号。
Nginx 支持对它的存放路径进行自定义配置,指令是 pid,其语法格式为
- pid file;
- 其中,file 指定存放路径和文件名称。
配置错误日志的存放路径
error_log file | stderr [debug | info | notice | warn | error | crit | alert | emerg];
设置网络连接的序列化
Nginx配置中包含了这样一条指令 accept_mutex,当其设置为开启的时候,将会对多个Nginx进程接收连接进行序列化,
防止多个进程对连接的争抢。其语法结构为
此指令默认为开启('ON')状态,其只能在events块中进行配置。
置是否允许同时接收多个网络连接
每个 Nginx 服务器的worker process 都有能力同时接收多个新到达的网络连接,但是这需要在配置文件中进行设置,其指令为 multi_accept,语法结构为:
此指令默认为关闭(off)状态,即每个 worker process一次只能接收一个新到达的网络连接。此指令只能在events块中进行配置。
配置最大连接数
指令worker_connections主要用来设置允许每一个worker process同时开启的最大连接数。其语法结构为:
worker_connections number;
注意:这里的 Number不仅仅包括和前端用户建立的连接数,而是包括所有可能的连接数。另外,number 值不能大于操作系统支持打开的最大文件句柄数量。
此指令只能在events块中进行配置。
定义MIME-Type
#引入外部文件mime.types
include mime.types; #以下指令在 http部分中生效
default_type application/octet-stream;
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript
...
第二行中使用指令default_type配置了用于处理前端请求的 MIME类型,其语法结构为:
default_type mime-type;
其中,mime-type为 types 块中定义的MIME-type,如果不加此指令,默认值为text/plain。
此指令还可以在 http 块、server 块或者location块中进行配置。
自定义服务日志
不同于errer_log nginx进程运行的日志
access_log提供服务器应答前端的日志记录
access_log path [format [buffer=size]];
path:配置服务日志的文件存放路径和名称。
format:可选项,自定义服务日志的格式字符串,也可以通过“格式串的名称”使用log_format指令定义好的格式。“格式串的名称”在log_format指令中定义。
size:配置临时存放日志的内存缓存区大小。
#取消日志
access_log off;
和 access_log联合使用的另一个指令是log_format,它专门用于定义服务日志的格式,并且可以为格式字符串定义一个名字,
以便access_log指令可以直接调用。其语法格式
配置允许sendfile 方式传输文件
#用于开启或关闭使用sendfile传输文件指令:
sendfile on | off;
#传输数据量大小 0不限制
sendfile_max_chunk size;
sendfile_max_chunk 128k;
配置连接超时时间
与用户建立会话连接后,Nginx 服务器可以保持这些连接打开一段时间,
指令keeplive_timeout就是用来设置此时间的,其语法结构为:
keepalive_timeout timeout [header_timeout];
keepalive_timeout 120s 100s;
单连接请求数上限
Nginx 服务器端和用户端建立会话连接后,用户端通过此连接发送请求。指令keepalive_requests用于限制用户通过某一连接向 Nginx服务器发送请求的次数。其语法结构为:
keepalive_requests number;
基于名称的虚拟主机配置
这里的“主机”,j 就是指此server 块对外提供的虚拟主机。设置了主机的名称并配置好 DNS,用户就可以使用这个名称向此虚拟主机发送请求了。配置主机名称的指令为server_name,其语法结构为:
server_name name ...;
对于 name 来说,可以只有一个名称,也可以由多个名称并列,之间用空格隔开。每个名字就是一个域名,由两段或三段组成,之间由点号“.”隔开。下面是一个简单的示例:
server_name myserver.com www.myserver.com;
#更改hosts文件
vim /etc/host
配置请求的根目录
Web 服务器接受到网络请求后,首先要在服务器端指定目录中寻找请求资源。在 Nginx 服务器中,指令 root就是用来配置这个根目录的,其语法结构为:
root path;
设置网站的默认首页
index file ...;
location ~ ^/data/(.+)/web/ $
{
index index.$1.html index.my1.html index.html;
}
当 location 块接受到“/data/locationtest/web/”时,匹配成功,它首先将欲置变量$1置为“locationtest”,然后在/data/locationtest/web/路径下按照index
的配置次序依次寻找index.locationtest.html页、index.my1.html页和index.html页,首先找到哪个页面,就使用哪个页面响应请求。
设置网站的错误页面
error_page code ... [=[response]] uri
code,要处理的HTTP 错误代码。
response,可选项,将 code 指定的错误代码转化为新的错误代码response。
uri,错误页面的路径或者网站地址。如果设置为路径,则是以Nginx服务器安装路径下的html目录为根路径的相对路径;如果设置为网址,则 Nginx 服务器会直接访问该网址获取错误页面,并返回给用户端。
error_page 404 /404.html;
error_page 403 http://somewebsite.com/forbidden.html;
error_page 404 /404.html
location /404.html
{
root /myserver/errorpages/
}
基于 IP 配置 Nginx 的访问权限
allow 指令,用于设置允许Nginx的客户端 IP,语法结构为:
allow address | CIDR | all;
address,允许访问的客户端的 IP,不支持同时设置多个。如果有多个 IP需要设置,需要重复使用allow 指令。
CIDR,允许访问的客户端的 CIDR 地址,例如202.80.18.23/25,前面是32位IP 地址,后面“/25”代表该 IP地址前25位是网络部分,其余位代表主机部分。
all,代表允许所有客户端访问。
location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
deny all;
}
配置实例
#### 全局块 开始 ####
# 配置允许运行Nginx服务器的用户和用户组
user nobody nobody;
# 配置允许 Nginx 进程生成的 worker process 数
worker_processes 3;
# 配置Nginx服务器运行的错误日志存放路径
error_log logs/error.log;
# 配置 Nginx 服务器运行时的 pid文件存放路径和名称
pid logs/nginx.pid;
#### 全局块 结束 ####
#### events 块 开始 ####
events {
# 配置事件驱动模型
use epoll;
# 配置最大连接数
worker_connections 1024;
}
#### events 块 结束 ####
#### http 块 开始 ####
http {
# 定义 MIME-Type
include mime.types;
default_type application/octet-stream;
# 配置允许使用sendfile方式传输
sendfile on;
# 配置连接超时时间
keepalive_timeout 65;
# 配置请求处理日志的格式
log_format access.log '$remote_addr-[$time_local]-"$request"-"$http_user_agent"';
#### sever 块 开始 ####
# 配置虚拟主机 myServer1
server {
# 配置监听端口和主机名称(基于名称)
listen 8081;
server_name myServer1;
# 配置请求处理日志存放路径
access_log /myweb/server1/log/access.log;
# 配置错误页面
error_page 404 /404.html;
# 配置处理/server1/location1请求的 location
location /server1/location1 {
root /myweb;
index index.svr1-loc1.htm;
}
# 配置处理/server1/location2请求的 location
location /server1/location2 {
root /myweb;
index index.svr1-loc2.htm;
}
}
# 配置虚拟主机 myServer2
server {
# 配置监听端口和主机名称(基于名称)
listen 8082;
server_name 192.168.1.3;
# 配置请求处理日志存放路径
access_log /myweb/server2/log/access.log;
# 配置错误页面,对错误页面 404.html做了定向配置
error_page 404 /404.html;
# 配置处理/server2/location1请求的 location
location /server2/location1 {
root /myweb;
index index.svr2-loc1.htm;
}
# 配置处理/svr2/loc2请求的 location
location /svr2/loc2 {
# 对 location的 URI进行更改
alias /myweb/server2/location2;
index index.svr2-loc2.htm;
}
# 配置错误页面转向
location = /404.html {
root /myweb/;
index 404.html;
}
}
#### sever 块 结束 ####
}
#### http 块 结束 ####