学习nginx

110 阅读2分钟

介绍

nginx有一个master进程和若干worker进程。worker进程的数量在配置文件中定义,可固定值也可根据cpu核心数来自动调整。

  • master进程:读取/评估配置、分发请求、管理worker进程
  • worker进程:处理请求
  • 配置文件位置: /usr/local/nginx/conf/etc/nginx/usr/local/etc/nginx

信号

nginx -s 信号,其中信号可选值与意义如下:

信号意义
stop快速退出
quit安全退出
reload重载配置文件
reopen重新打开日志文件

  1. 官方文档中说quit信号会处理完当前请求后在安全退出,stop信号并未提及,可能是直接关闭。
  2. 要以启动nginx的用户执行quit信号。

reload信号会先检查配置文件合法性,如果配置无误会开启新的worker进程接收新到的请求,并发信号给老的worker进程,老的worker进程处理完当前的请求后会自动安全退出。
也可以使用kill命令,如kill -s QUIT 1628(1628为master进程号),另一个常用的kill -HUP 1628效果同reload信号。

配置文件的结构

配置文件由指令(simple directive)和指令块(block directive)组成,指令由;结束,指令块由{}组成,指令块可嵌套。不在指令块中的指令为主上下文(main context)。
#开头的行是注释。
eventhttp指令块在主上下面中,server指令块在http指令块中,location指令块在server指令块中。

为静态页面提供服务

http {
    server {
        location / {
            root /data/wwww;
        }

        location /images/ {
            root /data;
        }
    }
}

以*/images/开头的请求会加上/data形成本地的路径( /data/images/*)来获取资源,其他请求会直接到/data/www/目录下获取。

  • root指令的意思是指在完整的url前加上参数,形成本地的资源路径。
  • location匹配规则:最早正则匹配>其他正则匹配>最长准确匹配>其他准确匹配

简单的代理服务器

server {
    listen 8080;
    root /data/up1;

    location / {
    }
}

监听8080端口,过来的所有请求去/data/up1获取资源。

server {
    location / {
        proxy_pass http://localhost:8080;
    }

    location /images/ {
        root /data;
    }
}

所有以*/images/开头的请求去/data/iamges*下获取资源,其他请求转发到本地的8080端口。

server {
    location / {
        proxy_pass http://localhost:8080/;
    }

    location ~ .(gif|jpg|png)$ {
        root /data/images;
    }
}

.gif.jpg.png结尾的url去*/data/images*下获取资源,其他请求转发到本地的8080端口。

  • location指令中用~表示后面跟随的是正则。

FastCGI代理

server {
    location / {
        fastcgi_pass                    localhost:9000;
        fastcgi_param SCRIPT_FILENAME   $document_root$fastcgi_script_name;
        fastcgi_param QUERY_STRING      $query_string;
    }

    location ~ .(gif|jpg|png)$ {
        root /data/images;
    }
}

使用fastcgi_pass指令代替proxy_pass来表明使用的是FastCGI,fastcgi_param指令设置传递给FastCGI服务器的参数

以上就是我学习nginx的一些知识,如有不正确的地方还请指正