一位老司机 发表于 2025-4-19 15:01:14

全网最详细基于Kylin的Nginx服务部署与配置(1/2)

以下所使用的环境为:
虚拟化软件:VMware Workstation 17 Pro
麒麟系统版本:Kylin-Server-V10-SP3-2403-Release-20240426-x86_64
一、Nginx基础

1. 常见Web服务器介绍

1.1 Apache服务器

Apache是目前世界上最流行的Web服务器之一,支持跨平台应用,可以运行在几乎所有的Unix、Windows、Linux系统平台上,尤其对Linux的支持相当完美。
特点
开源免费,源码开放,有很多开发者参与设计和改进。 性能稳定,简单高速,可作代理服务器使用。 支持通过模块扩展功能,支持PHP、Perl、Python等多种脚本语言。 支持SSL/TLS加密和虚拟主机等功能。 社区支持强大。
1.2 IIS服务器

IIS是微软开发的Web服务器软件,主要用于在Windows操作系统上托管网站。
特点
提供图形界面的管理工具,称为Internet服务管理器,可用于监视配置和控制Internet服务。 与其他微软产品(如ASP.NET)集成良好。 支持SSL/TLS加密和虚拟主机等功能。
1.3 Tomcat服务器

Tomcat是一个用于Java应用程序的开源Web服务器,通常与Apache一起使用,是一个开放源代码、运行Servlet和JSP Web应用软件的基于Java的Web应用软件容器。
特点
技术先进,性能稳定,而且免费,深受Java爱好者欢迎。 属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用。 是开发和调试JSP程序的首选
1.4 Lighttpd服务器

Lighttpd是一个开源的Web服务器软件,由德国人领导开发。其根本目的是提供一个专门针对高性能网站、安全、快速、兼容性好并且灵活的Web Server环境。
特点
具有非常低的内存开销和CPU占用率,效能好。 支持FastCGI、CGI、Auth、输出压缩、URL重写、Alias等重要功能。 模块丰富,可以灵活配置和扩展。 源代码开放,有活跃的开发者社区。
1.5 Kangle服务器

Kangle是一款跨平台、功能强大、安全稳定、易操作的高性能Web服务器和反向代理服务器软件。它支持多种动态开发语言,如ASP、NET、Java等。
特点
跨平台支持,可以在Linux、Windows、FreeBSD、OpenBSD等多种操作系统上运行。 实现虚拟主机独立进程、独立身份运行,用户之间安全隔离。 支持多种扩展接口,如ISAPI、FastCGI、CGI等,方便与其他Web服务器或应用程序集成。 具有强大的访问控制功能和智能防CC攻击能力。 内置内存/磁盘两级缓存,提高资源利用率和访问速度
1.6 IBM WebSphere服务器

IBM WebSphere是IBM公司开发的一套基于Java的应用服务器软件。它提供了一个可靠、安全、可扩展的平台,用于构建和运行企业级应用程序。
特点
支持多种编程语言,如Java、Java EE、Node.js等,方便开发人员使用自己熟悉的语言进行开发。 提供集群和负载均衡等功能,可以轻松扩展应用程序的容量和性能。 强大的安全功能,包括身份验证、授权、数据加密等,保护企业应用程序的安全性和机密性。 支持分布式事务处理,确保在分布式环境下的数据一致性和可靠性。 丰富的管理和监控工具,可以对应用程序进行实时监控、故障排查和性能优化。
2. Nginx与Apache的区别

静态文件处理能力:Nginx高于Apache
资源消耗:Nginx优于Apache,以为Nginx是异步非阻塞处理模型,只需要几个进程就能够处理大量在线请求,而Apache仍然是进程模型或线程模型,也就是采用大量线程来处理大量在线请求。
Nginx支持IO多路复用实现进程高并发,高效处理客户端请求 Apache支持的模块很多而且也比较稳定。而Nginx因为出现时间比较晚,比不上Apache Nginx自身就是一个反向代理服务器,支持七层负载均衡 Nginx处理动态页面比不上Apache,一般只用于处理静态页面和反向代理
3. Nginx介绍

