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

#5:Nginx核心使用技术

在CentOS7环境下高效部署和深度定制Nginx服务从未如此简单!本指南将带您从零开始完成Nginx的基础安装与系统服务集成,更通过Docker快速搭建多节点负载均衡集群实战环境。您将掌握如何利用环境变量和自动化脚本提升运维效率,学习基于请求头的智能版本路由配置技巧,并深入理解防盗链机制的工作原理——配套清晰的操作流程图和即用型配置模板,让您轻松应对生产环境中的各类流量管理需求。无论是初次接触Nginx的新手还是需要优化现有架构的开发者,都能在这套覆盖基础到高阶的全套解决方案中找到关键突破点。

一、入门

1.基本安装

服务器为CentOS7,如有变化还需自行替换依赖安装命令

yum install -y gcc

yum install -y pcre pcre-devel

yum install -y zlib zlib-devel

wget https://nginx.org/download/nginx-1.26.1.tar.gz

tar -zxvf nginx-1.26.1.tar.gz

cd nginx-1.26.1

./configure --prefix=/usr/local/nginx

make && sudo make install

确认是否安装成功

ps -ef | grep nginx

2.注册到系统配置

cd /etc/systemd/system

vim nginx.service

[Unit]
Description=nginx - web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecQuit=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target

systemctl daemon-reload

3.基本使用

新建一个html文件

cp /usr/local/nginx/html/index.html /usr/local/nginx/html/hello.html \
&& sed -i 's/Welcome to nginx!/Hello World!/g' /usr/local/nginx/html/hello.html

修改conf目录下的配置文件

如果出现端口占用:

netstat -tulnp | grep :80

kill -9 /PID

此时访问88端口就是新的页面

二、负载均衡

1.集群准备

有条件可以使用多台主机去实现,这里我给出通过docker去模拟的情况

docker run --rm --name tmp-nginx nginx:1.26.1

docker cp tmp-nginx:/etc/nginx/. /usr/local/nginx_cluster/nginx1/

docker-compose.yml内容:

version: '3.8'services:nginx1:image: nginx:1.26.1container_name: nginx1ports:- "8081:80"  # 宿主机8081端口映射到容器80端口volumes:- /usr/local/nginx_cluster/nginx1:/etc/nginx  # 挂载整个Nginx配置目录- /usr/local/nginx_cluster/nginx1/logs:/var/log/nginx  # 挂载日志目录- /usr/local/nginx_cluster/nginx1/html:/usr/share/nginx/htmlrestart: unless-stoppednetworks:- nginx-networknginx2:image: nginx:1.26.1container_name: nginx2ports:- "8082:80"  # 宿主机8082端口映射到容器80端口volumes:- /usr/local/nginx_cluster/nginx2:/etc/nginx- /usr/local/nginx_cluster/nginx2/logs:/var/log/nginx- /usr/local/nginx_cluster/nginx2/html:/usr/share/nginx/htmlrestart: unless-stoppednetworks:- nginx-networknginx3:image: nginx:1.26.1container_name: nginx3ports:- "8083:80"  # 宿主机8083端口映射到容器80端口volumes:- /usr/local/nginx_cluster/nginx3:/etc/nginx- /usr/local/nginx_cluster/nginx3/logs:/var/log/nginx- /usr/local/nginx_cluster/nginx3/html:/usr/share/nginx/htmlrestart: unless-stoppednetworks:- nginx-networknetworks:nginx-network:driver: bridge

分别给每个nginx配置不同的页面

echo "<h1>Welcome to Nginx1 on port 8081</h1>" > /usr/local/nginx_cluster/nginx1/html/index.html

2.配置设置

修改完conf文件后,要检查文件是否正确

/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf

或者

cd /usr/local/nginx/sbin

./nginx -t

重启nginx

systemctl restart nginx

三、自定义命令(扩展)

很多时候需要先找到conf文件目录或者输入systemctl等繁杂的重复操作去更新nginx,所以可以指定环境变量或给命令起个别名

