Nginx配置文件编写(基础配置)

目录:

一、从一个简单的Nginx配置文件入手

  1. 如何使用自定义的配置文件
  2. Nginx配置文件的结构

二、Nginx服务的基本配置

  1. 用于调试进程和定位问题的配置项
  2. 正常运行的配置项
  3. 优化性能的配置项
  4. 事件类配置项

一、从一个简单的Nginx配置文件入手:

worker_processes 4;

events {
	worker_connections 1024;
}

http {
	server {
		listen 192.254.1.16:9000;
		server_name  192.254.1.16;

		location / {
			root /usr/local/nginx/html/;
		}
	}
}

1. 如何使用自定义的配置文件:

Nginx默认的配置文件是:

/usr/local/nginx/conf/nginx.conf

如果需要使用自定义的配置文件,则需要在运行前指定所用配置文件的路径:

./sbin/nginx -c my_conf/my_conf.conf

关于Nginx命令行支持的参数,可使用 ./sbin/nginx -h 查看:

./nginx -h 			 	# this help
./nginx -c filename  	# set configuration file (default: conf/nginx.conf)
./nginx -s signal 		# send signal to a master process: stop, quit, reopen, reload

./nginx -v				# show version and exit
./nginx -V				# show version and configure options then exit

./nginx -q				# suppres non-error messages during configuration testing
./nginx -p prefix		# set prefix path (default: /usr/local/nginx)
./nginx -g directives	# set global directives out of configuration file

2. Nginx配置文件的结构:

在这里插入图片描述

配置文件由若干个指令组成,指令分为简单指令和块指令。
最基本的配置项语法格式:

配置项名  配置项值 ;

Nginx配置文件主要分为四部分:

(1)main:
全局配置,用于配置与具体业务无关的参数,例如 worker_processes用来配置要起几个线程;

(2)events:
用于配置影响Nginx服务与用户之间连接的属性,例如 worker_connections 配置每个线程的最大连接数;

(3)http:
用于配置Nginx的业务功能,除http外,还有email;

(4)server:
server必须位于http内部,用于配置Nginx的一个主机;其中listen指定监听的端口号;server_name指定主机名;location用于指定主机上的资源位置。

TIPS:

“worker_processes”, “events”, “http”, “server”, “worker_connections” 这些配置项的名称,在Nginx源码中都是写死的字符串,在Nginx运行时会根据配置文件中的配置项去源码中查找与之匹配的字符串,并按照给出的配置项值进行服务器配置,所以我们需要做的是熟悉这些常用的配置项的名称及功能、用法。


二、Nginx服务的基本配置:

Nginx的基本配置可按照 用户使用时的预期功能 分为以下 4 类:
(这些是Nginx的基本配置项,不论是要配置HTTP还是EMAIL服务,是静态Web服务器还是反向代理,都要先配置这些基本项,它们是通用项。)

1. 用于调试进程和定位问题的配置项:

(1) 使Nginx以守护进程的方式在后台运行,默认on

daemon on;
daemon off;

(2) 以master/worker的方式工作,默认on

master_process on;
master_process off;

(3) 设置error日志的路径

error_log logs/error.log error;

(4) 是否处理几个特殊的调试点:

debug_points stop
debug_points abort;

通常不会使用这个配置项。Nginx在一些关键的错误逻辑中设置了调试点,如果设置为stop,代码执行到这些预设的调试点就会发出SIGSTOP信号以用于调试;如果设置为abort,则会产生一个coredump,用于gdb查看当时的Nginx各种信息。

(5) 仅对某个IP的客户端输出debug级别的日志,其他客户端仍使用error_log中配置的日志界别:

debug_connection IP;
debug_connection CIDR;

这一配置项对定位高并发场景下发送的问题非常有用!仅跟踪某个IP的客户端的debug级别日志

例如:

events {
    debug_connection 10.224.66.14;
    debug_connection 10.224.57.0/24;
}

(6) 限制coredump核心转储文件的大小:

worker_rlimit_core [size];

(7) 指定coredump文件生成目录:

working_directory [path];