Nginx是一个轻量级的web服务器,相比apache来说资源消耗更低。支持高并发的web服务和反向代理服务,支持基于IMAP/POP3/SMTP协议的邮件服务。同时也支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等模块功能。并且支持很多第三方的模块扩展。
Nginx主进程/工作进程
一个主进程master:负载加载和分析配置文件、管理工作进程、平滑升级 多个工作进程worker:处理并响应用户请求
Nginx模块结构
核心模块:HTTP模块、EVENT模块、MAIL模块 基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块 第三方模块:HTTP Upstream Request Hash模块、Notice模块、HTTP Access Key模块
在线生成Nginx配置文件的网站
https://nginx.p2hp.com/config/?global.app.lang=zhCNNginx的主要作用
提供静态页面展示和网页服务 通过虚拟主机技术,提供多个网站、多个域名的网页服务 提供反向代理服务 提供简单资源下载服务(FTP服务) 用户行为分析(日志功能)
4. master主进程原理

master是Nginx的主进程,负责管理Nginx的数据和常见worker工作进程。
在Nginx启动时,检查 nginx.conf 配置文件的语法 根据配置文件创建和监控 worker 进程的数量和状态 监听套接字,接收client 发起的请求,然后由 worker 抢夺链接,成功抢夺的worker处理和响应客户端请求 接收管理员发送的Nginx信号(如关闭nginx),然后将信号传递给worker进程 当管理员发送reload,重新读取配置文件,创建新的worker进程,结束旧worker进程


5. 安装Nginx

5.1 YUM源安装Nginx

: 连接互联网,编辑本地仓库文件
vim /etc/yum.repos.d/nginx.repo

# 在文件中输入以下内容name=nginx download
baseurl=http://nginx.org/packages/centos/8/x86_64/
enabled=1gpgcheck=0: 使用yum安装nginx
yum -yinstall nginx: 查看nginx的安装文件
rpm-ql nginx

5.2 源码编译安装Nginx

: 连接互联网,下载源码包
wget http://nginx.org/download/nginx-1.20.1.tar.gz

: 安装nginx的依赖包
yum install-y pcre-devel zlib-devel openssl-devel                # 默认应该只有openssl-devel没有预装: 解压nginx源码包
tar zxf nginx-1.20.1.tar.gz
cd nginx-1.20.1/: 执行configure,生成Makefile文件,将nginx安装到/opt/nginx目录下,该目录无需提前创建
./configure --prefix=/opt/ngin: 编译安装
make&&makeinstall: 查看nginx的安装目录,可以看到该目录下存在一个sbin目录,里面存放着nginx管理命令
tree /opt/nginx

: 将nginx命令添加到环境变量中,在执行nginx命令时无需添加命令位置
echo"PATH=$PATH:/opt/nginx/sbin">> /etc/profile
source /etc/profile

# 还可以通过export实现echo"export PATH=$PATH:/opt/nginx/sbin">> /etc/profile
source /etc/profile5.3 管理Nginx服务

编译安装的Nginx
命令说明nginx -t验证nginx.conf配置文件语法nginx启动Nginx,如果当前存在一个运行的Nginx,会报错nginx -s quit关闭Nginx服务nginx -s stop停止Nginx服务nginx -s reload重新加载Nginx服务配置文件内容YUM源安装的Nginx
命令说明systemctl start nginx.service启动Nginx服务systemctl stop nginx.service停止Nginx服务systemctl enable nginx.service将Nginx服务添加到开机自启systemctl disable nginx.service将Nginx服务移除开机自启systemctl reload nginx.service重新加载Nginx配置文件内容,不会重启Nginx服务重复运行nginx服务时,会提示错误
nginx
nginx

当管理员发送reload信号时,master进程会重新读取nginx配置文件内容,然后创建新的worker进程,结束旧worker进程
ps-ef|grep nginx
nginx -s reload
ps-ef|grep nginx

编译安装和YUM安装的Nginx在不启动的情况下,相互没有关联。但是如果使用nginx启动nginx服务,然后使用systemd停止nginx,会没有效果。【使用什么工具启动的Nginx,就使用什么工具去关闭】
nginx                 # 启动nginx
systemct status nginx.service
ps-ef|grep nginx

通过添加-V选项可以看到Nginx服务的详细信息以及安装的所有模块
nginx -V

YUM安装Nginx时会在/usr/sbin/中添加1个nginx命令,而编译安装会在安装目录下的/bin目录下有一个nginx命令。当两个命令混用时,有可能会出现nginx.pid找不到的情况。


ps-ef|grep nginx |grep master                # 先查找到nginx的master进程对应的PIDecho12138> /opt/nginx/logs/nginx.pid        # 将该PID写入到nginx.pid文件中即可
nginx -s reload

5.4 Nginx的主配置文件

