一、nginx的简介
Nginx 是一款高性能的 HTTP 服务器、反向代理服务器和负载均衡器,核心优势是轻量、高并发、低资源消耗,广泛用于网站部署、接口代理等场景。
二、特点
性能:高并发、低资源消耗,异步非阻塞架构支撑数万级连接。
功能:集 HTTP 服务、反向代理、负载均衡于一体,模块化设计可灵活扩展。
稳定:master-worker 进程模型保障服务高可用,经长期生产验证。
配置:语法简洁,支持热加载,复杂功能可通过简单配置实现。
兼容:跨 Linux、Windows、macOS 等多系统部署。
三、nginx架构
注意:默认情况下,nginx会建立和服务器CPU核心数相等的worker进程,woker进程之间相互独立,若一个进程故障不会影响其它进程。
四、nginx关键工作机制
-
抢占机制:当客户端发起请求时,会激活a***ept_mutex互斥锁,哪个worker抢占了该互斥锁,该客户端的请求就由那个worker响应和处理
-
异步非阻塞模式:在传统事件处理模式下,如果所有的worker被客户端阻塞后,新来的客户就需要等待,直到原来的客户端释放worker后才能被处理请求,在异步非阻塞模式下,底层使用了linux的epoll模型,就算worker被阻塞,新的客户端请求也会被正常处理
五、nginx正向代理功能
正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。就像要访问google用vpn代理翻墙去访问(用户知道要访问真正的服务器)。
六、nginx反向代理功能
反向代理正好相反,它也是在客户端和服务器端的一个代理服务器,但是这个代理服务器的目的是用来保护服务器端的,当外网客户端来访问我们的服务器时为了避免暴露应用服务器的实际ip地址,我们会让客端访问代理服务器,然后代理服务器再根据客户端的请求去实际的应用服务器获取响应内容并返回客户端。
七、nginx负载均衡功能
八、部署Nginx
[root@server ~]# setenforce 0
[root@server ~]# systemctl stop firewalld
[root@server ~]# systemctl disable firewalld
[root@server ~]# yum install nginx -y
[root@server ~]# nginx -V # 查看版本,编译器、配置参数等信息
[root@server ~]# systemctl start nginx # 启动httpd
[root@server ~]# systemctl enable nginx # 设置开机启动
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.
[root@server ~]# systemctl status nginx # 查看状态,q键退出查看
[root@server ~]# ps -ef | grep nginx # 查看进程
root 1690 1 0 13:57 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx 1691 1690 0 13:57 ? 00:00:00 nginx: worker process
nginx 1692 1690 0 13:57 ? 00:00:00 nginx: worker process
root 1726 1510 0 14:00 pts/0 00:00:00 grep --color=auto nginx
# 测试,Windows中打开浏览器输入服务器IP地址
九、常用命令
(1)systemctl系列
systemctl start nginx # 启动服务
system***tl restart nginx # 重启服务
systemctl enable nginx # 开机启动
systemctl stop nginx # 停止服务
systemctl disable nginx # 取消开机启动
systemctl status nginx # 查看状态
(2)nginx自带命令
nginx # 启动nginx
nginx restart # 重启服务
nginx -s reload # 重新加载配置文件
nginx -s stop # 强行停止服务
nginx -s quit # 优雅停止服务,即所有请求处理完后退出服务
nginx -v # 查看版本号
nginx -t # 检查配置文件的语法错误,无错返回ok
十、nginx配置文件
/etc/nginx/nginx.conf 主配置文件
/etc/nginx/conf.d/ 子配置目录
/etc/nginx/fastcgi.conf
/etc/nginx/fastcgi_params
/etc/nginx/*.default 默认配置
/usr/share/nginx/html 网页默认目录
/var/log/nginx/a***ess.log 访问日志
/var/log/nginx/error.log 错误日志
网页默认目录:/usr/share/nginx/html
访问日志:/var/log/nginx/a***ess.log
错误日志:/var/log/nginx/error.log
十一、主配置文件
[root@server ~]# vim /etc/nginx/nginx.conf
# 1. 全局块:整体运行参数
worker_processes auto; # 核心:工作进程数=CPU核心数
error_log /var/log/nginx/error.log warn; # 错误日志
pid /var/run/nginx.pid; # 进程PID文件
# 2. 事件块:并发连接配置
events {
worker_connections 10240; # 核心:单Worker最大并发连接(高并发必调)
use epoll; # 事件驱动模型(自动适配,可省略)
}
# 3. HTTP块:HTTP/HTTPS核心配置(最关键层级)
http {
include mime.types; # 必配:识别文件MIME类型
default_type application/octet-stream; # 默认文件类型
# 日志配置
log_format main '$remote_addr [$time_local] "$request" $status $body_bytes_sent';
a***ess_log /var/log/nginx/a***ess.log main; # 访问日志
# 性能优化核心指令
sendfile on; # 静态资源零拷贝(必开)
keepalive_timeout 65; # 长连接超时
gzip on; # Gzip压缩(必开)
# 4. 负载均衡集群(可选,需反向代理时配置)
upstream backend {
server 192.168.1.10:8080 weight=5; # 后端节点+权重
server 192.168.1.11:8080 backup; # 备用节点
ip_hash; # 会话保持(可选)
}
# 5. 虚拟主机(Server块,可多个)
server {
listen 80; # 监听端口
server_name example.***; # 绑定域名
# 路径规则(Location块)
location / {
root /usr/share/nginx/html; # 静态资源根目录
index index.html; # 默认首页
}
# 反向代理示例(可选)
location /api {
proxy_pass http://backend; # 转发到负载均衡集群
proxy_set_header Host $host; # 透传Host
proxy_set_header X-Real-IP $remote_addr; # 透传真实IP
}
}
# HTTPS虚拟主机(可选)
server {
listen 443 ssl;
server_name example.***;
ssl_certificate /etc/nginx/certs/fullchain.pem; # 公钥
ssl_certificate_key /etc/nginx/certs/privkey.pem; # 私钥
ssl_protocols TLSv1.2 TLSv1.3; # 安全TLS版本
location / {
proxy_pass http://backend;
}
}
}
十二、重要实验
第一步:安装nginx
# 恢复快照
[root@server ~]# setenforce 0
[root@server ~]# systemctl stop firewalld
[root@server ~]# systemctl disable firewalld
[root@server ~]# yum install nginx -y
[root@server ~]# systemctl start nginx # 启动httpd
[root@server ~]# systemctl enable nginx # 设置开机启动
第二步:配置文件
[root@server ~]# vim /etc/nginx/nginx.conf
server {
listen 80;
listen [::]:80;
root /vat/log; # 选择一个开放的目录用于查看并下载
autoindex on; # 开启目录访问列表
第三步:重启服务测试
[root@server ~]# systemctl restart nginx
十三、使用nginx的http_ssl模块建立加密认证网站
重要实验
-
组建多个子目录网站www.openlab.***,该网站有2个子目录www.openlab.***/file和www.openlab.***/ftp,要求:
-
file数据使用http读取
-
ftp数据使用https读取
-
-
第一步:准备工作
-
# 恢复快照 [root@server ~]# setenforce 0 [root@server ~]# systemctl stop firewalld [root@server ~]# systemctl disable firewalld [root@server ~]# yum install nginx -y [root@server ~]# systemctl start nginx # 启动nginx [root@server ~]# systemctl enable nginx # 设置开机启动第二步:新建网页目录并建立网页
[root@server ~]# mkdir -p /www/file
[root@server ~]# mkdir -p /www/ftp
[root@server ~]# echo "file" > /www/file/index.html # 写入网站数据
[root@server ~]# echo "ftp" > /www/ftp/index.html
[root@localhost ~]# tree /www/
/www/
├── file
│ └── index.html
├── ftp
│ └── index.html
└── zy
└── index.html
[root@server ~]# vim /etc/hosts # 添加如下内容
192.168. www.openlab.*** #补充自己的ip
记得在本地的C:\Windows\System32\drivers\etc\hosts中则增加文件配置
192.168. www.openlab.***
第四步:建立file网站
自己补充完自己的省份,城市,邮箱等,这几个可以随意写,但是***mon Name (eg, your name or your server's hostname) []:www.openlab.*** 这个要写网站名
[root@server ~]# vim /etc/nginx/nginx.conf
server {
listen 80; #监听端口
server_name www.openlab.***;
location /file {
alias /www/file/;
index index.html index.htm;
}
}
第五步:建立https的ftp网站
[root@localhost ~]# mkdir /etc/nginx/certs
[root@localhost ~]# cd /etc/nginx/certs/
[root@localhost certs]# openssl req -x509 -newkey rsa:2048 -keyout ftp.key -nodes -days 365 -out ftp.crt
Country Name (2 letter code) [XX]:86
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, ***pany) [Default ***pany Ltd]:cloud
Organizational Unit Name (eg, section) []:rhce
***mon Name (eg, your name or your server's hostname) []:www.openlab.***
Email Address []:
[root@server ~]# vim /etc/nginx/nginx.conf # 编辑配置文件
server {
listen 443 ssl http2;
server_name www.openlab.***;
location /ftp {
alias /www/ftp;
index index.html index.htm;
}
ssl_certificate "/etc/nginx/certs/ftp.crt";
ssl_certificate_key "/etc/nginx/certs/ftp.key";
}
第六步:重启服务
[root@server ~]# systemctl restart nginx
第七步:测试
# 输入http://www.openlab.***/file
# 输入https://www.openlab.***/ftp,点击高级->接受风险并继续
结果就如上图
nginx -V 2>&1 | grep ssl
| 部分 | 作用 |
|---|---|
nginx -V |
查看 Nginx 的编译参数(大写 V,小写 v 仅显示版本号) |
2>&1 |
将标准错误输出(stderr,文件描述符 2)重定向到标准输出(stdout,文件描述符 1) |
grep ssl |
过滤输出中包含 ssl 关键字的内容(筛选 SSL 相关编译参数) |
十四、使用LNMP搭建私有云存储
需要注意的点:把 /etc/nginx/nginx.conf 这几行都注释掉,是为了查看浏览器报错信息,不然根本不会显示
# error_page 404 /404.html;
#location = /404.html {
#}
#error_page 500 502 503 504 /50x.html;
#location = /50x.html {
#}
如果使用rhce 9版本可以使用nextcloud 29版本