nginx conf文件结构详情以及相关配置

作者 : 开心源码 本文共3076个字,预计阅读时间需要8分钟 发布时间: 2022-05-12 共136人阅读

本文简单详情nginx conf文件的结构,已经如何进行配置:

  • 如何配置nginx提供静态内容,
  • 如何配置nginx作为代理商服务器,
  • 如何配置转发请求到FastCGI服务

Nginx进程模型:1个主进程,n个工作进程,主进程负责配置和工作进程的管理,实际的请求由工作进程进行解决。Nginx是基于事件驱动和多路复使用的工作模型。

1. nginx启停

nginx的启动可以直接执行nginx的bin文件, 当nginx启动后,可以通过-s 参数来控制nginx

nginx -s reload #重新加载配置文件
nginx -s reopen #重新打开log文件
nginx -s stop #快速关闭nginx服务
nginx -s quit #优雅的关闭nginx服务,等待工作进程解决完所有的请求
1
2
3
4

Nginx重新加载配置文件的过程:主进程接受到加载信号后:

  • 首先会校验配置的语法,而后生效新的配置,
  • 假如成功,则主进程会启动新的工作进程,同时发送终止信号给旧的工作进程。
  • 否则主进程回退配置,继续工作。

在第二步,旧的工作进程收到终止信号后,会中止接收新的连接请求,知道所有现有的请求解决完,而后退出。

2. nginx.conf文件的结构

nginx的配置由特定的标识符(指令符)分为多个不同的板块。

指令符分为简单指令块指令

  • 简单指令格式:[name parameters;]
  • 块指令格式:和简单指令格式有一样的结构,但其结束标识符不是分号,而是大括号{},块指令内部可以包含simple directives 和block directives, 可以称块指令为上下文(e.g. events, http, server, location)

conf文件中,所有不属于块指令的简单指令都属于main上下文的,http块指令属于main上下文,server块指令http上下文。

2.1 配置静态访问

Web server很重要一部分工作就是提供静态页面的访问,例如images, html page。nginx可以通过不同的配置,根据request请求,从本地的目录提供不同的文件返回给用户端。

打开安装目录下的nginx.conf文件,默认配置文件已经在http指令块中创立了一个空的server块,在nginx-1.8.0中的http块中已经创立了一个默认的server块。内容如下:

 server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

通常情况下,conf文件存在多个server块,通过listen的端口(默认是80端口)和server_name进行区分, 对不同的请求提供不同的服务,如下:

server {
listen 80;
server_name a.example.org;
...
}
1
2
3
4
5

listen指令的格式如下:

NoteDescriptionSyntax:listen address[:port] [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];

listen port [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];

listen unix:path [default_server] [ssl] [http2 | spdy] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [so_keepalive=on|offDefault:listen *:80 | *:8000;Context:server

listen指令的参数:可以是ip, hostname, ip/hostname:port, port, UNIX-domain socket.例如:

listen 127.0.0.1:8000;listen 127.0.0.1;listen 8000;listen *:8000;listen localhost:8000;
listen unix:/var/run/nginx.sock;
1
2

server块内部的listen和server_name不能和其余server块的完全相同,否则启动加载配置的时候会出现如下错误:

server {
listen 80;
server_name a.example.org;
...
}
server {
listen 80;
server_name a.example.org;
...
}
#nginx -s reload
nginx: [warn] conflicting server name "a.example.org" on 0.0.0.0:80, ignored
1
2
3
4
5
6
7
8
9
10
11
12
13

当nginx决定了哪一个server解决用户端请求后,nginx会解析request header中URI(这里以及后面提到的大部分都是指相对URI),而后匹配server块中的location指令的参数,匹配规则下一节会详情。例如下例:

server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
1
2
3
4
5
6
7
8
9

location块指令会使用其参数与用户端请求的URI进行匹配,匹配的URI请求会被定向到root指令定义的特殊本地文件系统目录中,重定向规则为:将URI增加到root参数后面,生成一个本地文件路径,即:root参数 + URI请求。这里示例参数”/”会匹配所有的请求,一般都会默认存在。示例定位后的目录为html/,默认是定位到安装目录的路径下的html/。这里location块指令内部的两个简单指令的含义是:

  • root 指定重定向后uri的资源查找路径,这里html为相对路径,相对于nginx的安装目录。
  • index指定首页index文件的名称,可以配置多个,参数以空格分开,按配置顺序查找。

默认的在nginx安装目录下都会存在一个html目标,在我电脑中为:/usr/local/nginx-1.8.0/html, 而后里面存在默认的nignx的欢迎界面,例如我安装nginx后直接启动nginx bin文件,而后访问对应的域名就得到了如下的页面:

nginx conf文件结构详情以及相关配置

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » nginx conf文件结构详情以及相关配置

发表回复