Nginx通用语法和基本配置

通用语法

user nobody;
worker_processes 8;
error_log varlog/nginx/error.log error;
#pid logs/nginx.pid;
events {
    use epoll;
    worker_connections 50000;
}
http {
    include mime.types;
    default_type application/octet-stream;
    log_format main '$remote_addr [$time_local] "$request" '
                    '$status $bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';
    access_log logs/access.log main buffer=32k;
    ...
}

块配置项

块配置项由块配置项名和大括号组成,块配置项可以嵌套,内层块继承外层块。内外层块配置冲突时,由解析配置的模块决定。

#配置项名
events{
    ...
}
http {
    upstream backend {
        #配置项名 配置项值;
        server 127.0.0.1:8080;
    }
    gzip on;
    server {
        location /webstatic {
                gzip off;
        }
    }
}

配置项值可以是数字、字符串、正则表达式。每个配置项可以有多个空格分隔的配置项值。

若配置项值中包含语法符号,需要用引号括起来。

log_format main '$remote_addr - $remote_user [$time_local] "$request" ';

配置项值可否使用单位,取决于解析模块

基本配置

Nginx至少加载几个核心模块和一个事件类模块。这些模块运行时支持的配置项为基本配置,即其他模块都依赖的配置项

用于调试和查错的配置项

是否以守护进程方式运行Nginx

daemon on|off;

Nginx默认以守护进程运行,为了方便跟踪调试,可以设置为关闭守护模式

是否以master/worker方式工作

master_process on|off;

默认开启,关闭时,master不会fork出worker进程,而是自己处理请求。方便调试。

error日志

error_log path level;

默认为error_log logs/error.log error;

path可以是文件;也可以是/dev/null,此时不输出日志;也可以是stderr,输出到标准错误文件。

level是输出级别(debug/info/notice/warn/error/crit/alert/emerg),从左至右依次增大。输出级别大于等于level的日志。
如果需要设置为debug,在configure时必须加上--with-debug参数。

是否处理几个特殊调试点

debug_points [stop|abort];

Nginx在一些关键的错误逻辑中设置了调试点。设置为stop,在代码执行到这些点时,发出SIGSTOP信号用于调试。设置为abort,会产生coredump文件,使用gdb来查看Nginx当时状态。

对指定的客户端输出debug级别的日志。

debug_connection [IP|CIDR];

事件类配置项,需要放在events中。

events {
    debug_connection 10.224.66.14;
    debug_connection 10.224.57.0/24;
}

来自以上ip的请求会输出debug级别的日志。该配置,同样需要在configure加入--with-debug参数。

限制coredump核心转储的文件大小

worker_rlimit_core size;

Linux在进程出错或收到信号而终止时,会将进程当前内存内容(核心映像)写入core文件,以便调试,即核心转储。限制文件大小避免占用过多容量。

指定coredump目录

working_directory path;

worker进程工作目录,设置coredump文件的目录

正常运行的配置项

定义环境变量

env VAR|VAR=VALUE;

env TESTPATH=/tmp/;

导入其他文件

include path;

尅是绝对路径或相对路径,可以是明确文件名或含有通配符*的文件名,同时导入多个文件

include mime.types;
include vhost/*.conf;

pid文件路径

pid path;

该文件影响Nginx可否运行

worker进程运行的用户及用户组

user username [groupname];

默认user nobody nobody,configure指定了参数--user=username和--group=groupname时,使用参数指定的用户及用户组。

worker进程可以打开的最大文件数

worker_rlimit_nofile limit;

限制信号队列

worker_rlimit_sigpending limit;

限制每个用户发往Nginx的信号队列大小,队列满时,用户信号会被丢弃。

性能优化配置项

worker进程个数

worker_processes number;

如果没有阻塞式调用,进程数应和CPU核数一样。如果有,则应多于CPU核数。

绑定worker到CPU内核

worker_cpu_affinity cpumask[cpumask...];

每个worker进程独享CPU,在内核调度策略上实现完全并发。

worker_processes 4;
workercpuaffinity 1000 0100 0010 0001;

SSL硬件加速

ssl_engine device;

有SSL硬件加速设备时,该配置加快SSL协议处理速度。openssl engine -t命令检查硬件加速设备。

worker优先级

worker_priority nice;

默认为0,优先级由静态优先级和内核根据进程执行情况动态调整(±5)决定,nice是静态优先级(-20 ~ +19),越小优先级越高。希望Nginx占有更多系统资源,可将nice调小,但不建议比内核进程的nice(通常为-5)还小。

事件类配置项

是否打开accept锁

accept_mutex [on|off];

默认打开,关闭时建立TCP连接耗时更短,但worker负载不均,不建议关闭。

lock文件路径

lock_file path;

默认为logs/nginx.lock,accept锁打开时,是原子锁。当不支持原子锁时,需要该文件,利用文件锁实现accept锁,此时该配置才生效。

使用accept锁后到建立连接之间的延迟

accept_mutex_delay Nms;

默认50ms,开始accept锁后,同时只有一个worker拿到锁,取不到时,立即返回。当worker取锁失败,至少等待accept_mutex_delay后才能再次尝试取锁。
因为拿到锁后,需要等待accept_mutex_delay才能建立连接,建立连接后拿到锁的worker才会释放锁。

批量建立连接

multi_accept on|off;

默认off,事件模型通知有新连接时,尽可能对本次调度中所有的请求都建立连接。

选择事件模型

use [kqueue|rtsig|epoll|/dev/poll|select|poll|eventport];

默认自动选择最佳模型。linux有三种模型(poll/select/epoll)。epoll是性能最好的,默认选择该模型。

worker最大连接数

worker_connections number;

每个worker可以同时处理的最大连接数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值