nginx新手指南

ngnix有一个主进程和多个工作进程。主进程的工作是读取和验证配置文件,和维护工作进程。工作进程处理实际的请求。nginx应用基于事件的模型和系统相关的机制来有效地将请求分配给工作进程。工作进程的数量在配置文件中定义,可以给一个固定的数字,也可以根据可用的CPU核心数动态调整。

nginx和其模块的工作方式是由配置文件决定的。默认的配置文件名是nginx.conf。默认的放置路径在 /usr/local/nginx/conf, /etc/nginx (CentOS), 或者 /usr/local/etc/nginx (MAC OS). 根据你的系统而有所不同。

启动,停止,重新加载配置文件

启动, 直接运行nginx就启动了。

一旦程序启动了,可以执行如下命令来控制nginx

nginx -s signal

其中signal是下面其中之一。

stop — 快速关闭
quit — 优雅关闭
reload — 重新加载配置文件
reopen — 重新打开log文件

举个例子,关闭进程并且等待工作进程完成当前的请求,使用如下命令

nginx -s quit

这个命令应该使用启动nginx时的用户来执行。

直接修改配置文件,并不会立刻生效。必须要重启nginx或者执行如下命令

nginx -s reload

一旦主进程接收到重新加载配置文件的信号,它会检查新配置文件的合法性,然后试着应用其中的配置。如果成功的话,主进程启动新的工作进程,然后发送消息给老的工作进程,要求他们关闭。否则,主进程回滚更改,然后继续用旧的配置文件来工作。老的工作进程收到关闭命令后,停止接收新的连接,继续服务当前的请求,直到所有的请求都结束了,之后,老的工作进程退出。

也可以是用linux的 kill命令给nginx的进程发信号。这种情况下直接给进程号发信号,应该给主进程发信号,进程号在nginx.pid文件中,这个文件在 /usr/local/nginx/logs ,/var/run 或者 /usr/local/var/run/ (MAC)下。

假设进程号是 1628 ,执行如下命令来关闭nginx

kill -s QUIT 1628

也可以用ps命令来找进程号

ps -ax | grep nginx

配置文件的结构

nginx包含许多模块。模块由配置文件中指令控制。指令分为简单指令和块指令。一条简单指令包含名字和参数,以空格分开,分号结尾。块指令和单条指令的结构一样,但是结尾不是分号,而是用一对大括号包起来。如果一个块命令的大括号中包含其他指令,构成一个上下文。 (如: events, http, server, and location).

如果一个指令不在任何一个大括号里,那这个指令就是在main上下文。
event和http在main上下文, server在http中,location在server中。

#后面的是注释内容。

静态资源服务器

web服务器的一个重要任务就是提供文件服务(如图片和静态的html网页)。

首先创建一个/data/www文件夹,里面放一个index.html文件。在建一个/data/images文件夹,里面放一些图片。

然后,打开配置文件。默认的配置文件中已经有几个 server块了,还有大量被注释的配置。现在将server的配置都注释掉,或删除也行。然后开始一个新的server快。

http {
    server {

    }
}

然后在server中再添加一个 location块, 现在配置文件变成这样

server {
    location / {
    root /data/www;
    }
}

这个location块指定了'/'前缀的请求。为了匹配请求,URI 会加上在root指令中的path。即 /data/www ,这样构成了请求的文件 在 本地文件系统的路径。如果有多个匹配的本地location块,nginx会选择最长的前缀匹配。上面例子中的前缀是最短的前缀,只有1个长度。只有所有其他的都无法匹配时,才会选择这个。

下面 添加第二个 location 块

location /images/ {
    root /data;
}

这个块会匹配以“/images/” 开头的请求。

现在server的配置看起来像是这样

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

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

现在这已经是一个可以工作的配置了。默认会绑定80端口。可以在机器上访问 http://localhost/ 打开。也可以用 http://localhost/images/example.png 来访问 文件 /data/images/example.png。

使配置生效的方法是 给Master进程发信号

nginx -s reload

备注:

有时候,你这样做了之后,还是不能访问,具体的原因就需要看一下 nginx的错误日志了。错误日志error.log可能在 /usr/local/nginx/logs 或 /var/log/nginx 下面 。如果你在nginx配置中指定错误日志的地方的话,那就去那里看。

备注1:
配置文件中 user 这个指令 接口两个参数。username 和 group username。 如果你只写一个参数,它会假定你的 group name 和 username 一样。 但是在mac上 root的 group name 是 wheel. 所以,你需要显示的都写出来,不然在启动的时候,会报

nginx: [emerg] getgrnam("root") failed in /usr/local/etc/nginx/nginx.conf:2

应写成

user root wheel

备注2

如果你执行 nginx -s reload后在nginx的错入日志里看到

2018/08/11 12:06:14 [emerg] 460#0: bind() to 0.0.0.0:80 failed (13: Permission denied)

说明你的nginx启动时,不是用的root用户,这是,即使已经切换到root用户 再执行这个命令也是没用的了。 正确的做法是,先把原来的nginx停掉 ,然后再用root用户启动,这样就可以了。

设置一个简单的代理服务

nginx经常被用来作为一个代理服务,代理服务的意思是,收到请求,然后转到一个被代理的服务上面,然后从被代理服务上获得响应,再返回给客户端。

首先再增加一个server块到配置文件中

server {
    listen 8080;
    root /data/up1;

    location / {
    }
}

这是一个简单的服务,监听8080端口,之前的配置中没有指定监听端口,那就会使用默认的80端口。把所有的请求都映射到 /data/up1 目录上。在本地创建这个目录,然后放一个index.html到里面。注意,root指令是在server上下文中的。

接下来,修改前一部分的server配置,把它作为一个代理服务的配置。在第一个location块中, 增加一个 proxy_pass 指令。参数是 protocal,name,port。 在我们的例子中是
http://localhost:8080

如下:

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

    location /images/ {
        root /data;
    }
}

还要修改第二个location块,当前是映射以 /images/ 开头的 到 /data/images 目录。要改成匹配特定的文件扩展名。如下:

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

参数是一个正则表达式,匹配所有以.gif, .jpg, .png结尾的URI。正则表达式应该以 ~ 开始。关联的请求会映射到 /data/images 目录下。

当nginx选择一个location块去处理请求时,首先检查指定的前缀。记住,最长前缀的location匹配原则。然后检查正则表达式。 如果有一个正则表达式匹配成功,nginx会选择这个,否则,选择之前的一个。

现在代理服务器server的配置如下:

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

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

这个服务会把 .gif, .jpg, or .png 结尾的映射到 /data/images目录,其他的代理到 8080 的服务上。

现在重启nginx来让 配置文件生效吧。

nginx -s reload

现在访问 http://localhost 会发现 去到了和 http://localhost:8080/ 一样的地方。

来自我的博客:
nginx新手指南

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值