Nginx笔记——基本配置

Nginx 简介

背景

  • Nginx是由俄罗斯程序员Igor Sysoev编写,2004年10月作为一个试图回答公众发布C10K问题。其中 - C10k是同时管理10,000 个连接的挑战。Nginx 采用了事件驱动和异步架构,此设计使Nginx成为可扩展、高性能的服务器。
  • 它是一个开源、轻量级和高性能的Web服务器,也用作HTTP、HTTPS、SMTP、IMAP、POP3协议的反向代理服务器,另一方面,它也用作IMAP、POP3 和IMAP的HTTP负载均衡器、HTTP缓存和电子邮件代理。
  • 简而言之,我们可以说Nginx是一种用于处理并发请求的软件。

优点

  • Nginx 最重要的功能是反向代理和负载均衡,反向代理将允许我们在端口80上托管多个域名,同时使用不同的语言编写后端服务,负载均衡可以把多个提供相同功能的后端服务配置成彼此冗余。
  • Nginx 负责访问日志、黑名单、负载平衡和提供静态文件访问,后台Web服务则可专注于业务逻辑处理,Nginx是动静分离架构的入口程序。
  • 支持高并发,内存占用小。
  • 支持配置文件动态修改。

工作原理

nginx在启动后,会以daemon的方式在后台运行,后台进程包含一个master进程和多个worker进程,worker进程以非root用户运行,可以在配置文件中配置运行worker进程的用户。
master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控 worker 进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。
worker进程则是处理基本的网络事件。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求

目录结构

/usr/local/nginx
├── client_body_temp               # POST大文件暂存目录
├── conf                           # Nginx所有配置文件的目录
│   ├── fastcgi.conf               # fastcgi相关参数的配置文件
│   ├── fastcgi.conf.default       # fastcgi.conf的原始备份文件
│   ├── fastcgi_params             # fastcgi的参数文件
│   ├── fastcgi_params.default
│   ├── koi-utf
│   ├── koi-win
│   ├── mime.types                 # 媒体类型
│   ├── mime.types.default
│   ├── nginx.conf                 #这是Nginx默认的主配置文件,日常使用和修改的文件
│   ├── nginx.conf.default
│   ├── scgi_params                # scgi相关参数文件
│   ├── scgi_params.default
│   ├── uwsgi_params               # uwsgi相关参数文件
│   ├── uwsgi_params.default
│   └── win-utf
├── fastcgi_temp                   # fastcgi临时数据目录
├── html                           # Nginx默认站点目录
│   ├── 50x.html
│   └── index.html
├── logs                           # Nginx日志目录
│   ├── access.log
│   ├── error.log
│   └── nginx.pid
├── proxy_temp                     # 临时目录
├── sbin                           # Nginx 可执行文件目录
│   └── nginx
├── scgi_temp
└── uwsgi_temp

配置解析

Nginx主配置文件/usr/local/nginx/confnginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组织,通常每一个区块以一对大括号{}来表示开始与结束。

  • Main位于nginx.conf 配置文件的最高层,用来配置对整个 server 都有效的参数;
  • Event位于Main下层,主要影响 Nginx 服务器与用户的网络连接;
  • Http位于Event下层,其内部允许有多个 Server 层,用于对不同的网站做不同的配置;
  • Server层里面允许有多个Location,用于对不同的路径进行不同模块的配置。

Main全局配置

主要会设置一些影响Nginx服务器整体运行的配置指令,主要包括配置运行Nginx服务器的用户(组)、允许生成的worker process数,进程PID存放路径、日志存放路径和类型以及配置文件的引入等。默认配置如下:

user  root;                           #进程用户
worker_processes  1;                  #工作进程,配合和CPU个数保持一致
#error_log  logs/error.log;           #错误日志路径及级别
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;           #Nginx服务启动的pid

events 配置

主要影响Nginx服务器与用户的网络连接,常用的设置包括是否开启对多worker process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个worker process可以同时支持的最大连接数等。默认配置如下:

events {
    worker_connections  1024;        #每个worker进程支持的最大连接数
    #use epoll;				         #内核模型,select、poll、epol
}

http配置

主要包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等。默认配置如下:

http {
    include       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  logs/access.log  main;      #访问日志
    sendfile        on;          #优化静态资源
    #tcp_nopush     on;          #nginx不要缓存数据,而是一段一段发送
    #keepalive_timeout  0;
    keepalive_timeout  65;       #给客户端分配连接超时时间,服务器会在这个时间过后关闭连接。
    #gzip  on;                   #压缩
}

Server配置

Server块也被叫做“虚拟主机”部分,它描述的是一组根据不同server_name指令逻辑分割的资源,这些虚拟服务器响应HTTP请求,因此都包含在http部分。最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。一个server块可以配置多个location 块。基本配置如下:

server {
        listen       80;                            #监听端口,默认80
        server_name  localhost;                     #提供服务的域名或主机名
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {                                #控制网站访问路径
            root   /root/www;                       #存放网站的路径
            index  index.html index.htm;            #默认访问的首页
        }
        #error_page  404              /404.html;    #错误页面
        error_page   500 502 503 504  /50x.html;    #定义请求错误,指定错误代码
        location = /50x.html {
            root   html;
        }
}

日志配置

日志使用用来进行数据统计、问题排错的重要手段。nginx日志相关涉及的配置有:

  • access_log:访问日志
  • log_format:日志格式
  • error_log:错误日志

access_log配置

访问日志主要记录客户端的请求,客户端向Nginx服务器发起的每一次请求都记录在这里,基本语法如下:

access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off; # 关闭访问日志
  • path 指定日志的存放位置
  • format 指定日志的格式。默认使用预定义的combined
  • buffer 用来指定日志写入时的缓存大小。默认是64k
  • gzip 日志写入前先进行压缩。压缩率可以指定,从1到9数值越大压缩比越高,同时压缩的速度也越慢。默认是1
  • flush 设置缓存的有效时间。如果超过flush指定的时间,缓存中的内容将被清空
  • if 条件判断,如果指定的条件计算为0或空字符串,那么该请求不会写入日志
  • 特殊的值off,如果指定了该值,当前作用域下的所有的请求日志都被关闭

默认值: access_log logs/access.log combined
作用域:http、server、location

log_format配置

可以使用log_format来自定义日志格式,具体语法如下:

log_format name [escape=default|json] string ...;
  • name 格式名称。在access_log指令中引用
  • escape 设置变量中的字符编码方式是json还是default,默认是default
  • string 要定义的日志格式内容,该参数可以有多个,参数中可以使用 一些变量

默认值: log_format combined “……”
作用域: http、server

error_log配置

该配置记录服务器和请求处理过程中的错误信息,语法如下:

rewrite_log on | off;

默认值:error_log logs/error.log error
作用域:main、http、mail、stream、server、location

示例

user  root;
worker_processes  1;

error_log  /var/logs/nginx/error.log;
error_log  /var/logs/nginx/error.log  notice;
error_log  /var/logs/nginx/error.log  info; #错误日志

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       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/logs/nginx/access.log  main; #接受日志
    
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   /root/www;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }


}

效果:
Nginx笔记——基本配置_第1张图片
在这里插入图片描述

你可能感兴趣的:(Nginx,服务器,nginx)