NGINX 学习笔记(一)

1. 背景

最近开始计划了服务端的学习,首先看到最多的是Nginx,所以就对它开刀了,写下博客就是为了做笔记,记录一下学习历程,巩固知识点。

2. 安装

手上只有苹果电脑,所以就在这上边折腾吧。

兴致勃勃,打开终端,输入命令brew install nginx,蹦出来一堆错误,各种“permisson denied”,查看一下系统版本macOS 10.15,又是新版本惹的祸,上网查了一下,敲下命令,搞定:

sudo chown -R $(whoami) $(brew --prefix)/*

再次安装

brew install nginx

显示安装成功

==> nginx
Docroot is: /usr/local/var/www

The default port has been set in /usr/local/etc/nginx/nginx.conf to 8080 so that
nginx can run without sudo.

nginx will load all files in /usr/local/etc/nginx/servers/.

To have launchd start nginx now and restart at login:
  brew services start nginx
Or, if you don't want/need a background service you can just run:
  nginx

OK,启动看看效果吧,敲入nginx,又来错误了:

nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
nginx: [emerg] still could not bind()

端口号8080已经被占用了,好吧,改配置文件,换另一个端口号再看

vim /usr/local/etc/nginx/nginx.conf

找到端口号配置

server {
        listen       8080;
        server_name  localhost;

把8080改为8081,再次启动nginx,没有报错了,在显示器输入网址localhost:8081,“Welcome to nginx!”。

第一步安装总算是搞定了!

3. 常用命令

先来看看nginx进程吧

ps axw -o pid,ppid,user,%cpu,vsz,wchan,command | egrep '(nginx|PID)'

显示如下:

 PID  PPID USER        %CPU      VSZ WCHAN  COMMAND
 6495     1 xxx         0.0  4291076 -      nginx: master process nginx
 6514  6495 xxx         0.0  4291532 -      nginx: worker process
 6517  3560 xxx         0.0  4268280 -      egrep (nginx|PID)

nginx显示有两个进程,master process和worker process;master process是用来读取和校验配置文件,并且维护worker process的,worker process是nginx具体工作的进程,看到配置文件里可以配置worker_processes的数量,尝试一下改为2,就会出现两个worker process,worker process设置多少合适呢?大概知道可以根据CPU内核数量来设置,详细如何后续研究配置项时再深入。

控制nginx进程可以通过发送信号量来实现,大概的格式如下:

nginx -s 

总共有下面几种信号:

信号 说明
quit 释放资源后停止
reload 重新加载配置文件
reopen 重新打开日志文件
stop 立即停止

 

 

 

 

 

 

还有另外一种发送信号量的方式:

kill - 

这种的信号量一共有下面几种:

信号 说明
TERM,INT 立即停止(同stop)
HUP 重新加载配置文件(同reload)
USR1 重新打开日志文件(同reopen)
USR2 更新可执行文件
QUIT 释放资源后停止(同quit)
WINCH 释放资源后停止worker process

 


 

 

 

 

 

 

着重说明一下下面两个信号量的处理流程

  • 更新配置文件:master process收到HUP信号后,首先校验配置文件合法性,重新打开log文件并且开启新的socket链接,若果这一过程失败了,就延用旧的配置继续工作;如果成功了,开启新的worker process,发送停止请求给旧的worker process,旧的worker process停止监听,等到把当前任务执行完毕,关闭掉自己。
  • 更新可执行文件:master process收到USR2信号后,会重命名自己相关的文件名,添加后缀.oldbin;然后启动新的master process,新的master process使用新的配置文件启动worker process;旧的master process收到WINCH信号后,会停止旧的worker process,此时,旧的master process仍然会处于监听状态,当新的master process不可用时,master process会继续工作;旧的worker process停止后,旧的master process收到QUIT信号,会释放资源停止,此时更新完毕。

你可能感兴趣的:(NGINX 学习笔记(一))