编译安装的Nginx主配置文件路径
安装目录/conf/nginx.confYUM源安装的Nginx主配置文件路径
/etc/nginx/nginx.confNginx主配置文件结构
**main block字段:**全局配置 **events字段:**事件驱动的相关配置 **http字段:**http/https协议相关的配置 **mail:**邮件协议的相关配置 **stream字段:**一般的TCP代理或负载均衡配置
正常运行必备的配置参数
**user name:**启动Nginx工作进程的用户 **pid xxx/xxx/xxx:**指定存储Nginx主进程的进程号的文件路径 **include xxx:**包含进来的其他配置文件片段 **load_module xxx:**指定要装载的动态模块
配置参数的注意事项
每条参数必须以分号结尾
[*]支持使用配置变量
内建变量:由Nginx模块引入,可以直接使用 自定义变量:由用户set命令定义,例如:set name value; 引用变量:$name

性能优化相关配置参数
work_processes 1:work进程数量默认为1,根据服务器的CPU数量设定,最大不应该超过CPU数量的2倍 **work_cpu_affinity auto:**worker与CPU进行绑定,做Nginx服务器可以使用此配置,由其它重要程序运行,不建议使用 **worker_priority number:**指定woker进程的nice值,设定worker进程的优先级(-20 ~ 20) **worker_rlimit_nofile number:**worker进程所能够打开的文件数量上限


5.5 http字段深入解析



6. 基础Nginx服务搭建

节点设计
主机网络信息说明Kylin-1192.168.110.1/24Web服务器: 事先已经基于源码安装好Nginx,启动Nginx服务
nginx

: 在安装Nginx的时候,默认会有一个测试页,访问该测试页


二、Nginx虚拟主机实验

1. 单个虚拟主机搭建

节点设计
主机网络信息说明Kylin-1192.168.110.1/24Web服务器Kylin-2192.168.110.2/24测试客户端: 新建网站素材目录和相关素材,分别创建索引文件、普通文件、未知文件和图片文件
mkdir-p /virtual/01
echo"Welcome to visit Virtual01!"> /virtual/01/index.html
echo"欢迎访问Virtual01!"> /virtual/01/README.txt
echo"None"> /virtual/01/none
wget-O /virtual/01/pic.jpg https://inews.gtimg.com/om_bt/O0e2a37GGF5CDfNgK8GU29rF_2eJlHLDsa17LABXns7V4AA/641

: 新建虚拟主机子配置文件
vim /opt/nginx/conf/virtual01.conf

