瞅一眼nginx

目录

🦬什么是nginx?

🦬nginx配置官方yum源:

🦬nginx优点

🦬nginx 缺点

🦬查看nginx默认模块

🐌nginx新版本的配置文件:

🐌nginx目录索引

🐌nginx状态监控(status模块)

🐌nginx基于用户的访问控制(auth模块)

🐌nginx的访问限制***

🐌nginx日志格式:log_format

🐌nginx的location ***** 


什么是nginx?

世界最大web服务器软件,以高并发、低消耗著称,源自于俄罗斯,创建者 Igor(伊戈尔),2004年开源,最早以代理服务器的身份出现,2015成立nginx公司,2019年以6.7亿被F5 Networks公司收购。

 

nginx配置官方yum源:

http://nginx.org/en/linux_packages.html#RHEL-CentOS
vim /etc/yum.repos.d/nginx.repo
添加:
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
保存退出

nginx优点

高性能:Nginx采用了异步非阻塞的事件驱动模型,能够处理大量并发连接,较低的资源消耗,具有出色的性能表现

高度可靠:它具备优秀的故障恢复能力,能够在面对高峰时段或者异常访问情况下保持稳定。

可扩展性强:反向代理服务器,将请求分发到多个后端服务器,实现负载均衡和高可用性。它还支持动态模块加载,可以通过插件来扩展功能,非常灵活。

内存占用低:相对于传统的Web服务器,Nginx占用的内存更少,可以更好地利用服务器的资源。

nginx 缺点

尽管Nginx拥有许多优点,但它也有一些缺点需要了解比如:在Windows环境下的支持较弱,限制性的脚本语言支持,缺少内置支持,适应范围较小,动态内容处理相对复杂,等一些因素

查看nginx默认模块

nginx -V
 

nginx新版本的配置文件:

全局配置文件:/etc/nginx/nginx.conf
    虚拟主机配置:/etc/nginx/conf.d/*.conf
    例子1:使用域名搭建一台虚拟主机
            mkdir  /www
            复制网页代码到/www目录下
            vim /etc/nginx/conf.d/www.conf
            添加:
            server {
                listen       80;
                server_name  www.yundong.com;
                location / {
                    root   /www;
                    index  index.html index.htm;
                }
    
            }
            保存退出
            systemctl restart nginx 
            客户端修改/etc/hosts访问测试

nginx目录索引

nginx默认不起用目录索引,更不允许列出网站目录提供下载。
    Syntax:    autoindex on | off;                索引功能的开或关
    Default:    autoindex off;                默认关闭
    Context:    http, server, location        场景:全局、某个虚拟主机、某个虚拟主机的目录
    
    例子:在www网站下,创建download下载目录,索引显示
    mkdir /www/download
    复制文件到/www/download目录下
    vim  /etc/nginx/conf.d/www.conf
    在server字段中添加:
    location /download {
        root   /www;
        autoindex on;                        启用索引显示
        charset utf-8,gbk;                    字符编码为中文
        autoindex_exact_size on;            显示文件大小        
        autoindex_localtime on;                显示文件创建时间
    }
    保存退出
    systemctl reload nginx
    客户端测试访问:http://www.www.com/download

nginx状态监控(status模块)

Syntax:    stub_status;                    启用状态化追踪
    Default:    —                            默认关闭
    Context:    server, location            场景:

    例子:针对www网站,启用状态化追踪
    vim  /etc/nginx/conf.d/www.conf
    在server字段中添加:
    location /status {
        stub_status;                        启用状态化追踪
        access_log off;                        关闭status的日志记录
    }
    保存退出
    systemctl reload nginx
    客户端访问:http://www.www.com/status
    客户端显示结果如下:  ***
    Active connections: 1                     当前活跃的连接数
    server  accepts     19                 当前的总tcp连接数
        handled     19                 成功的连接数
        requests    486                总HTTP请求数
  

nginx基于用户的访问控制(auth模块)

环境知识:
    网站用户认证方式:摘要式  基本式身份验证
    
    例子:设置访问/status,用户密码验证
    yum -y install httpd-tools
    htpasswd -b -c /etc/nginx/.auth_conf webadmin 123456
    vim  /etc/nginx/conf.d/www.conf
    修改为:
         location /status {
            stub_status;
            access_log off;
            auth_basic           "input your passwd:";    用户验证启用描述
            auth_basic_user_file /etc/nginx/.auth_conf;    用户验证文件路径
        }

nginx的访问限制***

    limit_conn_module        连接频率限制
    例子:
    http {
    limit_conn_zone $binary_remote_addr zone=addr:10m;   创建zone区域名为addr,大小10m,保存客户端的二进制ip
        server {
            location /download/ {
                    limit_conn addr 1;                    一个ip同一时间点只允许建立一个连接
                    }
            }
    }
    
    limit_req_module        请求频率限制
    例子:
    vim /etc/nginx/nginx.conf
    http {
    第23行插入:
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;    创建zone区域名为one,大小10m,保存客户端的二进制ip,限制请求速率每秒1次
    保存退出 
    
    vim /etc/nginx/conf.d/www.conf 
    server {
            location /download {
                limit_req zone=one burst=5;                        调用请求速率区域,另外设置额外突发5次
                }
            }
    }

nginx日志格式:log_format

例子:
    vim /etc/nginx/nginx.conf
    http {
        log_format  main  '$remote_addr - $remote_user [$time_iso8601] "$request" '        #定义日志输出格式main
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

        access_log  /var/log/nginx/access.log  main;                                    #调用日志格式main
    }
    #nginx日志格式的变量:
    $remote_addr            #记录客户端的ip地址
    $remote_user            #记录客户端的用户名
    $time_local                #通用的时间格式
    $time_iso8601            #iso8601时间格式
    $request                #请求的方法和请求的HTTP协议
    $status                    #请求状态码
    $body_bytes_sent        #服务器回应的字节数,不包含头部大小
    $bytes_sent                #服务器回应的总字节数
    $msec                    #日志写入时间,单位为秒,精度为毫秒
    $http_referer            #记录链接访问源地址
    $http_user_agent        #记录客户端浏览器信息
    $http_x_forwarded_for    #代理服务器ip
    $request_length            #请求包的长度(请求头+请求正文)
    $request_time            #请求花费的时间,单位为秒,精度为毫秒 ***

nginx的location ***** 

语法详解
语法规则: location [=|~|~*|^~] /uri/ { … }
下列以优先级从高到低排序

= 开头表示精确匹配

^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。

~ 开头表示区分大小写的正则匹配                    

~* 开头表示不区分大小写的正则匹配             

!~和!~*分别为区分大小写不匹配及不区分大小写不匹配的正则

/ 通用匹配,任何请求都会匹配到。

例子:测试匹配符的优先级
cd /etc/nginx/conf.d/
vim test.conf
添加:
server {
        listen 80;
        server_name test.benet.com;

        location / {
                default_type text/html;
                return 200 "location /";
        }
        location =/ {
                default_type text/html;
                return 200 "location =/";
        }
        location ~ / {
                default_type text/html;
                return 200 "location ~ /";
        }
        location ~* / {
                default_type text/html;
                return 200 "location ~* /";
        }
}
保存退出
客户端修改hosts文件,测试访问

真实企业场景配置:***
#通用匹配,任何请求都会匹配到。
location / {
    root /www;
}

#严格区分大小写,匹配.php结尾
location ~ \.php$ {
    fastcgi_pass http://127.0.0.1:9000;
}

#严格区分大小写,匹配.jsp结尾
location ~ \.jsp$ {
    proxy_pass http://127.0.0.1:8080;
}

#不区分大小写匹配
location ~* "\.(sql|bak|tgz|tar.gz|.git)$ {
    default_type text/html;
    return 403 "启用访问控制";
}    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/58295.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习实战1-kNN最近邻算法

文章目录 机器学习基础机器学习的关键术语 k-近邻算法(KNN)准备:使用python导入数据实施kNN分类算法示例:使用kNN改进约会网站的配对效果准备数据:从文本文件中解析数据分析数据准备数据:归一化数值测试算法…

JavaWeb(9)——前端综合案例3(悬停显示下拉列表)

一、实例需求 ⌛ 实现类似百度首页的“一个简单的鼠标悬停显示的下拉列表效果”。 二、代码实现 ☕ <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>.dropdown-cont…

Flink-串讲面试题

1. 概念 有状态的流式计算框架 可以处理源源不断的实时数据&#xff0c;数据以event为单位&#xff0c;就是一条数据。 2. 开发流程 先获取执行环境env&#xff0c;然后添加source数据源&#xff0c;转换成datastream&#xff0c;然后使用各种算子进行计算&#xff0c;使用…

【数据结构OJ题】轮转数组

原题链接&#xff1a;https://leetcode.cn/problems/rotate-array/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 1. 方法一&#xff1a;暴力求解&#xff0c;将数组的第一个元素用临时变量tmp存起来&#xff0c;再将数组其他元素往右挪动一步&…

SpringBoot+MyBatis多数据源配置

1.先在配置文件application.yml中配置好数据源 spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedb1:driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: rootjdbc-url: jdbc:mysql://192.168.110.128:3306/CampusHelp?useUnicodeyes&…

基于dockerfile构建sshd、httpd、nginx、tomcat、mysql、lnmp、redis镜像

一、镜像概述 Docker 镜像是Docker容器技术中的核心&#xff0c;也是应用打包构建发布的标准格式。一个完整的镜像可以支撑多个容器的运行&#xff0c;在Docker的整个使用过程中&#xff0c;进入一个已经定型的容器之后&#xff0c;就可以在容器中进行操作&#xff0c;最常见的…

【深度学习】Collage Diffusion,拼接扩散,论文,实战

论文&#xff1a;https://arxiv.org/abs/2303.00262 代码&#xff1a;https://github.com/VSAnimator/collage-diffusion 文章目录 AbstractIntroductionProblem Definition and Goals论文其他内容实战 Abstract 基于文本条件的扩散模型能够生成高质量、多样化的图像。然而&a…

CentOS 7中,配置了Oracle jdk,但是使用java -version验证时,出现的版本是OpenJDK,如何解决?

1.首先&#xff0c;检查已安装的jdk版本 sudo yum list installed | grep java2.移除、卸载圈红的系统自带的openjdk sudo yum remove java-1.7.0-openjdk.x86_64 sudo yum remove java-1.7.0-openjdk-headless.x86_64 sudo yum remove java-1.8.0-openjdk.x86_64 sudo yum r…

pytorch的CrossEntropyLoss交叉熵损失函数默认reduction是平均值

pytorch中使用nn.CrossEntropyLoss()创建出来的交叉熵损失函数计算损失默认是求平均值的&#xff0c;即多个样本输入后获取的是一个均值标量&#xff0c;而不是样本大小的向量。 net nn.Linear(4, 2) loss nn.CrossEntropyLoss() X torch.rand(10, 4) y torch.ones(10, dt…

第二篇|研究数据哪里来——建筑业

数据是研究和产业发展的重要基石&#xff0c;然而无论是学者、企业还是研究机构往往都面临着“找数据难”的局面。本期将分享一些查找建筑相关的数据及资料的渠道。希望可以帮大家解决这一难题&#xff0c;有用求收藏求收藏求收藏~ 1.政府机构 可以查找国家、地方政府的建筑行…

65 # 实现 http-server 里的 gzip 压缩

用 zlib 来实现 gzip 压缩 服务端优化都是&#xff1a;压缩 缓存 前端可以通过 webpack 插件进行压缩 gzip 根据替换来实现的&#xff0c;重复率越高&#xff0c;压缩后的结果越小 const zlib require("zlib"); const fs require("fs"); const path …

自己实现Linux 的 cp指令

cp指令 Linux的cp指令就是复制文件&#xff1a; cp: 拷贝(cp 拷贝的文件 要拷贝到的地址或文件)&#xff0c;cp b.c test.c 将b.c拷成test.c的一个新文件 Linux 系统初识_mjmmm的博客-CSDN博客 实现思路 打开源文件读文件内容到缓冲区创建新文件将读到的文件内容全部写入新文…