nginx教程第三篇:nginx进程间的关系和通用语法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013068377/article/details/82821649

一、Nginx进程间的关系和通用语法

1. 运行中Nginx进程间的关系

在正式提供服务的产品环境下, 部署Nginx时都是使用一个master进程来管理多个worker
进程, 一般情况下, worker进程的数量与服务器上的CPU核心数相等。 每一个worker进程都是繁忙的, 它们在真正地提供互联网服务, master进程则很“清闲”, 只负责监控管理worker进程。 worker进程之间通过共享内存、原子操作等一些进程间通信机制来实现负载均衡等功能。

Nginx是支持单进程( master进程) 提供服务的, 那么为什么产品环境下要按照masterworker方式配置同时启动多个进程呢? 这样做的好处主要有以下两点:

1. 由于master进程不会对用户请求提供服务,只用于管理真正提供服务的worker进程,所以master进程
可以是唯一的, 它仅专注于自己的纯管理工作,为管理员提供命令行服务,包括诸如启动服务、 停止服务、 
重载配置文件、 平滑升级程序等。 master进程需要拥有较大的权限, 例如, 通常会利用root用户启动
master进程。 worker进程的权限要小于或等于master进程,这样master进程才可以完全地管理worker进程。 当任意一个worker进程出现错误从而导
致coredump时, master进程会立刻启动新的worker进程继续服务。

2. 多个worker进程处理互联网请求不但可以提高服务的健壮性( 一个worker进程出错后, 其他worker进程
仍然可以正常提供服务) 

2. Nginx配置的通用语法

2.1 块配置项

块配置项由一个块配置项名、参数(非必须)和一对大括号组成。 具体示例如下:

events {
    …
} 

http {
    upstream backend {
        server 127.0.0.1:8080;
    } 
    gzip on;
    server {
        …
        location /webstatic {
            gzip off;
        }
    }
}

上面代码段中的events、 http、server、location、upstream等都是
块配置项,块配置项之后是否如“location /webstatic{…}”那样在后面加上参数, 取决于解析这个块配置项的模块,不能一概而论, 但块配置项一定会用大括号把一系列所属的配置项全包含进来, 表示大括号内
的配置项同时生效。 所有的事件类配置都要在events块中, http、 server等配置也遵循这个规定。
块配置项可以嵌套。 内层块直接继承外层块

2.2 配置项的语法格式

语法格式:

配置项名 配置项值 配置项值 … ; 

说明:
    配置项由配置项名和配置项值组成;
    块配置项由多个配置项组成;

例如:
user nobody;    // 配置项名 配置项值
worker_processes 8;
error_log varlog/nginx/error.log error;
  • 首先, 在行首的是配置项名, 这些配置项名必须是Nginx的某一个模块想要
    处理的, 否则Nginx会认为配置文件出现了非法的配置项名。 配置项名输入结束后, 将以空格作为分隔符
  • 其次是配置项值, 它可以是数字或字符串( 当然也包括正则表达式) 。 针对一个配置项, 既可以只有一个值, 也可以包含多个值, 配置项值之间仍然由空格符来分隔
  • 最后, 每行配置的结尾需要加上分号
2.3 配置项的注释

如果有一个配置项暂时需要注释掉, 那么可以加“#”注释掉这一行配置。 例如:

#pid logs/nginx.pid;
2.4 配置项单位

大部分模块遵循一些通用的规定, 如指定空间大小时不用每次都定义到字节、 指定时间时不用精确到毫秒。

当指定空间大小时, 可以使用的单位包括:
  • K或者k千字节( KiloByte, KB)
  • M或者m兆字节( MegaByte, MB)
    例如:
gzip_buffers 48k;
client_max_body_size 64M;
当指定时间时, 可以使用的单位包括:
  • ms( 毫秒) , s( 秒) , m( 分钟) , h( 小时) , d( 天) , w( 周, 包含7天) ,M( 月, 包含30天) , y( 年, 包含365天)

例如:

expires 10y;
proxy_read_timeout 600;
client_body_timeout 2m;
2.5 在配置中使用变量

有些模块允许在配置项中使用变量, 如在日志记录部分, 具体示例如下:

log_format main '$remote_addr - $remote_user [$time_local] "$request"'
'$status $bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

其中, remote_addr是一个变量, 使用它的时候前面要加上$符号。 需要注意的是, 这种
变量只有少数模块支持, 并不是通用的。

猜你喜欢

转载自blog.csdn.net/u013068377/article/details/82821649