什么是Nginx,它有什么用?
Nginx是一款高性能的HTTP和反向代理服务器,同时也支持IMAP/POP3/SMTP代理,核心优势是高并发、低资源消耗,在生产环境中应用广泛。
它的核心用途的包括:
- HTTP服务:直接作为Web服务器,托管静态资源(HTML、CSS、JS、图片等),处理HTTP请求响应。
- 反向代理:接收客户端请求,转发到后端应用服务器(如Tomcat、Node.js),隐藏后端服务地址,提升安全性。
- 负载均衡:将客户端请求分发到多台后端服务器,避免单台服务器负载过高,提高服务可用性和并发处理能力。
- 动静分离:将静态资源请求由Nginx直接处理,动态请求转发给后端服务器,减少后端服务器压力,提升访问速度。
它的优势很明显:
- 高性能:采用异步非阻塞I/O模型,单台服务器可支持数万并发连接,资源占用极低(内存、CPU消耗少)。
- 高可靠:核心模块稳定,支持热部署(修改配置后无需重启服务即可生效), downtime极少。
- 跨平台:可运行在Linux、Windows、Unix等多种操作系统,兼容主流服务器架构。
- 配置简单:核心配置文件格式清晰,语法简洁,可快速实现基础及进阶功能。
怎么安装Nginx?
CentOS 7系统下两种常用安装方式:
1. yum安装(简单快捷,适合快速部署)
先安装EPEL源(默认CentOS官方源无Nginx),再执行安装命令:
yum install -y epel-release # 安装EPEL扩展源
yum install -y nginx # 安装Nginx
2. 源码安装(可自定义版本、模块,适合个性化需求)
# 安装依赖包
yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
# 下载Nginx源码包(可到官网获取最新版本)
wget http://nginx.org/download/nginx-1.24.0.tar.gz
# 解压并进入目录
tar -zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0
# 配置编译参数(启用SSL模块,指定安装路径)
./configure --prefix=/usr/local/nginx --with-http_ssl_module
# 编译安装
make && make install
Nginx的目录结构是什么?
yum安装的Nginx默认目录集中在系统路径下,核心目录如下:
- /etc/nginx/(核心配置目录) :存放所有配置文件,是Nginx最关键的目录。
- /etc/nginx/nginx.conf(主配置文件) :Nginx全局配置文件,控制服务运行参数,如工作进程数、端口、日志路径等,是配置的核心。
- /etc/nginx/conf.d/(子配置目录) :用于存放虚拟主机配置文件(默认有default.conf),主配置文件通过include指令引入该目录下的.conf文件,便于分模块管理配置。
- /usr/share/nginx/html/(默认网站根目录) :存放静态资源文件,默认首页为index.html,可在配置文件中修改路径。
- /var/log/nginx/(日志目录) :存放访问日志(access.log)和错误日志(error.log),用于排查问题、分析访问情况。
- /usr/sbin/nginx(可执行文件路径) :Nginx启动命令所在路径,用于启动、停止、重启服务。
/etc/nginx/nginx.conf的编写(最简)
# 全局块:基础运行配置
user nginx; # 运行用户
worker_processes 1; # 工作进程数,单核心服务器设1即可,多核心可设为CPU核心数
error_log /var/log/nginx/error.log; # 错误日志(仅保留核心路径,简化级别)
pid /var/run/nginx.pid; # 进程PID文件路径
# events块:并发连接配置(基础必备)
events {
worker_connections 1024; # 单进程最大连接数,满足基础并发需求
}
# http块:核心服务配置,衔接自定义conf
http {
include /etc/nginx/mime.types; # 引入MIME类型,支持静态资源识别
default_type application/octet-stream;
access_log /var/log/nginx/access.log; # 后期上ES使用Filebeat的时候再转成json格式
sendfile on; # 启用高效文件传输,提升静态资源加载速度
keepalive_timeout 65; # 长连接超时时间,优化客户端访问体验
# 加载自定义配置文件(核心指令,关联conf.d目录下的业务配置)
include /etc/nginx/conf.d/*.conf;
}
Nginx核心配置编写(常用场景)
1. 基础HTTP服务配置(托管静态网站)
修改/etc/nginx/conf.d/default.conf,配置如下:
server {
listen 80; # 监听端口(默认HTTP端口)
server_name localhost; # 域名/主机名(可改为实际域名,如www.test.com)
root /usr/share/nginx/html; # 网站根目录
index index.html index.htm; # 默认首页文件
# 访问日志配置(记录客户端访问信息)
access_log /var/log/nginx/access.log main;
# 错误页面配置(当出现对应状态码时,返回指定页面)
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
2. 反向代理配置(转发请求到后端Unicorn)
新增虚拟主机配置文件/etc/nginx/conf.d/python.conf:
server {
listen 80;
server_name py.test.com; # 绑定后端服务的访问域名
# 反向代理规则:将所有请求转发到后端Unicorn服务
location / {
proxy_pass http://127.0.0.1:8000; # 后端服务地址(IP+端口)
proxy_set_header Host $host; # 传递客户端请求的Host头信息
proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;# 传递协议(http/https)
}
}
3. 负载均衡配置(分发请求到多台后端服务器)
在主配置文件/etc/nginx/nginx.conf的http块中添加负载均衡节点,再配置反向代理:(nginx轮询有很多种,这里写相对复杂点的加权轮询,学过操作系统的一看就明白)
http {
# 负载均衡节点配置
upstream backend_servers {
server 192.168.1.101:8080 weight=1; # 权重1,默认轮询策略
server 192.168.1.102:8080 weight=2; # 权重2,接收更多请求
server 192.168.1.103:8080 backup; # 备份服务器,仅当主服务器故障时生效
}
# 反向代理关联负载均衡集群
server {
listen 80;
server_name www.test.com;
location / {
proxy_pass http://backend_servers; # 转发到负载均衡集群
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
Nginx常用命令(服务管理)
# 启动Nginx服务
systemctl start nginx # yum安装方式
# 停止Nginx服务
systemctl stop nginx
# 重启Nginx服务
systemctl restart nginx
# 查看Nginx运行状态
systemctl status nginx
# 验证配置文件语法是否正确
nginx -t
先写这么多,后面有时间再多写点干货🤭。