Nginx 配置文件解读

一.配置文件解读

nginx配置文件主要分为四个部分

main{ #(全局设置)
    http{ #服务器配置
        upstream{} #(负载均衡服务器设置)
        server{ #(主机设置:主要用于指定主机和端口)
            location{} #(URL匹配的设置)
        }
    }
}

server继承自httplocation继承自serverupstream即不会继承其他设置也不会被继承。

Nginx 配置文件解读_第1张图片

1.1、main 全局配置

nginx在运行时与具体业务功能无关的一些参数,比如工作进程数,运行的身份等。

user liming;
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
error_log  /data/nginx/logs/error.log  crit;
pid        /data/nginx/logs/nginx.pid;
worker_rlimit_nofile 65535;
  • user nginx: 指定nginx进程使用什么用户启动
  • worker_processes 4: 指定启动多少进程来处理请求,一般情况下设置成CPU的核数,如果开启了ssl和gzip应该设置成与逻辑CPU数量一样甚至为2倍,可以减少I/O操作。使用grep ^processor /proc/cpuinfo | wc -l查看CPU核数。
  • worker_cpu_affinity 0001 0010 0100 1000: 在高并发情况下,通过设置将CPU和具体的进程绑定来降低由于多核CPU切换造成的寄存器等现场重建带来的性能损耗。如worker_cpu_affinity 0001 0010 0100 1000; (四核)。
  • error_log logs/error.log: error_log是个主模块指令,用来定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少。
  • pid logs/nginx.pid: 指定进程pid文件的位置

我们可以使用ps -ef | grep nginx查看masterworker的进程,这里有一个master和四个worker:

Nginx 配置文件解读_第2张图片

1.2、events模块

events 模块主要是nginx 和用户交互网络连接优化的配置内容,我们主要看一下两个配置:

events{
  use epoll;
  worker_connections  65536;
}
  • use epoll:是使用事件模块指令,用来指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中。对于Linux系统,epoll工作模式是首选。在操作系统不支持这些高效模型时才使用select。
  • worker_connections 65536:每一个worker进程能并发处理(发起)的最大连接数。
1.3、http服务器
http{
  include       mime.types;
  default_type  application/octet-stream;
  #charset  gb2312;
  sendfile        on;
  keepalive_timeout  60s;
}
  • include:是个主模块指令,实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度。该文件也在conf目录中。
  • default_type:属于HTTP核心模块指令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式。
  • charset gb2312: 指定客户端编码格式。
  • sendfile:实际上是 Linux2.0+以后的推出的一个系统调用,web服务器可以通过调整自身的配置来决定是否利用 sendfile这个系统调用。sendfile是个比 read 和 write 更高性能的系统接口。 当 Nginx 是一个静态文件服务器的时候,开启 SENDFILE 配置项能大大提高 Nginx 的性能。 但是当 Nginx 是作为一个反向代理来使用的时候,SENDFILE 则没什么用。
  • Nginx 使用 keepalive_timeout 来指定 KeepAlive 的超时时间(timeout)。指定每个 TCP 连接最多可以保持多长时间。Nginx 的默认值是 75 秒,有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为 0,就禁止了 keepalive 连接。
1.4、虚拟主机配置详解

http服务上支持【若干虚拟主机】。每个虚拟主机对应一个server配置项,配置项里面包含该虚拟主机相关的配置。

server{
    listen 80 default;
    server_name www.liming.com;
    index index.html index.htm index.php;
    root /data/www;

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${
        expires      30d;
    }

    location ~ .*\.(js|css)?${
        expires      1h;
    }
}
  • listen 80: 监听端口,默认80,小于1024的要以root启动。可以为listen :80、listen 127.0.0.1:80等形式。
  • server_name www.liming.com: 用于设置虚拟主机服务名称,如:127.0.0.1 、 localhost 、域名[www.baidu.com | www.jd.com],也可以进行正则匹配。
  • root /data/www: 定义服务器的默认网站根目录位置。可以是linux的绝对路径(/xxx/xx),也可以是nginx安装目录的相对路径(html)。
  • index index.jsp index.html index.htm :定义路径下默认访问的文件名,一般跟着root放。
1.4.1、location 常见的配置项

location通常用来匹配uri,其基本语法如下:

location [=|~|~*|^~] /uri/ {}

(1)=表示匹配uri时必须做到完全匹配,如

location = /index {}

(2)~表示匹配URI时是字母大小写敏感的,可以使用正则表达式

(3)~*表示匹配URI时是忽略字母大小敏感的,可以使用正则表达式

(4)^~表示匹配uri时只需满足前缀匹配即可

# 所有 /./img/开头的uri会全部匹配
location ^~ /./img/ {}

(5)uri参数中是可以使用正则表达式的,如匹配以 .gif .jpg和.jpeg结尾的uri,如下:

location ~* \.(gif|jpg|jpeg)$ {}

(6)以下方式可以匹配所有的uri

location / {}

(7)@ 指定一个命名的location,一般用于内部重定义请求:

location @name {}

结果总结: 匹配的优先顺序,=> ^~(匹配固定字符串,忽略正则)>~*>/ ,工作中尽量将‘=’放在前面。

1.4.2、文件路径的定义

(1)以root方式设置资源路径

语法 root path ,默认 root html,可以在http、server、location模块中配置。

location ^~ /backend {
	root /data/www/backend
}

如果url为 /backend/index/test.html则会返回/data/www/backend/backend/index/test.html这个文件。

(2)以alias方式设置资源路径

alias也是用来设置文件资源的,它和root不同点在于如何解读紧跟location后面的uri参数,可以在location中配置:

location ^~ /backend {
	alias /data/www/backend
}

如果url为 /backend/index/test.html则会返回/data/www/backend/index/test.html文件。

alias会将location后的url部分丢弃掉,而root不会

(3)访问首页

可以在http、server、location中配置。

index index.html index.htm index.php

nginx会依次访问index中定义的文件,知道访问成功为止。

(4)根据http返回码重定向页面

可以在http、server、location中配置。

error_page 404 /404.html
error_page 502 503 504 /50x.html

(5)try_files

try_files path1 path2 ... uri

该配置项可以配置在server、location模块。

try_files后边会跟若干路径,nginx会尝试按照顺序访问每一个path,如果可以有效的读取,就直接访问当下path资源,否则继续向下访问,如果都读取不到就重定向到uri参数上

try_files /a/b.html $uri $uri/index.html $uri.html @other;
location @other {
    proxy_pass http://backend
}

你可能感兴趣的:(Nginx,nginx,运维)