1、Nginx是一个高性能的Web服务器,能处理静态和动态请求
2、是一个反向代理服务器,将动态请求转发给后端应用服务器
3、支持负载均衡,能转发分流,处理高并发。
安装
环境配置
关闭防火墙 禁止开机自启动
systemctl stop firewall
systemctl disable firewalld
查看防火墙状态, 看到 Active: inactive (dead),防火墙已关闭
查看selinux
getenforce
临时关闭selinux
setenforce 0
切换为宽松模式,重启后失效
直接修改配置文件,vim /etc/selinux/config
修改 SELINUX=disabled
重启 reboot
使用EPEL安装
安装epel的源仓库
这里失败了,因为CentOS已经停止维护了,
先检测网络连通和DNS
测试能否访问外网(能ping通则网络正常) ping -c 3 www.baidu.com
测试DNS解析(返回IP则DNS正常) nslookup mirrors.aliyun.com
备份原有 yum 源配置(避免修改出错)
创建备份目录 mkdir -p /etc/yum.repos.d/bak
备份所有.repo文件 mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/
下载阿里云 CentOS 7 yum 源和 EPEL 源配置
wget -O /etc/yum.repos.d/CentOS-Base.repo mirrors.aliyun.com/repo/Centos…
下载nginx
yum install -y nginx
检验nginx版本
启动nginx服务并开机自启
查看nginx状态
访问默认页面
nginx配置文件
查看配置文件
user nginx; 使用者是nginx
worker_processes auto;
启动多少个工作进程,这里得auto,是根据cpu核心数自动设置
error_log /var/log/nginx/error.log;
错误日志存放位置
pid /run/nginx.pid;
进程文件保存位置,记录主进程id,便于进程管理
include /usr/share/nginx/modules/*.conf; 启动时加载得模块配置的文件
events { worker_connections 1024; }
一个工作进程最多可以处理的链接数
http的相关设置
log_format main 'remote_user [request" ' 'body_bytes_sent "http_referer" ' '"http_user_agent" "$http_x_forwarded_for"';
log_format 定义日志格式,
$remote_addr 客户端的IP地址
$remote_user 客户端通过http认证的用户名(未认证为空)
[$time_local] 服务器本地的访问时间
"$request" 客户端的完整请求行
$status 服务器返回客户端的HTTP状态码
$body_bytes_sent 服务器发给客户端的响应体字节数
"$http_referer" 记录请求是从哪个页面跳转的(来源页面)
"$http_user_agent" 客户端的用户代理信息
"$http_x_forwarded_for" 记录真实的客户端IP,Nginx作为反向代理时
启用访问日志,用刚刚的main格式记录
传输性能相关
sendfile on (磁盘直接映射网络套接字)
开启sendfile() 系统调用,由内核直接将文件数据从磁盘映射到网络套接字(零拷贝),大幅减少 CPU 开销和内存拷贝,提升静态文件(如图片、JS、CSS)的传输速度。
磁盘——>网络套接字
传统方式:Nginx 先从磁盘读取文件到用户态内存,再从用户态内存写入到网络套接字(两次拷贝、两次上下文切换)。
磁盘——>用户态内存——>网络套接字
tcp_nopush on(小数据包攒成大数据包)
仅在 sendfile on 时生效,启用 TCP_CORK 选项(Linux 内核)。
将多个小数据报攒成大数据包发送,减少 TCP 握手次数和网络小包的传输开销(减少 MSS 分段),特别适合大文件传输(如视频、压缩包)(配合sendfile使用,单开无意义)。
tcp_nodelay on(立即发小数据包)
启用 TCP_NODELAY 选项,禁用 Nagle 算法。
Nagle 算法默认会「攒小包」以减少网络传输次数,但会导致小数据请求(如动态接口、短连接)的延迟增加,开启 tcp_nodelay 后,小数据包会立即发送,降低实时性请求的延迟(如 API 接口、WebSocket 通信)。
keepalive_timeout 65
设置 HTTP 长连接(Keep-Alive)的超时时间,单位为秒。65 表示:如果客户端 65 秒内没有新的请求,Nginx 主动关闭这个长连接。取值范围 10~120 秒,太短则连接复用率低,太长则占用过多服务器套接字资源。
types_hash_max_size 4096(用于快速查找文件类型)
设置 Nginx 解析 MIME 类型的哈希表最大尺寸。Nginx 会把 mime.types 文件中的「文件扩展名→MIME 类型」映射存储在哈希表中,types_hash_max_size 控制这个哈希表的桶数量。
关于文件类型配置的文件,让Nginx知道.JPG .html是哪一内容的类型
默认的文件类型配置文件,在上述mime.types无法找到是会启用默认配置
加载虚拟主机的配置
默认虚拟主机的配置
listen 80; 监听服务器的ipv4 80端口
listen [::]:80; 监听服务器的ipv6 80端口
server_name _;
这是 Nginx 中表示「默认服务器」的特殊值当客户端请求的域名没有匹配到 Nginx 中其他 server 块的 server_name(比如直接访问服务器 IP、或访问未配置的域名)时,该 server 块会处理这个请求;
root /usr/share/nginx/html;
定义该服务器块的网站根目录,Nginx 会从这个目录读取静态文件
加载默认配置的附加配置
include /etc/nginx/default.d/*.conf;
404返回页面
服务器错误返回的页面
下面注释掉的是https虚拟主机的一个模板
nginx命令
nginx
启动nginx
`nginx -s stop
systemctl stop nginx `
强制停止
nginx -s quit
等待完成当下任务后停止
nginx -s reload
重新加载配置
nginx -t
检查配置是否有语法错误
systemctl start nginx
启动
systemctl restart nginx
重启
systemctl status nginx
查看状态