1.环境变量

cd /etc/profile.d

vim nginx.sh

export NGINX_HOME=/usr/local/nginx

export PATH=$PATH:$NGINX_HOME/sbin

chmod +x /etc/profile.d/nginx.sh

source /etc/profile

echo $PATH | grep nginx

2.别名定义

alias ns="/usr/local/nginx/sbin/nginx -t"

查看所有别名

alias

3.脚本定义

vim /usr/local/bin/n

 在脚本文件里面填入命令

chmod +x /usr/local/bin/n

以后就可以在任意目录输入一个n即可执行更新nginx,大大提高开发效率

四、版本路由

通过定义路由映射,实现依据自定义的标识将请求路由到对应的服务,这里小编通过请求头的version来实现,读者可以自行实现

1.定义映射

2.路由转发

3.location的匹配优先级

4.防盗链

基本语法:

valid_referers none | blocked | server_names | string ...;

工作流程图解:

    A[浏览器发起资源请求<br>GET /images/photo.jpg] --> B{Nginx服务器接收请求};
B --> C{检查请求头中是否存在Referer};
C -- 否 (Referer missing) --> D{valid_referers是否包含`none`?};
D -- 是 --> G[设置 $invalid_referer = ""];
D -- 否 --> H[设置 $invalid_referer = 1];
C -- 是 (Referer exists) --> E{Referer的值是否以 http:// 或 https:// 开头?};
E -- 否 --> F{valid_referers是否包含`blocked`?};
F -- 是 --> G;
F -- 否 --> H;
E -- 是 --> I{Referer的值是否在<br>valid_referers白名单中?};
I -- 是 --> G;
I -- 否 --> H;
G --> J{执行 if ($invalid_referer) 判断};
J -- $invalid_referer为空 --> K[正常返回资源<br>photo.jpg (HTTP 200)];
H --> J;
J -- $invalid_referer为1 --> L[执行if块内的操作<br>如返回403或警告图片];

http://www.dtcms.com/a/358739.html

相关文章:

  • Java 学习笔记(基础篇12)
  • 小狼毫输入法中让数字键盘上的数字键不再选择候选词而是与原始输入一起直接上屏
  • 计算机视觉与深度学习 | 基于深度学习的图像特征提取与匹配算法综述及MATLAB实现
  • 互联网大厂大模型应用开发岗位面试:技术点详解与业务场景演练
  • nacos3端口漂移问题
  • shell编程-核心变量知识
  • LeetCode - 234. 回文链表
  • 2025年高性能计算年会
  • Golang 面试题「高级」
  • 零碳智慧园区双碳方案
  • 代理IP网站哪家好?全球优质IP代理服务商有什么推荐?
  • 【Linux】网络安全管理:Netfilter、nftables 与 Firewalld | Redhat
  • Linux查看Java进程PID、端口号和内存占用脚本
  • 2023年山东省信息学小学组(CSP-X)第一轮题解
  • 【嵌入式原理系列-第六篇】从Flash到RAM:MCU ld脚本全解析
  • SUMO 与 孪易 IOC 协同:开启交通数字孪生新纪元
  • 哪些人需要考道路运输安全员证?政策要求与适用范围
  • 计算机网络面试集合
  • 通过jar -jar启动jar包的yml配置logback 指定log目录
  • 2025-08-18面试题关于公司
  • 【计算机视觉】Pixel逐像素分类Mask掩码分类理解摘要
  • Git 远程仓库操作:推送到远程仓库、拉取远程仓库到本地仓库
  • C语言 - 输出参数详解:从简单示例到 alloc_chrdev_region
  • AV1编码资源可用性模式
  • DC-HRNet
  • SQL学习记录
  • 键查跑分、比配置的手机性能排行
  • ThingsBoard使用Vue3实现
  • nacos 2.5.1 心跳源码解析
  • MCP进阶指南:如何挑选最适合你的AI助手“装备“