# 写入下列内容
server {
   listen 80;# 定义监听端口
   server_name www.meaauf.com;# 定义域名
   charset utf-8;# 设置编码为 utf-8
   location / {
      root /virtual/01/;# 网站素材目录
      index index.html;# 网站索引文件名}}: 编辑Nginx主配置文件
vim /opt/nginx/conf/nginx.conf

# 在http字段内添加下列内容
include       virtual01.conf;

: 重新加载Nginx服务,调整防火墙策略
nginx -s reload
firewall-cmd --add-service=http --permanent
firewall-cmd --reload: 编辑Kylin-2的hosts文件,添加域名解析
vim /etc/hosts

# 追加下列内容192.168.110.1 meaauf.com www.meaauf.com: 访问Kylin-1的网页内容
http://www.meaauf.com

: 访问Kylin-1的图片资源
http://www.meaauf.com/pic.jpg

: 访问Kylin-1的文本资源,因为Kylin-2没有安装中文包所以会显示乱码,此处采用终端访问
http://www.meaauf.com/README.txt

: 访问Kylin-1的未知文件,此时会询问我们是否下载该文件


: 查看Nginx可识别的文件文件,可以通过mime.types文件查看,也可以添加内容以支持用户自定义文件类型


2. 基于IP地址划分虚拟主机

节点设计
主机网络信息说明Kylin-1192.168.110.1/24
192.168.110.11/24Web服务器Kylin-2192.168.110.2/24测试客户端: 为Nginx服务器临时添加一个IP地址,新建资源目录和索引文件
ip address add192.168.110.11/24 dev ens33
mkdir /virtual/02
echo"您正在访问192.168.110.1"> /virtual/01/index.html
echo"您正在访问192.168.110.11"> /virtual/02/index.html: 删除上述实验创建的虚拟主机配置文件,新建虚拟主机配置文件 virtual01.conf
rm-rf /opt/nginx/ virtual01.conf
vim /opt/nginx/conf/virtual01.conf

# 文件内容如下
server {
   listen 80;
   server_name _;
   charset utf-8;
   location / {
      root /virtual/01/;
      index index.html;}}: 新建虚拟主机配置文件 virtual02.conf
vim /opt/nginx/conf/virtual02.conf

# 文件内容如下
server {
   listen 192.168.110.11:80;
   server_name _;
   charset utf-8;
   location / {
      root /virtual/02/;
      index index.html;}}: 编辑主配置文件,在配置文件中引入虚拟主机配置文件
vim /opt/nginx/conf/nginx.conf

# 在http字段中添加下列内容
include       virtual02.conf;

: 检查配置文件语法,重新加载nignx配置
nginx -t
nginx -s reload

: Kylin-2使用不同的IP地址测试访问Nginx


3. 基于端口号划分虚拟主机

节点设计
主机网络信息说明Kylin-1192.168.110.1/24Web服务器Kylin-2192.168.110.2/24测试客户端: 新建虚拟主机配置文件 virtual8182.conf
vim /opt/nginx/conf/virtual8182.conf

# 文件内容如下
server{
   listen 81;
   server_name _;
   charset utf-8;
   location / {
   root /virtual/81/;
   index index.html;}}
server{
   listen 82;
   server_name _;
   charset utf-8;
   location / {
   root /virtual/8/;
   index index.html;}}: 编辑Nginx主配置文件
vim /opt/nginx/conf/nginx.conf

# 往http字段中引入虚拟主机配置文件
include       virtual8182.conf;

: 新建网站素材目录和索引文件
mkdir /virtual/{81,82}echo"访问的是192.168.110.1:81!"> /virtual/81/index.html
echo"访问的是192.168.110.1:82!"> /virtual/82/index.html: 重新加载Nginx,调整防火墙策略
nginx -s reload
firewall-cmd --add-port=81/tcp --permanent
firewall-cmd --add-port=82/tcp --permanent
firewall-cmd --reload: 客户端Kylin-2验证访问不同端口


4. 基于域名划分虚拟主机

节点设计
主机网络信息说明Kylin-1192.168.110.1/24Web服务器Kylin-2192.168.110.2/24测试客户端: 新建虚拟主机配置文件 virtualdomain.conf
vim /opt/nginx/conf/virtualdomain.conf

# 文件内容如下
server{
listen 80;
server_name kylin1.meaauf.com;
charset utf-8;
location / {
    root /virtual/kylin1/;
    index index.html;}}
server{
listen 80;
server_name kylin2.meaauf.com;
charset utf-8;
location / {
    root /virtual/kylin2/;
    index index.html;}}: 编辑Nginx主配置文件
vim /opt/nginx/conf/nginx.conf

# 往http字段中引入虚拟主机配置文件
include       virtualdomain.conf;

: 新建网站素材目录和索引文件
mkdir /virtual/{kylin1,kylin2}]echo"您访问的是kylin1.meaauf.com!"> /virtual/kylin1/index.html
echo"您访问的是kylin2.meaauf.com!"> /virtual/kylin2/index.html: 重新加载Nginx
nginx -s reload: 编辑客户端Kylin-2的hosts文件,添加域名解析
vim /etc/hosts

# 追加文件内容192.168.110.1 meaauf.com www.meaauf.com kylin1.meaauf.com kylin2.meaauf.com

: 客户端Kylin-2验证访问不同域名


三、Nginx日志管理

1. Nginx日志书写格式

查看编译安装的Nginx日志书写格式
vim /opt/nginx/conf/nginx.conf

日志格式解析
log_formatmain'$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';
access_loglogs/access.logmain;

日志参数解析
日志参数说明$remote_addr记录访问网站的客户端IP地址$remote_user当Nginx配置了基本认证,此处才会记录认证的用户名,否则为空$time_local记录访问的时间和时区$request请求的完整行,包含请求方法(POST/GET)、请求的URL和HTTP协议版本$status响应的状态码$body_bytes_sent发送给客户端的字节数$http_referer引用页$http_user_agent用户代理的字符串$http_x_forwarded_fo通过HTTP代理或负载均衡器转发,会包含原始请求客户的IP地址2. Nginx日志监控

节点设计
主机网络信息说明Kylin-1192.168.110.1/24Web服务器Kylin-2192.168.110.2/24测试客户端: 修改Nginx主配置文件,将日志信息相关配置语句取消注释。日志功能是默认开启的,与日志信息配置语句是否注释无关。
vim /opt/nginx/conf/nginx.con

# 将下列行取消注释
    log_formatmain'$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';

    access_loglogs/access.logmain;

: 重新启动nginx服务
nginx -s reload: 先清空nginx原有的日志信息,使用tail监控日志
echo> /opt/nginx/logs/access.log
tail-f /opt/nginx/logs/access.log: 使用Kylin-2访问Nginx


: 查看监控的日志信息,当日志参数值为空,会使用“-”占位。


: 关闭日志功能
vim /opt/nginx/conf/nginx.conf

# 在http字段中添加下列语句
access_log off;

: 检查Nginx配置文件语法,重新加载Nginx服务
nginx -t
nginx -s reload: 清空日志内容,重新使用客户端访问Nginx。可以看到access.log日志文件为空。
在代理服务器、负载均衡服务器上可以不记录日志,减少磁盘I/O。
> /opt/nginx/logs/access.log
ll /opt/nginx/logs/access.log

3. 日志记录的许可范围

通过查看Nginx官网(Module ngx_http_log_module (nginx.org))提供的文档,可以看到
access_log xxx;# 书写范围允许在 http, server, location, if in location, limit_except

log_format name xxx;# 只允许书写在 http字段中

不同的书写位置,具有不同的生效含义
http {
        log_format name xxx;
        access_log xxxx;# 全局生效
       
        server {
                access_log xxx;# 仅对当前虚拟主机生效}}4. 针对虚拟主机自定义日志

因为Nginx不允许 log_format 被放置在除http以外的块中,我们可以通过include的特性实现对虚拟主机的日志的自定义。
: 先删除原有的所有虚拟主机配置文件与相关配置
rm-rf /opt/nginx/conf/virtual*
rm-rf /virtual/: 新建网站素材目录和索引文件
mkdir /{virtual01,virtual02}echo"virtual01"> /virtual01/index.html
echo"virtual02"> /virtual02/index.html: 新建虚拟主机,监听81端口
vim /opt/nginx/conf/virtual01.conf

# 写入下列内容,log_format和server是平级的,等同于在http里面。日志格式名main1不能重复,需要全局唯一
log_formatmain1'$remote_addr - $remote_user [$time_local] "$request"';
server {
listen 81;
server_name _;
access_log logs/virtual01.log main1;
location /{
    root /virtual01/;
    index index.html;}}: 新建虚拟主机,监听82端口
vim /opt/nginx/conf/virtual02.conf

# 写入下列内容
log_formatmain2'$remote_addr - $time_local';
server {
listen 82;
server_name _;
access_log logs/virtual02.log main2;
location /{
    root /virtual02/;
    index index.html;}}: 编辑Nginx主配置文件,在Server字段中引用虚拟主机配置文件,同时取消注释日志配置语句
vim /opt/nginx/conf/nginx.conf

# 在http字段中添加下列内容
include       virtual01.conf;
include       virtual02.conf;
log_formatmain'$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';

    access_loglogs/access.logmain;

: 检测nginx配置文件语法,重新加载nginx
nginx -t
nginx -s reload

: 客户端Kylin-2分别访问Nginx的80、81和82端口
curl http://192.168.110.1
curl http://192.168.110.1:81
curl http://192.168.110.1:82: 分别查看日志文件,Nginx的日志匹配会先匹配虚拟主机中,其次才是全局配置中
cat /opt/nginx/logs/virtual01.log
cat /opt/nginx/logs/virtual02.log
cat /opt/nginx/logs/access.log

5. 错误日志管理

通过访问Nginx官网可以看到关于error_log 的相关说明
Syntax:                error_log file;
Default:        error_log logs/error.log error;
Context:        main, http, mail, stream, server, locationerror_log 日志分别存在7个等级,不同等级所记录的信息内容不一样,其中debug记录最详细,alert记录最简略
debug:提供最详细的日志记录,包括处理的请求的每一步、模块加载、变量值 info:信息级别,记录一般的运行时信息 notice:通知级别,用于记录重要的正常操作信息 warn:警告级别,记录潜在的异常情况 error:错误级别,记录那些阻止正常请求处理的错误事件 crit:严重级别,记录非常严重的错误 alert:警报级别,用于表示需要立即采取行动的紧急情况
: 编辑virtual01虚拟主机配置文件,添加错误日志记录,其中日志等级为 warn
vim /opt/nginx/conf/virtual01.conf

# 写入下列内容
error_log logs/virtual01-err.log warn;

: 检测nginx配置文件语法,重新加载nginx
nginx -t
nginx -s reload: 使用客户端访问错误页面
curl http://192.168.110.1:81/kkk

: 查看错误日志和访客日志的内容,两个日志都会记录内容,但是错误日志所记录的内容更加详细
cat /opt/nginx/logs/virtual01.log
cat /opt/nginx/logs/virtual01-err.log

6. 错误日志优化

常规的错误代码
404:内容资源不存在 403:访问权限不足
: 编辑virtual01虚拟主机配置文件,添加错误日志重定向
error_page 404 error404.html;
error_page 403 error403.html;

: 在/virtual01目录下新建404错误页面
echo'<img src="404.jpg">'> /virtual01/error404.html
echo'<img src="403.jpg">"'> /virtual01/error403.html: 检测nginx配置文件语法,重新加载nginx
nginx -t
nginx -s reload

: 客户端Kylin-2访问Nginx的错误页面,可以看到被重定向到error404页面
http://192.168.110.1:81/kkkk

: 将/virtual01目录下的index.html属组和其它人的权限设置为0,然后访问页面,可以看到被重定向到error403错误页面
chmod600 /virtual01/index.html
http://192.168.110.1:81

7. 手动切割日志

手动切割日志的核心思想
将原先存在的 access.log 日志重命名 向 Nginx 发送 reopen 信号,重新生成日志
: 利用for循环生成大量的日志信息
fornin{1..1000};docurl http://192.168.110.1;done: 将原先存在的日志备份,也就是重命名。如果设置了定时任务,计算机会在准点后进行备份,备份时间就会变成最新的一天,可以通过 -d yesterday指定日期为前一天。
mv /opt/nginx/logs/access.log /opt/nginx/logs/access-$(date-d yesterday +%F).log: 向nginx发送reopen信号,使其重新生成日志
nginx -s reopen

8. logrotate日志切割工具

logrotate 是一个用于管理日志文件自动轮转、压缩、删除和邮寄的工具。logrotate主要配置文件在 /etc/logrotate.conf,可以通过在 /etc/logrotate.d/目录下单独的配置文件来管理特定的服务日志。
: 编译安装的Nginx不会在/etc/logrotate.d/目录下创建文件,需要我们手动创建配置文件
cp /etc/logrotate.d/samba /etc/logrotate.d/nginx

# 写入下列内容
/opt/nginx/logs/*.log {
    daily                        # 日志轮转的频率是每天
    missingok                # 如果日志文件不存在,忽略错误继续处理下一个文件
    rotate 52# 最多保留52个存档
    compress                # 切割后压缩文件
    delaycompress        # 延迟压缩直到下一次切割,也就是本次切割不会压缩,下一次切割时才会压缩
    notifempty                # 如果日志文件为空,不会进行切割
    create 640 nginx adm        # 切割后创建一个新的空日志文件,权限设置为640,
    sharedscripts                        # 标记脚本开始
    postrotate                 # 日志切割要执行的命令
            nginx -s reopen                # 向Nginx发送reopne信号
    endscript                                # 标记sharedscripts脚本结束}

: 先清除日志中内容,利用for循环产生大量日志信息
> /opt/nginx/logs/access.log
fornumin{1..10000};docurl http://192.168.110.1;done: 手动执行 logrotate 命令切割日志,根据我们定义的选项【delaycompress】,日志的压缩会延迟到下一次的切割
logrotate-f /etc/logrotate.d/nginx

: 再次利用for循环产生大量日志信息,手动执行 logrotate 命令切割日志,可以看到第一次产生的日志已经被压缩
fornumin{1..10000};docurl http://192.168.110.1;donelogrotate-f /etc/logrotate.d/nginx

: 将日志切割任务写入cron定时任务中
crontab-e# 写入下列内容
00 00 * * * logrotate-f /etc/logrotate.d/nginx四、Nginx高级功能

1. 实现类似FTP的目录索引下载命令

: 新建一个目录,将本地光盘挂载到该目录下
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom: 新建虚拟主机配置文件
vim /opt/nginx/conf/ftp.conf

# 文件内容如下
server{
   listen 8080;
   location /{
      autoindex on;# 启用目录浏览功能
      autoindex_localtime on;# 使目录列表中的文件时间以服务器本地时间显示
      autoindex_exact_size off;# 显示文件的精确大小(字节)
      root /mnt/cdrom;# 数据目录}}: 编辑Nginx主配置文件
vim /opt/nginx/conf/nginx.conf

# 在http字段中引入虚拟主机配置文件
include       ftp.conf;

: 检测nginx配置文件语法,重新加载nginx,调整防火墙策略
nginx -t
nginx -s reload
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload: 使用客户端浏览,同时该功能也可以为客户提供YUM仓库源


2. Nginx的链接数监控

如果监控Nginx链接数,需要查看当前的Nginx是否支持。
nginx -V

链接数监控模块需要使用 http_stub_status_module 模块,而我们编译安装的Nginx不支持该模块。需要重新编译安装。
: 先删除源有的nginx命令
rm-rf /usr/sbin/nginx: 重新解压nginx源码包
tar-zxf nginx-1.18.0.tar.g
cd nginx-1.18.0/: 生成Makefile
./configure --prefix=/opt/nginx --with-http_stub_status_module        # 启用Nginx的HTTP stub status模块

: 编译安装
make&&makeinstall: 将Nginx安装目录下的nginx命令拷贝到/usr/sbin目录下
cp-a /opt/nginx/sbin/nginx /usr/sbin/: 删除解压后的源码包,查看当前编译安装的Nginx支持模块,可以看到已经支持该模块
rm-rf nginx-1.18.0
nginx -V

: 启动nginx
nginx: 新建虚拟主机配置文件
vim /opt/nginx/conf/link.conf

# 写入下列内容
server {
listen 8080;
server_name _;
stub_status on;# 开启链接数监控
access_log off;# 关闭日志记录}: 编辑Nginx主配置文件
vim /opt/nginx/conf/nginx.conf

# 在http字段中引入虚拟主机配置文件
include       link.conf;

: 检测nginx配置文件语法,重新加载nginx
nginx -t
nginx -s reload: 客户端访问,可以看到当前的链接数和http请求等参数


3. 基于IP地址的访问限制

Nginx分别提供了 allow和deny 字段来限制指定的IP地址访问。
https://nginx.org/en/docs/http/ngx_http_access_module.html

allow和deny字段存在匹配顺序,根据书写顺序进行匹配。默认情况下,Nginx隐含allow语句,也就是默认允许所有网段主机访问。allow和deny字段是基于【$remote_addr】进行判断。


节点设计
主机网络信息说明Kylin-1192.168.110.1/24
192.168.19.234Web服务器Kylin-2192.168.110.2/24
192.168.19.149测试客户端: 新建虚拟主机配置文件
vim /opt/nginx/conf/control.conf

# 写入下列内容
server{
listen 81;
server_name _;

location / {
    allow 192.168.110.0/24;
    root /www/control/;
    index index.html;}}: 新建网站素材目录和索引文件
mkdir-p /www/control/
echo"control test"> /www/control/index.html: 编辑Nginx配置文件
vim /opt/nginx/conf/nginx.conf

# 在http字段中添加include
include                control.conf;: 重新加载nginx
nginx -s reload: 客户端Kylin-1测试访问Nginx,可以看到即使设置了只允许192.168.110.0/24网段访问,但是192.168.19.234未受影响。
curl http://192.168.110.1:81
curl http://192.168.19.234:81

: 修改虚拟主机配置文件,添加deny语句


: 重新加载nginx
nginx -s reload: 客户端Kylin-1重新测试访问,可以看到192.168.19.0/24已经被拒绝访问。
: 可能会存在疑惑,Kylin-1和Kylin-2上都存在两个网段【192.168.110.0/24和192.168.19.9/24】,那么如何判断自己是使用哪个网段去访问对应的IP地址?
在这里插入图片描述
# 也可以通过查看Nginx日志cat /opt/nginx/logs/access.log

4. 基于用户认证的访问限制

适用场景:内网环境中的的一些资料网站的保护。
: 安装httpd-tools工具包
yum install-y httpd-tools: 创建密码文件
mkdir /www/auth
htpasswd -bc /www/auth/htpasswd kylin Kylin2024
**-b:**非交互式输入用户名和密码 **-c:**创建一个加密文件,此处的加密文件为 /www/auth/htpasswd **kylin Kylin2024:**分别为账号和密码


: 新建虚拟主机配置文件
vim /opt/nginx/conf/auth.conf

# 写入下列内容
server {
listen 82;
server_name _;
location /{
    root /www/auth/;
    index index.html;
    auth_basic "Please input your account password";# 弹出的提示信息
    auth_basic_user_file /www/auth/htpasswd;# 指定密码验证文件}}: 新建网站素材文件和索引文件
echo"basic"> /www/auth/index.html: 编辑Nginx主配置文件
vim /opt/nginx/conf/nginx.conf

# 在http字段中添加下列内容
include       auth.conf;

: 验证Nginx配置文件语法,重新加载nginx,,调整防火墙策略
nginx -t
nginx -s reload
firewall-cmd --add-port=82/tcp --permanent
firewall-cmd --reload: 客户端验证访问




: curl的方式访问
curl-u kylin:Kylin2024 http://192.168.110.1:82

5. Nginx请求频率限制(限流)

ngx_http_limit_req_module用于限制每个定义键的请求处理率,特别是来自单个IP地址的请求的处理率。限制是使用“泄漏桶”方法实现的。
: 新建虚拟主机配置文件
vim /opt/nginx/conf/limit.conf

# 文件内容如下
limit_req_zone $binary_remote_addrzone=one:10m rate=1r/s;# limit_req_zone:定义一个限制请求的区域,告诉Nginx如何跟踪请求频率并应用限制# $binary_remote_addr:代表客户端IP地址的二进制形式,使用二进制可以减少内存占用# zone=one:10m:定义区域one,并为其分配10m内存# rate=1r/s:限制请求速率为每秒1个请求

server {
listen 83;
server_name _;
access_log logs/limit.log;# 应用区域规则one,burst=3,允许超出限制后再解析3个请求,也就是请求速率超过1r/s也会额外处理3个请求
limit_req zone=one burst=3 nodelay;               
location /{
    root /www/limit/;
    index index.html;}}: 编辑Nginx主配置文件
vim /opt/nginx/conf/nginx.conf

# 在http字段中添加下列内容
include                limit.conf;

: 新建素材目录和索引文件
mkdir /www/limit
echo"limit limit"> /www/limit/index.html: 验证配置文件语法,重新加载nginx,调整防火墙策略
nginx -t
nginx -s reload
firewalld-cmd --add-port=83/tcp --permemnt
firewalld-cmd --relaod

: 监控日志,客户端正常访问Nginx
tail-f /opt/nginx/logs/limit.log
foriin{1..10};docurl http://192.168.110.1:83;sleep1;done

: 清空日志,重新监控日志,客户端按照每秒2次的访问频率访问Nginx
> /opt/nginx/logs/limit.log
tail-f/opt/nginx/logs/limit.log

6. Nginx编译安装第三方模块

默认情况下,在编译安装Nginx时,不会安装一些其他的模块,除了我们自行启用的模块
nginx -V

: 验证不存在该模块的情况下使用该模块:新建虚拟主机配置文件
vim /opt/nginx/conf/eecho.conf

# 写入下列内容
server {
listen 81;
server_name _;
location /{echo"Using echo module.";echo$remote_addr;}}: 验证不存在该模块的情况下使用该模块:编辑Nginx主配置文件
vim /opt/nginx/conf/nginx.conf

# 在http字段中添加下列内容
include       eecho.conf;

: 验证不存在该模块的情况下使用该模块:验证配置文件语法,此时会echo为未知指令


: 安装git工具,然后从GitHub上下载echo模块的源码
yum install-ygitgit clone https://github.com/openresty/echo-nginx-module.git

: 下载完成后,当前目录下会存在一个echo-nginx-module的目录


: 准备一个Nginx源码包,解压后进行编译安装
tar zxf nginx-1.18.0.tar.gz
cd nginx-1.18.0/
# 添加echo的参数,别忘记启用原有的模块
./configure --prefix=/opt/nginx --add-module=/root/echo-nginx-module --with-http_stub_status_module
make&&makeinstallcd# 切换会主目录rm-rf nginx-1.18.0                # 删除源码目录: 重新查看nginx支持的模块
/opt/nginx/sbin/nginx -V

: 将nginx命令拷贝到sbin目录下或将nginx命令目录添加到环境变量中
rm-rf /usr/sbin/nginx
cp-a /opt/nginx/sbin/nginx /usr/sbin/: 验证Nginx配置文件语法,重新加载Nginx配置文件
nginx -t
nginx -s reload: 客户端访问Nginx
curl http://192.168.110.1:81

: 使用浏览器访问,默认Nginx不会解析该内容,会以附加形式下载
页: [1]
查看完整版本: 全网最详细基于Kylin的Nginx服务部署与配置(1/2)