Tips:

  1. 守护进程(daemon)是什么:

    守护进程(daemon)是脱离终端并且在后台运行的进程。它脱离终端是为了避免进程执行过程中的信息在任何终端上显示,这样一来,进程也不会被任何终端所产生的信息所打断(比如Ctrl+C不会终止Nginx的运行)。Nginx毫无疑问是一个需要以守护进程方式运行的服务,因此默认都是以这种方式运行的(默认配置项值为on)。
    不过Nginx还是提供了关闭守护进程的模式,之所以提供这种模式,是为了方便跟踪调试Nginx,毕竟用gdb调试进程时最烦琐的就是如何继续跟进fork出的子进程了。

  2. coredump怎么用:

    coredump,就是核心转储
    在Linux系统中,当进程发生错误或者收到信号而终止时,系统会将进程执行时的内存内容(核心映像)写入一个文件(core文件),以作为调试之用,这就是所谓的核心转储(core dumps)。
    当Nginx进程出现一些非法操作(如内存越界)导致进程直接被操作系统强制结束时,会生成核心转储core文件,可以从core文件获取当时的堆栈、寄存器等信息,从而帮助我们定位问题。但是这种core文件中的许多信息不一定是用户需要的,如果不加以限制,那么可能一个core文件就会达到几个GB,这样随便coredumps几次就会把磁盘占满,引发严重问题。
    通过worker_rlimit_core配置可以限制core文件的大小,从而有效帮助用户定位问题。

2. 正常运行的配置项:

(1) 定义环境变量:
允许用户直接设置操作系统上的环境变量。

env VAR | VAR = value;
eg:
env TESTPATH = /tmp/;

(2) 嵌入其他配置文件:
类似于与C源文件中包含其他的头文件,Nginx配置文件中也可以使用include将其他配置文件嵌入到当前的nginx.conf中。

http {
	include mime/types;
}

mime/types也是一个配置文件。

(3) pid文件的路径:

pid [path/file];

(4) Nginx worker进程运行的用户及用户组:

user [username][groupname];

(5) 指定Nginx worker进程可以打开的最大文件句柄数:

worker_rlimit_nofile [limit];

(6) 限制信号队列:

worker_rlimit_sigpending [limit];

3. 优化性能的配置项:

(1) 【常用】配置worker进程数:

worker_processes 1;

这些进程都是单线程,一般配置成与CPU数量相同。

(2) 绑定Nginx worker进程到指定的CPU内核:

worker_puc_affinity [cpumask][cpumask];

(3) SSL硬件加速:

ssl_engine device;

(4) 系统调用gettimeofday的执行频率:

timer_resolution t;

(5) Nginx worker进程优先级设置:

worker_priority 0;

4. 事件类配置项:

(1) 是否打开accept锁:

accept_mutex on;		# 默认on
accept_mutex off;

accept_mutex是Nginx的负载均衡锁,这把锁可以让多个worker进程轮流的、序列化的与新的客户端建立连接。
当某一个worker进程建立的连接数量达到worker_connections配置的最大连接数的7/8时,会大大的减少该worker进程试图建立新的TCP连接的机会,以此实现所有worker进程智商处理的客户端的请求数尽量相近。

accept锁是默认打开的,如果关闭它,那么TCP建立的耗时会更短,但worker进程之间的负载会非常不平衡。

(2) lock文件的路径:

lock_file logs/nginx.lock;

(3) 两次尝试获得accept锁之间的间隔时间:

accept_mutex_delay 500ms;

使用accept锁后同一时间只能有一个worker进程获得锁,accept锁是非阻塞的,获取失败会立即返回,此进程需要间隔accept_mutex_delay时间后才能再次尝试获得锁。

(4) 批量建立新连接:

multi_accept off;

(5) 选择事件类型:

use epoll;
use select;
use poll;
use kqueue;

Nginx会自动选择最合适的实现模型,默认为epoll

(6) 【常用】每个worker进程可以同时处理的最大连接数:

worker_connections 1024;

参考内容:

