开篇
一直精力都放在开发上面,对于运维方面没有很好的总结过,趁还有一点动力,把nginx的一些基本内容巩固复习一下。每一篇尽可能有一个主题,并且内容消化控制在5分钟。
另外一点很重要的是,博客的所有内容都是我亲自操作的结果,也会夹杂我的亲身的感悟和体会,尽可能是所有的操作可以按照步骤还原。
概要
本篇对nginx的安装进行最基本的概述。因为用的是yum安装,所以so easy,都不太想写下去了。。。不过为了完整记录过程,以及写一些我的体会,还是老老实实记录一下。
我所使用的操作系统说明
我用的操作系统是aws的ec2的Amazon Linux AMI (HVM)进行的操作,所以如果不是这个操作系统的话,可能安装nginx上有些许不一样。
我的操作步骤之安装
[ec2-user]$ sudo su # 使用root用户进行安装
[root] yum install nginx # 一路yes下去就安装完成了
我的操作步骤之确认是否安装成功
[root] nginx -v
nginx version: nginx/1.10.3
[root] service nginx status
nginx is stopped
默认的配置文件在哪里
默认的nginx配置文件在/etc/nginx/nginx.conf, 关于配置文件的学习体会放在下一篇
尝试启动nginx
[root] service nginx start
Starting nginx: [ OK ]
[root] service nginx status
nginx (pid 16111) is running...
[root] netstat -ntpl
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 16111/nginx
尝试用浏览器访问
看到这个页面说明nginx已经在干活了。
如果服务器有公网ip或者解析好的域名的话,也可以通过ip或者域名来进行访问。如http://XX.XX.XX.XX或者http://www.mysite.com
至于为什么我们能看见这个页面,等下一篇说到nginx的配置文件的时候再解释。先透露一下这个页面其实是服务器的/usr/share/nginx/html/index.html文件。所以/usr/share/nginx/html/这个目录下不要随便放隐私的东西,浏览器都访问的到哦。
重启nginx
安装nginx都是一次性的操作,但是重启nginx今后会经常发生,因为每改动一次nginx的配置文件,我们都需要重启nginx。
有两种方法重新启动nginx
1. service nginx restart
2. nginx -s reload
很少有人会写文章提到两者的区别,可能这个太容易想到了,都不屑一提。
我体会下来,两者的区别如下:
nginx本身其实是master-worker模式的,就是说当你运行启动nginx的命令以后,会启动master进程,而master进行又会根据nginx的配置文件里面指定的user和worker数量来启动n个新的worker子进程。
service nginx restart命令会导致master母进程和worker子进程都变成新的进程,我称之为大重启。但是nginx -s reload只会重启worker子进程,而master母进程并不会重启,我称之为小重启。
一般我们修改nginx的配置文件后,要让配置文件起效的话,运行nginx -s reload就可以了。
见证master和worker进程
你可以用ps命令,或者lsof都可以偷窥到nginx所生产出来的进程
[root]# lsof -nP -i | grep LISTEN| grep 80
nginx 16111 root 6u IPv4 8577034 0t0 TCP *:80 (LISTEN)
nginx 16111 root 7u IPv6 8577035 0t0 TCP *:80 (LISTEN)
nginx 16113 nginx 6u IPv4 8577034 0t0 TCP *:80 (LISTEN)
nginx 16113 nginx 7u IPv6 8577035 0t0 TCP *:80 (LISTEN)
你会看到其实有两个进程号16111和16113。16111进程的user是root,是master进程,16113进程的user是nginx,是worker进程。当worker的数量设置成2的时候(需要修改配置文件并重启nginx),在运行lsof命令,你就会发现如下的图:
[root]# lsof -nP -i | grep LISTEN| grep 80
nginx 16111 root 6u IPv4 8577034 0t0 TCP *:80 (LISTEN)
nginx 16111 root 7u IPv6 8577035 0t0 TCP *:80 (LISTEN)
nginx 16208 nginx 6u IPv4 8577034 0t0 TCP *:80 (LISTEN)
nginx 16208 nginx 7u IPv6 8577035 0t0 TCP *:80 (LISTEN)
nginx 16209 nginx 6u IPv4 8577034 0t0 TCP *:80 (LISTEN)
nginx 16209 nginx 7u IPv6 8577035 0t0 TCP *:80 (LISTEN)
上图也证明了用nginx -s reload,master进程是不会重启的,重启的只有worker子进程。
结语
我个人比较有体会的是了解到了nginx的master-worker模式。从而也更容易理解配置文件里面的user和worker的配置(这个下篇再说)。再之后记录一下nginx+gunicorn+flask架构上的一些东东。