当前位置: 首页 > news >正文

第六周. nginx实践

任务一:总结nginx的配置结构和流量访问逻辑过程

Nginx使用简洁而灵活的配置文件来定义服务器的行为。 配置文件通常包括全局配置、HTTP模块配置、Server配置以及Location配置。

1.客户端(client)发起 HTTP/HTTPS 请求到 Nginx。 2.Nginx 的 Worker 进程通过多路复用技术接收请求,根据请求类型和配置,使用相应模块(如 ht_proxy、ht_fastcgi 等)进行处理。 3. 如果请求需要与后端服务器(Backend)交互,Worker 进程通过指定协议(HTTP、FastCGI 等)将请 求转发给后端服务器。 4.后端服务器处理请求后返回响应,Nginx 的 Worker 进程接收响应,若配置了 Proxy Cache,会根据 缓存策略决定是否缓存响应,最后将响应返回给客户端。

任务二:搭建nginx完成二进制安装和多OS下的软件包安装过程

在rokcy和Ubuntu上采用二进制安装时,分别使用命令“yum install nginx"和"apt install nginx"即可,之后使用“sysgtemctl status nginx"查看状态,若不是active,则使用命令"systemctl start nginx"启动即可。若使用源码安装,以rokcy为例,首先准备编译环境,使用命令“yum install gcc make gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl devel systemd-devel zlib-devel yum install libxml2 libxml2-devel libxslt libxslt-devel php-gd gd-devel”,之后创建目录,获取软件并解压“mkdir /softs; cd /softs wget https://nginx.org/download/nginx-1.23.0.tar.gz tar xf nginx-1.23.0.tar.gz”,然后创建运行用户“useradd -r -s /usr/sbin/nologin nginx”,之后定制配置“./configure --prefix=/data/server/nginx --user=nginx --group=nginx --with http_ssl_module --with-http_v2_module --with-http_realip_module --with http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module”在nginx-1.23.0/下,然后依次使用“make"和”make install"编译并安装,之后可以使用“chown -R nginx:nginx /data/server/nginx/”修改用户和用户组,启动nginx的命令为“/data/server/nginx/sbin/nginx”,若想要修改用nginx直接启动,可使用命令“echo "export PATH=/data/server/nginx/sbin:$PATH" >> /etc/bashrc”和“source /etc/bashrc“,可使用”curl http://localhost/“进行浏览器访问,具体结果如下图所示。

之后,使用”mkdir /data/server/nginx/run“创建PID目录,并使用”chown -R nginx:nginx /data/server/nginx/run“更改用户和用户组,最后在/data/server/nginx/conf/nginx.conf中修改pid文件路径为”pid /data/server/nginx/run/nginx.pid;“

最后我们在/usr/lib/systemd/system/nginx.service中创建nginx服务脚本,内容为[Unit] Description=nginx - high performance web server Documentation=http://nginx.org/en/docs/ After=network-online.target remote-fs.target nss-lookup.target Wants=network-online.target [Service] Type=forking PIDFile=/data/server/nginx/run/nginx.pid ExecStart=/data/server/nginx/sbin/nginx -c /data/server/nginx/conf/nginx.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s TERM $MAINPID LimitNOFILE=100000 [Install] WantedBy=multi-user.target。之后使用”systemctl daemon-reload“重载服务脚本,后面我们就可以直接使用”systemctl start nginx"来开启以及'systemctl stop nginx"来启动和关闭nginx服务了,具体结果如下图所示。

任务三:完成nginx https配置,防盗链,重定向相关实践过程

Nginx 中的 Https 功能需要 ngx_http_ssl_module 模块支持,使用 Yum/apt 安装的 Nginx 中己经包含了该模块的功能,如果使用的是自行通过源码编译安装的 Nginx,需要在编译的时候指定相关编译项.

