Centos 7源码安装配置nginx-1.16.1

一、概念

nginx:
nginx是由内核和模块组成,内核其实也是模块;是高性能、高负载均衡、反向代理、icmp、pop3、smtp服务器
Nginx运行原理:
Nginx由Nginx内核和模块组成,其中内核的设计非常微小和简洁。完成的工作也非常简单,仅仅通过查找配置文件将客户端的请求映射到一个location block,而location是Nginx配置中的一个指令,用于访问的URL匹配,而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。
Nginx默认以80端口监听,并且启动一个master进程,同时由master进程生成多个工作进程(worker进程)。同一时刻一个HTTP请求被一个工作进程处理,所有worker进程在读事件前争抢accept_mutex,抢到互斥锁的那个进程来接受处理请求,所以同一时候一个HTTP请求被一个工作进程进程。读取请求、解析请求、处理请求,返回数据给客户端,都由这一个工作进程处理
location
location是nginx配置中的一个指令,用于访问的URL匹配,而location中所配置的每个指令将会启动不同的模块去完成
Nginx相对于Apache优点:
1、高并发响应性能非常好,官方nginx处理静态文件并发5W/S
2、高负载均衡及反向代理性能非常强
3、系统内存和CPU占用率低
4、可对后端服务进行健康检查
5、支持PHP cgi方式和FastCGI方式
6、可以作为缓存服务器、邮件代理服务器
7、配置代码简洁且容易上手

模块划分-从结构上
1、核心模块:HTTP模块、EVENT模块和MAIL模块等
2、基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块
3、第三方模块:HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块、Limit_req模块、Upstream check module等

模块划分-从功能上
1、Handlers(处理器模块):此类模块直接处理请求,并进行输出内容和修改headers信息等操作,Handlers处理器模块一般只能有一个
2、Filters(过滤器模块):此类模块主机对其他处理器模块输出的内容进行修改操作,最后由Nginx输出
3、Proxies(代理类模块):此类模块是Nginx的HTTP Upstream之类的模块,这些模块主要与后端一些服务比如FastCGI等进行交互,实现服务代理和负载均衡等功能

location block = 配置文件中location { } 的‘{}’部分

Nginx的高并发原因
Nginx的高并发是因为采用了epoll模型,异步非阻塞,Apache采用的是select模型;
epoll模型的特点:
epoll对于句柄事件的选择不是遍历的,是事件响应的,就是句柄上事件来就马上选择出来,不需要遍历整个句柄链表,因此效率非常高,异步非阻塞。
Select模型特点:
select选择句柄的时候,是遍历所有句柄,也就是说句柄有事件响应时,select需要遍历所有句柄才能获取到哪些句柄有事件通知,因此效率是非常低的。
同步&阻塞:
发出调用后,如调用函数read(),等待结果返回至缓冲区,这段时间,线程一直处于停用状态,并长时间占用消息循环,即阻塞。
异步非阻塞:
发出调用后,如调用函数read(),不等待,留下一个事件,线程去干别的话,等有结果返回至缓冲区之后,会触发这个事件,再由此线程或其他线程去取。

二、环境

[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.7.1908 (Core)
[root@localhost ~]# ifconfig|grep  inet
        inet 192.168.1.111  netmask 255.255.255.0  broadcast 192.168.1.255

三、安装配置

安装环境支持

[root@localhost ~]# yum install pcre-devel pcre gcc gcc-c++ openssl openssl-devel zlib-devel -y

下载

[root@localhost ~]# cd /usr/src/
[root@localhost src]# wget -c https://nginx.org/download/nginx-1.16.1.tar.gz

解压

[root@localhost src]# tar -zxvf nginx-1.16.1.tar.gz
[root@localhost src]# cd nginx-1.16.1

创建用户组

[root@localhost nginx-1.16.1]# useradd -s /sbin/nologin -r www  #-s 指定shell ,–r 系统用户
[root@localhost nginx-1.16.1]# groupadd www

修改消息头文件,隐藏nginx版本信息,提高服务安全性

[root@localhost nginx-1.16.1]# sed -i -e 's/1.16.1//g' -e 's/nginx\//JWS/g' -e 's/"NGINX"/"JWS"/g' src/core/nginx.h

修改前
在这里插入图片描述
修改后
在这里插入图片描述
预编译
1、检测LINUX系统安装该软件所需要的依赖环境,库文件,检测LINUX系统是否存在GCC编译环境(C编译器),
2、指定软件服务部署的路径,自定义软件服务的功能、模块、参数、最终产生Makefile文件
Makefile文件用途:相当于定义了编译过程,告知make编译工具,在编译源代码文件时,从哪个源代码文件开始编译,至哪个源代码文件编译结束。

./configure \
--user=www \
--group=www \
--prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_mp4_module \
--with-http_realip_module \
--with-pcre \
--with-http_gunzip_module \
--with-http_gzip_static_module

编译
主要是通过make编译工具,读取Makefile,调用Linux操作系统GCC编译环境(C编译器),将软件包中的源代码文件编译生成二进制文件。

[root@localhost nginx-1.16.1]# make

安装
主要是将第二步make编译产生的二进制文件,拷贝或者安装至linux操作系统指定的安装目录,如:–prefix=/usr/local/nginx

[root@localhost nginx-1.16.1]# make install

关闭selinux及开放防火墙端口

[root@localhost nginx-1.16.1]# vim /etc/selinux/config
SELINUX=disabled
[root@localhost nginx-1.16.1]# setenforce 0
[root@localhost ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent  #永久开放80端口
success
[root@localhost ~]# firewall-cmd --reload   #更新firewalld
success
[root@localhost ~]# firewall-cmd --zone=public --list-ports       #查看开启了哪些端口
22/tcp 80/tcp

启动

[root@localhost nginx-1.16.1]# /usr/local/nginx/sbin/nginx

优雅退出

[root@localhost nginx-1.16.1]# /usr/local/nginx/sbin/nginx -s quit

浏览器访问
在这里插入图片描述
查看消息头,隐藏了真实版本信息
在这里插入图片描述

四、虚拟主机

基于不同的域名,不同的站点目录,也可都使用一个站点目录,通过多域名来访问

server {
	listen		80;
	server_name	test.a.com;
	location /{
		root	html/test.a.com;
		index	index.html index.htm;
	}	

}

server {
	listen		80;
	server_name	test.b.com;
	location /{
		root	html/test.b.com;
		index	index.html index.htm;
	}	

}

基于端口不同

server {
	listen		81;
	server_name	test.a.com;
	location /{
		root	html/a;
		index	index.html index.htm;
	}	

}

server {
	listen		80;
	server_name	test.a.com;
	location /{
		root	html/test.a.com;
		index	index.html index.htm;
	}	

}

基于不同的IP

server {
	listen		192.168.1.111:81;
	server_name	test.a.com;
	location /{
		root	html/a;
		index	index.html index.htm;
	}	

}

server {
	listen		192.168.1.112:80;
	server_name	test.b.com;
	location /{
		root	html/test.b.com;
		index	index.html index.htm;
	}	

}

也可以同时配置不同端口与域名

server {
	listen		80;
	server_name	test.a.com;
	location /{
		root	html/test.a.com;
		index	index.html index.htm;
	}	

}

server {
	listen		80;
	server_name	test.b.com;
	location /{
		root	html/test.b.com;
		index	index.html index.htm;
	}	

}


server {
	listen		8001;
	server_name	test.8001.com;
	location /{
		root	html/8001;
		index	index.html index.htm;
	}	

}

灵活多用!
-------------end

猜你喜欢

转载自blog.csdn.net/oToyix/article/details/106212135
今日推荐