欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Nginx安装及配置文件解析

程序员文章站 2022-05-18 17:09:56
...

nginx 下载

http://nginx.org/en/download.html

nginx 版本:

  • 主线版本
    Nginx安装及配置文件解析
    主线版本,即最新版。生产中使用的是稳定版。

本教程采用的nginx1.18版本

[aaa@qq.com nginx]# nginx -V
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017

nginx配置文件介绍

main(全局设置)、server(主机设置)、upstream(负载均衡服务器设置)和 location(URL匹配特定位置的设置)。

  • main块设置的指令将影响其他所有设置;
  • server块的指令主要用于指定主机和端口;
  • upstream指令主要用于负载均衡,设置一系列的后端服务器;
  • location块用于匹配网页位置。

这四者之间的关系式:server继承main,location继承server,upstream既不会继承其他设置也不会被继承。
在这四个部分当中,每个部分都包含若干指令,这些指令主要包含Nginx的主模块指令、事件模块指令、HTTP核心模块指令,同时每个部分还可以使用其他HTTP模块指令,例如Http SSL模块、HttpGzip Static模块和Http Addition模块等。

以下为nginx1.18版本的主配置文件:


user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

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

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

nginx配置解析

1、全局设置

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}
  • user是个主模块指令,指定Nginx Worker进程运行用户以及用户组,默认由nobody账号运行。
  • worker_processes是个主模块指令,指定了Nginx要开启的进程数。每个Nginx进程平均耗费10M~12M内存。建议指定和CPU的数量一致即可。

全局错误日志及PID文件

  • error_log是个主模块指令,用来定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少。
  • pid是个主模块指令,用来指定进程pid的存储文件位置。
    worker_rlimit_nofile用于绑定worker进程和CPU, Linux内核2.4以上可用。

工作模式及连接数上线

  • events事件指令是设定Nginx的工作模式及连接数上限:
  • use是个事件模块指令,用来指定Nginx的工作模式。

Nginx支持的工作模式有
select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中。

对于Linux系统,epoll工作模式是首选。
epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能

  • worker_connections单个工作进程的最大并发连接数,它也是个事件模块指令,用于定义Nginx每个进程的最大连接数,默认是1024。最大客户端连接数由worker_processes和worker_connections决定,
即:Max_client=worker_processes*worker_connections。
 在作为反向代理时,max_clients变为:max_clients = worker_processes *
worker_connections/4。

进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令ulimit -n 65536后worker_connections的设置才能生效。

2、http标签

nginx1.18版本的主配置文件,不像之前的版本里面还有很多注释,它很简洁只有以下内容:

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

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

    access_log  /var/log/nginx/access.log  main;		#设定日志格式

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

如果你在学习需要什么可以往里面添加。

  • include是个主模块指令,实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度。类似于Apache中的include方法。 在这里的作用是设定mime类型,类型由mime.type文件定义

  • default_type属于HTTP核心模块指令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置PHP环境时,Nginx是不予解析的,此时,用浏览器访问PHP文件就会出现下载窗口。

  • log_format是Nginx的HttpLog模块指令,用于指定Nginx日志的输出格式。main为此日志输出格式的名称,可以在下面的access_log指令中引用。

  • sendfile和tcp_nopush

    sendfile        on;
    #tcp_nopush     on;

  指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件;对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptim。将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞。

  • keepalive_timeout设置客户端连接保持活动的超时时间。在超过这个时间之后,服务器会关闭该连接;默认是65,你可以根据自己的情况进行调整。

3、server和location标签

  server标志定义虚拟主机开始,listen用于指定虚拟主机的服务端口,server_name用来指定IP地址或者域名,多个域名之间用空格分开。index用于设定访问的默认首页地址,root指令用于指定虚拟主机的网页根目录,这个目录可以是相对路径,也可以是绝对路径。Charset用于设置网页的默认编码格式。access_log用来指定此虚拟主机的访问日志存放路径,main用于指定访问日志的输出格式。

按照上面的解释,我们可以这么理解:

server_name+listen+location

server {           		#一个server就是一个网站
	listen 80;	#监听的端口
	server_name www.spokes.com spokes.com		#网站的主机名,每个网站必须都不一样
	location / {		#用于定义网站的根目录
		root /pokes;						#网站的根目录在根下pokes目录中,放任何地方都可以。
		index index.html index2.html		#主页/首页,如果第一个找不到,会依次找第二个、第三个;
	}
	access_log logs/access_ spokes.log main;   ##设定本虚拟主机的访问日志


}
相关标签: Nginx