《深入理解Nginx:模块开发与架构解析》
死磕nginx系列 - - 配置文档解读

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实战Nginx.取代Apache的高性能Web服务器 电子工业出版社 319页 第1部分 基础篇 第1章 Nginx简介 1.1 常用的Web服务器简介 1.2 Nginx简介 1.3 选择Nginx的理由 1.4 Nginx与Apache、Lighttpd的综合对比 第2章 Nginx服务器的安装与配置 2.1 安装Nginx服务器所需要的系统资源 2.2 Nginx的下载 2.3 Nginx的安装 2.4 Nginx的启动、停止、平滑重启 2.5 Nginx的平滑重启 2.6 Nginx的信号控制 2.7 Nginx的平滑升级 第2部分 进 阶 篇 第3章 Nginx的基本配置与优化 3.1 Nginx的完整配置示例 3.2 Nginx的虚拟主机配置 3.3 Nginx的日志文件配置与切割 3.4 Nginx的压缩输出配置 .3.5 Nginx的自动列目录配置 3.6 Nginx的浏览器本地缓存设置 第4章 Nginx与PHP(FastCGI)的安装、配置与优化 4.1 获取相关开源程序 4.2 安装PHP 5.2.10(FastCGI模式) 4.3 安装Nginx 0.8.15 4.4 配置开机自动启动Nginx + PHP 4.5 优化Linux内核参数 4.6 在不停止Nginx服务的情况下平滑变更Nginx配置 4.7 编写每天定时切割Nginx日志的脚本 第5章 Nginx与JSP、ASP.NET、Perl的安装与配置 5.1 Nginx与JSP(Tomcat)在Linux上的安装、配置 5.2 Nginx与ASP.NET(Mono+FastCGI)在Linux上的安装、配置 5.3 Nginx与Perl(FastCGI)在Linux上的安装、配置 第6章 Nginx HTTP负载均衡和反向代理的配置与优化 6.1 什么是负载均衡和反向代理 6.2 常见的Web负载均衡方法 6.3 Nginx负载均衡与反向代理的配置实例 6.4 Nginx负载均衡的HTTP Upstream 模块 6.5 Nginx负载均衡服务器的双机高可用 第7章 Nginx的Rewrite规则编写实例 7.1 什么是Nginx的Rewrite规则 7.2 Nginx Rewrite规则相关指令 7.3 PCRE正则表达式语法 7.4 Nginx的Rewrite规则编写实例 7.5 Nginx与Apache的Rewrite规则实例对比 第8章 Nginx模块开发 8.1 Nginx模块概述 8.2 Nginx模块编写实践 第9章 Nginx的Web缓存服务与新浪网的开源NCACHE模块 9.1 什么是Web缓存? 9.2 Nginx的Web缓存服务 9.3 新浪网开源软件项目——基于Nginx的NCache网页缓存系统 第3部分 实战篇 第10章 Nginx在国内知名网站中的应用案例 10.1 Nginx反向代理与负载均衡类网站应用案例 10.2 Nginx+PHP类网站应用案例 第11章 Nginx的非典型应用实例 11.1 用HTTPS(SSL)构建一个安全的Nginx Web服务器 11.2 采用Nginx搭建FLV视频服务器 11.3 Nginx+PHP+MySQL在小内存VPS服务器上的优化 11.4 采用Nginx搭建正向代理服务器 第4部分 模块篇 第12章 Nginx的核心模块 12.1 主模块指令 12.2 主模块变量 12.3 事件模块指令 第13章 Nginx的标准HTTP模块 13.1 HTTP的核心模块 13.2 HTTP Upstream模块 13.3 Http Access 模块 13.4 HTTP Auth Basic 模块 13.5 Http Autoindex 模块 13.6 Http Browser 模块 13.7 Http Charset 模块 13.8 Http Empty Gif模块 13.9 Http Fcgi 模块 13.10 geo 模块 13.11 Gzip 模块 13.12 Http Headers模块 13.13 Http Index模块 13.14 HTTP Referer模块 13.15 Http Limit Zone模块 13.16 Http Limit Req模块 13.17 Http Log模块 13.18 Http Map模块 13.19 Http Memcached模块 13.20 Http Proxy模块 第14章 Nginx的其他HTTP模块 14.1 Http Addition模块 14.2 Embedded Perl模块 14.3 Flv Stream模块 14.3 flv 指令 14.4 Http Gzip Static模块 14.5 Http Random Index模块 14.6 Http Geo IP模块 14.7 Http RealIp模块 14.8 Http SSL模块 14.9 Http Stub Status模块 14.10 Http Sub模块 14.11 Http Dav模块 14.12 Google Perftools模块 14.13 Http XSLT模块 14.14 Http Secure Link模块 14.15 Http Image Filter模块 第15章 Nginx的邮件模块 15.1 Nginx邮件核心模块 15.2 Nginx邮件认证模块 15.3 Nginx邮件代理模块 15.4 Nginx邮件SSL模块 15.5 Nginx邮件模块配置实例

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值