Nginx简介与安装
1、Nginx简介
Nginx是一个高性能Web服务器,除了Nginx之外还有Apache、Tomcat、Jetty等Web服务器。那么Nginx相对于其它Web服务器有什么优势呢?
a、Tomcat和Jetty面向java语言,先天就是重量级的Web服务器,其性能与Nginx没有可比性;
b、Apache的发展时间很长,而且是目前的世界第一大Web服务器,它有许多优点,如稳定、开源、跨平台等,但是它兴起的时候,互联网的产业规模远远比不上现在。所以Apache被设计成了一个重量级的、不支持高并发的Web服务器。在Apache服务器上,如果有大量的并发请求同时访问就会导致服务器上消耗大量内存,也会消耗大量的CPU资源,并导致HTTP请求的平均响应速度会降低。
2、编译与安装
安装环境准备:
(1)Linux内核2.6及以上版本
在Linux系统下输入uname -a
就可以查看Linux的内核版本。如下图所示我的Linux内核版本是2.6以上的:
Nginx的官网有不同的版本,在此说明一下。
1、Mainline version是开发版本,在生产环境是不介意使用的;
2、Stable version是正式版本,目前来说是最新的一个稳定版本,本次就用CHANGES-1.14最新的这个版本;
3、Legacy versions都是老版本的了。
(2)gcc编译器
GCC可以用来编译C语言程序。Nginx是不会直接提供二进制可执行程序,只能下载源代码进行编译。
(3)PCRE库
PCRE是由Philip Hazel开发的函数库,目前为很多软件使用,该库支持正则表达式。
(4)zlib库
zlib库用于对HTTP包的内容做gzip格式的压缩,如果我们在nginx.conf里配置了gzip on,并指定对于某些类型的HTTP响应使用gzip来进行压缩以减少网络的传输量。
(5)OpenSSL开发库
如果我们的服务器不指要支持Http,还需要在更安全的SSL协议上传输Http,那么就需要拥有OpenSSL了。另外,我们如果想使用MD5、SHA1等散列函数也是需要安装它的。
(6)安装gcc编译器、PCRE库、zlib库、OpenSSL开发库
我们可以通过yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel pcre pcre-devel
这一行命令来安装这几个库。如下图所示:
(7)解压并安装Nginx
a、新建一个tools的文件夹,使用xftp将nginx-1.14.0.tar.gz压缩包上传到tools文件夹。然后使用tar -zxvf nginx-1.14.0.tar.gz
命令将其解压。如下图所示:
b、使用 cd nginx-1.14.0/
进入nginx-1.14.0文件夹,并使用./configure
对安装环境做初始化这个命令会将源代码编译到objs文件夹内(objs内的还是nginx源代码不是可执行文件)。如下图所示:
c、使用make
命令进行构建,这个时候才是真正的将源代码构建成了可执行的二进制程序,如下图所示:
d、最后使用make install
安装,Nginx会默认安装到usr/local文件下。如下图所示:
d、进入nginx的安装目录,可以看到有conf、html、logs、sbin四个文件夹。conf是Nginx的配置文件的目录,html是默认的一个静态站点,logs就是存储Nginx日志的,sbin就是Nginx的可执行文件。如下图所示:
e、使用./sbin/nginx
运行nginx,如下图所示:
从上图宽容与看出Nginx启动完成后有一个master进程一个worker进程,master进程是它的主进程,主要是来做一些热装载或者更新日志之类的。worker才是真正的来执行我们客户端的连接,建立连接后来执行请求用的,当然worker进程是可以设置多个的。
我在此输入的地址是我在Linux系统中使用桥接网络模式并且在/etc/sysconfig/network-scripts/ifcfg-eno16777736文件里配置的ip地址。Linux中使用桥接模式配置网络如下:
#桥接模式网络配置
#1.配置ip地址等信息
#在 /etc/sysconfig/network-scripts/ifcfg-eno16777736文件里做如下配置
TYPE=Ethernet # 网络类型为以太网
BOOTPROTO=static # 手动分配ip
DEVICE=eno16777736 # 网卡设备名,设备名一定要跟文件名一致
ONBOOT=yes # 该网卡是否随网络服务启动
IPADDR=192.168.0.00 # 该网卡ip地址
NETMASK=255.255.255.0 # 子网掩码
GATEWAY=192.168.0.0 # 网关
DNS1=8.8.8.8 # DNS,8.8.8.8为Google提供的免费DNS服务器的IP地址
#2.配置网络工作
#在/etc/sysconfig/network文件里增加如下配置
NETWORKING=yes # 网络是否工作,此处一定不能为no
#3.配置公共DNS服务(可选)
#在/etc/resolv.conf文件里增加如下配置
nameserver 8.8.8.8
#4.关闭防火墙
systemctl stop firewalld # 临时关闭防火墙
systemctl disable firewalld # 禁止开机启动
#5.重启网络服务
service network restart
f、小编刚刚使用的安装方式是最简单的全部都是默认的安装方式。当然也可以配置参数安装,命令如下:./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-debug
,prefix参数指定安装目录为/usr/local/nginx,with参数加入Nginx默认模块的一些其它模块。如图所示:
(8)Nginx控制命令
#默认方式启动(后台方式):
./sbin/nginx
#指定配置文件启动 ,如果没有指定则会默认指定为安装目录下的conf/nginx.conf文件启动
./sbing/nginx -c /tmp/nginx.conf
#指定nginx程序目录启动
./sbin/nginx -p /usr/local/nginx/
#快速停止,此种方式停止不管请求有没有被处理完都会直接把nginx进程杀掉
./sbin/nginx -s stop
#优雅停止,此种方式停止会等待将请求处理完才会将nginx进程杀掉
./sbin/nginx -s quit
#热装载配置文件,可以在不重庆nginx的情况下加再nginx的配置文件
./sbin/nginx -s reload
#重新打开日志文件
./sbin/nginx -s reopen
#检测nginx.conf的配置是否正确
./sbin/nginx -t
./sbin/nginx -s reopen
重新打开日志文件这个命令可能不太理解为什么要重新打开日志文件。使用图片演示一下:
1、进入logs文件夹并使用ll
命令查看文件详情时候可以看到access.log文件大小为2105 0ct如下图所示:
2、在网页上刷新几下Nginx的欢迎页面,再次查看logs文件夹下的access.log文件大小为3273 0ct如下图所示:
3、使用mv access.log access.log.backup
命令将access.log文件重命名为access.log.backup。然后再使用touch access.log
新建access.log文件,新建文件大小为0 0ct。然后刷新Nginx的欢迎页面。我们会发现文件大小改变的不是access.log这个文件了文件大小改变的是access.log.backup,详情如下图所示:
4、使用./sbin/nginx -s reopen
重新打开日志文件,再刷新Nginx页面然后查看logs文件夹内的日志文件。如下图所示:
为什么在第三步操作的时候Nginx是将日志打印到access.log.backup文件呢?这是因为Nginx在和文件打交道的时候,Nginx拿到的只是一个句柄,它是根据句柄来的。可以理解为句柄里面有一个属性叫路径名,当我们的路径名变成一个新的名字的时候,这个时候和句柄是没有关系的,Nginx拿到的还是原来的那个句柄里。这个也和java的引用类似。