Nginx
- 是一个开源的高性能的Web服务器软件
- 是一个反向代理服务器
- 可以用于负载均衡、HTTP缓存、静态资源服务以及作为反向代理等功能。
- 占用资源少,处理并发能力强,能够支持大量的并发连接。
- 由于其高性能、稳定性和灵活性,Nginx已经成为了很多大型网站和应用的首选服务器。
Nginx的进程
- master进程:用于管理worker进程,加载配置文件
- worker进程:用于处理请求连接
Nginx可以运用的应用场景
- Web网站服务,处理http静态页面请求
- 虚拟主机,实现一个服务器用于做多个网站站点
- 反向代理、负载均衡,可以作为网关代理服务器接收客户端的请求转发给后端节点服务器集群
- web缓存服务器
安装部署 Nginx 服务
(1)关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/sysconfig/selinux
(2)安装nginx环境依赖包
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
(3)准备好nginx目录上传软件压缩包并解压
cd /opt
mkdir nginx
tar xf nginx-1.12.0.tar.gz
(4)创建运行用户
useradd -M -s /sbin/nologin nginx
(5)进入软件包目录进行配置软件模块
cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
(6)编译
make -j 2
(7)安装
make install
(8)将 nginx 的可执行程序文件放入路径环境变量的目录(用于系统识别)
创建软连接,用于路径优化
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
(9)添加 Nginx 系统服务
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
(10)添加权限并重启nginx服务
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service
Nginx如何进行平滑升级?
- 官网下载最新版本的nginx
- 上传到nginx服务器,使用 tar 进行解压
- 使用 .configure 进行配置,按照原有的配置进行配置
- 使用用make编译升级成二进制文件
- 把二进制文件 nginx 替换掉原有的老文件
- 使用 make upgrade 进行升级或用kill -USR2 $(cat /usr/local/nginx/logs/nginx.pid)
Nginx 与 Apache 有何区别?
最核心的区别:
Nginx 采用异步非阻塞机制,多个连接可以对应一个进程
Apache 采用的是同步阻塞+多进程/线程模型,一个连接对应一个进程
- Nginx 抗并发能力更高
- Nginx 更轻量,内存、CPU资源消耗更少
- Nginx 配置简洁,使用场景多,稳定性高
Nginx虚拟主机
Nginx虚拟主机是一种配置多个域名或网站在同一台服务器上的方式。通过使用Nginx的虚拟主机功能,可以将不同的域名指向不同的项目或网站,并且在同一台服务器上实现多个网站的部署。
要配置Nginx虚拟主机,首先需要在Nginx的配置文件中定义多个server块。每个server块对应一个域名或网站。在每个server块中,需要指定域名或网站的监听端口、文件根目录、日志文件等配置信息。
Nginx有三种类型的虚拟主机
(1)基于域名的虚拟主机
server {
server_name XXX; #指定不同的域名
}
(2)基于IP的虚拟主机
server {
listen <IP>:端口; #指定不同的IP
}
(3)基于端口的虚拟主机
server {
listen IP:<端口>; #指定不同的端口
}