https配置:以Ubuntu10-0-0-13进行测试(ip地址为10.0.0.13,后面同理),首先准备密钥环境,使用命令下载“apt install easy-rsa -y”,之后使用命令“cd /usr/share/easy-rsa/”切换到目录中并使用命令“./easyrsa init-pki”初始化环境,之后使用命令“./easyrsa build-ca nopass”生成CA机构证书,之后“./easyrsa gen-req sswang.magedu.com nopass”生成私钥和证书申请文件,之后使用命令“./easyrsa sign-req server sswang.magedu.com”签发证书,提示输入yes即可,之后使用命令“cat pki/issued/sswang.magedu.com.crt pki/ca.crt > pki/sswang.magedu.com.pem”合并服务器证书,签发机构证书为一个文件,并使用命令给私钥加读权限“chmod +r pki/private/sswang.magedu.com.key”,之后回到nginx的子配置文件中,进行如下配置“server { listen 80 default_server; server_name sswang.magedu.com; root /data/server/nginx/web1; # return 301 https://$host$request_uri; # 301重定向 rewrite ^(.*) https://\$server_name\$1 permanent; #rewrite 重定向,二选一 } server{ listen 443 ssl; server_name sswang.magedu.com; root /data/server/nginx/web1; # 定制ssl的能力 ssl_certificate /usr/share/easy-rsa/pki/sswang.magedu.com.pem; ssl_certificate_key /usr/share/easy-rsa/pki/private/sswang.magedu.com.key; ssl_session_cache shared:sslcache:20m; ssl_session_timeout 10m; }”,最后使用命令“systemctl restart nginx”重启nginx服务。在rocky10-0-0-12主机中,使用命令"curl 10.0.0.13 -I"会提示301跳转,使用“curl https://10.0.0.13 -I”会提示证书不安全,使用“curl https://10.0.0.13 -k”命令则可显示结果。如下图所示。

源码下载和二进制下载下配置文件的区别:二进制安装的nginx,主配置文件默认是/etc/nginx/nginx.conf中,删除默认的nginx站点配置“rm -rf /etc/nginx/sites-enabled/default”后,可在/etc/nginx/conf.d/下直接定制子配置文件。这是由于主配置文件/etc/nginx/nginx.conf已经include了子配置文件夹。而源码下载的nginx中,默认只有主配置文件/data/server/nginx/conf/nginx.conf,我们可以添加子配置文件目录“/data/server/nginx/conf/conf.d"如下图所示。

为了使子配置文件目录“/data/server/nginx/conf/conf.d"下的配置文件生效,我们需要在主配置文件/data/server/nginx/conf/nginx.conf中额外添加”include /data/server/nginx/conf/conf.d/*.conf",具体如下图所示。

重定向:在 Nginx 中,rewrite 指令用于重写 URI,允许 Nginx 修改客户端请求的 URI,基于此,可用该 指令实现 URL 重定向,修改请求参数,改变请求含义,改变 URL 结构等,该指令来自于 ngx_http_rewrite_module 模块。

首先在nginx服务机UBUNTU10-0-0-13(ip地址10.0.0.13,后面同理)执行命令echo "11111" > /data/server/nginx/web1/1.html echo "22222" > /data/server/nginx/web1/2.html echo "33333" > /data/server/nginx/web1/3.html echo "aaaaa" > /data/server/nginx/web1/a.html echo "bbbbb" > /data/server/nginx/web1/b.html echo "ccccc" > /data/server/nginx/web1/c.html来准备工作,所有这些html文件都放在/data/server/nginx/web1/目录下,然后在子配置文件下修改内容,server { listen 80 default_server; root /data/server/nginx/web1; location /1.html { rewrite /1.html /2.html; # 访问1跳转到2 rewrite /2.html /3.html; # 访问2跳转到3 } location /2.html { rewrite /2.html /a.html; # 访问2跳转到a } } eof location /3.html { rewrite /3.html /b.html; # 访问3跳转到b } location /c.html { rewrite /c.html /3.html; # 访问c跳转到3 rewrite /3.html /1.html; # 访问2跳转到a rewrite /1.html /c.html; # 访问1跳转到c },之后使用命令重启服务“sysetmctl restart nginx",之后在rocky10-0-0-12上访问”curl 10.0.0.13/1.html"、”curl 10.0.0.13/2.html"、”curl 10.0.0.13/3.html"、”curl 10.0.0.13/c.html"可得到不同的跳转效果,若添加break和last,则分别表示,停止在server里的跳转以及停止当前location里的跳转,执行其他跳转的location,具体配置如下图所示。

在rocky10-0-0-12上的所有curl结果如下图所示。

任务四:完成nginx虚拟主机配置,包括ip 多端口 多域名相关的配置

ip多端口,还是以UBUNTU10-0-0-13作为nginx服务器,在子配置文件中,我们进行如下配置server { listen 80; root /data/server/nginx/web1; } server { listen 81; root /data/server/nginx/web2; } server { listen 82; root /data/server/nginx/web3; },之后使用“systemctl restart nginx"重启服务,每个目录下的html文件内容如下图所示。

之后我们在rokcy10-0-0-12上进行curl访问,具体的访问信息如下图所示。

下面我们来进行多域名相关的配置,同样在UBUNTU10-0-0-13的子配置文件中,改为下述内容server { listen 80 default_server; server_name www.a.com; root /data/server/nginx/web1; } server { listen 80; server_name www.b.com; root /data/server/nginx/web2; } server { listen 80; server_name www.c.com; root /data/server/nginx/web3; },注意default_server用来访问未知服务,即访问的域名在server_name中都不存在时默认使用该server,之后使用命令'systemctl restart nginx"重启服务,之后在rocky10-0-0-12上分别进行访问,具体演示如下图所示。

任务五:完成nginx反向代理和动静分离相关的演示

nginx反向代理:在ubuntu子配置文件中,修改为server { listen 80 default_server; root /data/server/nginx/web1; location / { proxy_pass http://10.0.0.13:81; # 交给后端的81端口服务 proxy_connect_timeout 2s; # 设置连接超时时间为2s } } server { listen 81 default_server; root /data/server/nginx/web2; },如下图所示。

之后使用"systemctl restart nginx"重启服务,之后在rocky10-0-0-12中使用”curl 10.0.0.13:80"进行访问,注意,在未配置反向代理时,结果为nginx web1,而此时反向代理将10.0.0.13:80的访问转为10.0.0.13:81,因此结果为nginx web2,如下图所示。

http://www.gsyq.cn/news/1490458.html

相关文章:

  • 织带原料多维度评测:远动袜专用尼龙纱线、锦纶DTY、锦纶染色丝、锦纶色纺丝、70D140D锦纶高弹丝、仿锦纶、尼龙彩色高弹丝选择指南 - 优质品牌商家
  • 2026洪泽湖大闸蟹选购评测:大闸蟹礼券/大闸蟹礼品卡/大闸蟹礼盒/大闸蟹自助/大闸蟹蟹卡/湖蟹/红膏大闸蟹/苏州蟹黄面/选择指南 - 优质品牌商家
  • 2026年保定公考品牌排行:石家庄申论教学/石家庄考公培训品牌/石家庄考公机构/邢台公考品牌/邢台考公基地/邢台考公机构/选择指南 - 优质品牌商家
  • 【Redis分布式缓存实战】第19章 多级缓存架构设计实战
  • 用手机App Inventor 2做个蓝牙遥控器,5分钟控制你的Arduino LED灯(HC-42模块实战)
  • 斯坦福评测第一!北大 EvoPhys-World世界模型在摩尔线程GPU完成原生训练
  • 别再到处找破解版了!用这个免费在线工具draw.io,5分钟画出高颜值技术架构图
  • 别再只学攻击了!用Kali Linux的arpspoof工具,手把手教你搭建ARP欺骗防御测试环境
  • 2026年口碑好的南通二手房家装改造公司/南通本地家装设计公司业主好评榜 - 品牌宣传支持者
  • aixingpan.cn API开发文档:api_docs_authentication接口指南
  • 别再死记硬背公式了!用Python+NumPy手把手模拟MIMO信道,直观理解空分复用
  • 告别迷茫:用C++从零手搓一个Echo Server(附完整代码与nc测试)
  • EoM:用哈耶克的市场经济理论开发智能体,效果惊人
  • 都2026年了!想入行网络安全却不知道从哪开始?
  • 在Windows 11上用WSL2搭建OpenHarmony开发环境:从Ubuntu 20.04配置到RK3568编译一条龙
  • COMSOL仿真避坑指南:搞定自然对流,这些边界条件和求解器设置千万别踩雷
  • 从一次信息泄露事件说起:我是如何用Have I Been Pwned和Reg007保护自己账号的
  • STM32F103R6频率计实战工程:Keil编译+Proteus仿真一键运行
  • STM32课程设计避坑指南:从篮球记分器项目看红外遥控与定时器的实战应用
  • Proteus 8.6 仿真超声波测距,我踩过的坑和调试技巧(附完整工程)
  • 从一次“信息泄露自查”说起:手把手教你用Have I Been Pwned和Reg007保护账号安全
  • 别再手动改Excel了!用Python的openpyxl批量处理单元格(合并、删除、移动)
  • 金水区郑大北校区购机实测:这3个黑曼巴定制款,竟能避开学区店80%的坑
  • Hadoop YARN Web UI保姆级解读:从8088页面看懂你的集群在忙啥
  • ZLToolKit线程模块源码拆解:从信号量到工作线程池,一个C++网络库的并发设计实战
  • 从‘玩具’到‘工具’:给你的Vue后台管理系统加一个真正可用的SQL查询面板(含Node.js后端)
  • 杭州外墙维修清洗技术要点与合规服务实操指南:杭州地毯清洗/杭州外墙玻璃清洗/杭州外墙维修清洗/杭州学校保洁/杭州家政保洁/选择指南 - 优质品牌商家
  • 告别千篇一律!用这10个CSS技巧,让你的Element UI表格(el-table)颜值飙升
  • 用COMSOL复现经典:一杯水的自然对流仿真,从模型设置到结果后处理全解析
  • 自动驾驶LiDAR语义分割避坑指南:我在SemanticKITTI数据集上复现SqueezeSegV2时踩过的那些雷