Nginx配置示例教程

       最近对Nginx做了一些初步研究,Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发。主要根据工作中各类应用服务部署访问的需求,围绕HTTP服务、负载均衡、正反向代理、子路由、静态资源发布访问等,以及结合minio管理的图片文件资源预览,如何快速搭建web服务的一些研究和探索,也包括一些基本指令的解释和正则表达式等,主要编写了几个应用示例,其实Nginx应用范围非常广泛,功能都比较实用,任何一个功能都可以单独展开研究,比如关于性能优化的gzip功能,本文只是总结常见的应用场合,同时,Nginx支持master-worker和单进程模式,这里主要介绍单进程模式,供大家参考。

一、nginx启动

start nginx或 nginx.exe
重新载入nginx:nginx.exe -s reload
查看版本:nginx -v

二、nginx停止

nginx.exe -s stop 或 nginx.exe -s quit

三、nginx配置文件整体结构
...              #全局块

events {         #events块
   ...
}

http      #http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}
四、nginx配置说明
1.指令说明

server : 用于定义服务,http中可以有多个server块
listen : 指定服务器侦听请求的IP地址和端口,如果省略地址,服务器将侦听所有地址,如果省略端口,则使用标准端口80
server_name : 服务名称,用于配置域名
location : 用于配置映射路径uri对应的配置,一个server中可以有多个location, location后面跟一个uri,可以是一个正则表达式, / 表示匹配任意路径, 当客户端访问的路径满足这个uri时就会执行location块里面的代码
root : 根路径,当访问http://localhost/test.html,“/test.html”会匹配到"/"uri, 找到root为/usr/local/var/www/html,用户访问的资源物理地址=root + uri = /usr/local/var/www/html + /test.html=/usr/local/var/www/html/test.html
index : 设置首页,当只访问server_name时后面不跟任何路径是不走root直接走index指令的;如果访问路径中没有指定具体的文件,则返回index设置的资源,如果访问http://localhost/html/ 则默认返回index.html;如果指定了路径,就直接从root中找对应该uri指定的文件。
set指令:语法 为set 变量名 变量值 ; 引用使用:$变量名,详见第2个示例。

2.uri正则表达式

1) . : 匹配除换行符以外的任意字符
2)? : 重复0次或1次
3)+: 重复1次或更多次
4)*: 重复0次或更多次
5) \d :匹配数字
6) ^ : 匹配字符串的开始
7)$ : 匹配字符串的结束
8){n} : 重复n次
9){n,} : 重复n次或更多次
10) [ ] : 匹配单个字符c
11) [a-z] : 匹配a-z小写字母的任意一个
12) (a|b|c) : 属线表示匹配任意一种情况,每种情况使用竖线分隔,一般使用小括号括括住,匹配符合a字符 或是b字符 或是c字符的字符串
13) \ 反斜杠:用于转义特殊字符
其中,小括号()之间匹配的内容,可以在后面通过$1来引用,$2表示的是前面第二个()里的内容。正则里面容易让人困惑的是\转义特殊字符。

五、nginx应用场景示例
1.示例:HTTP Server
http {
    server {
	    listen       8081;
	    server_name  localhost;
	
	    client_max_body_size 1024M;

	    # 默认location
	    location / {
	        root   /usr/local/var/www/html; 
	        index  index.html index.htm;
	    }
	}
}

访问URL:http://localhost:8081

2.示例:HTTP 静态资源
http {
    server {
       listen       8081;
       server_name  localhost;
       set $doc_root /usr/local/var/www/html;
      
       # 默认location
       location / {
           root   /usr/local/var/www/html;
           index  index.html index.htm;
       }
      
       location ^~ /images/ {
           root $doc_root;
       }
      
      location ~* \.(gif|jpg|jpeg|png|bmp|ico|swf|css|js)$ {
          root $doc_root/img;
      }
    }
}

访问URL:http://localhost:8081/my.png 或 http://localhost:8081/images/my.png

3.示例:HTTP 反向代理

作用:保护和隐藏原始资源服务器、- 加密和SSL加速、负载均衡、解决前端跨域问题,原理图详见附录的正向代理图和反向代理图

http {
    server {
       listen       8081;
       server_name  localhost;       
      
       # 默认location
       location / {
	       proxy_pass http://localhost:8000;

           # 设置用户ip地址
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          
            # 当请求服务器出错去寻找其他服务器
           proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; 
       }
    }
}

访问URL:http://localhost:8081,将会自动跳转到http://localhost:8000

4.HTTP 反向代理+子路由
http {
    # 10.HTTP 数字孪生项目配置。
    server {    
       listen       81;   
       access_log logs/host.access.log  main;
       error_log logs/error.log; # 修正错误日志路径   
       client_max_body_size 200m;
   
       root  /usr/local/var/www/html;
       index index.html index.htm;
       
       location / {
           try_files $uri $uri/ /index.html;
       }
	   # 指定压缩路由的头,开启Gzip压缩
       location ~* \.gz$ {
           add_header Content-Encoding gzip;
           gzip on; # 开启Gzip压缩
           gzip_proxied any; #对任意代理请求回应压缩
           gzip_types application/javascript application/x-javascript text/javascript text/plain application/xml text/css; #指定主要压缩的资源类型,一般主要有文本类资源,如json/js/css/xml等
           # 每当客户端的 Accept-Encoding-capabilities 头发生变化时,告诉代理缓存 gzip 和常规版本的资源。避免了不支持 gzip 的客户端(这在今天极为罕见)在代理给它们 gzip 版本时显示乱码的问题,缺省为off
           gzip_vary on;
           gzip_disable "MSIE [1-6]\.(?!.*SV1)";
       }
   
       error_page 404 /404.html;
       location = /40x.html {
       }
   
       error_page 500 502 503 504 /50x.html;
       location = /50x.html {
       }
   
       # 指定子路由路径
       location /superdev {
           # 指定第二个网站的根目录
           alias /usr/local/var/www/html/superdev;
           index index.html index.htm;
               
           try_files $uri $uri/ /usr/local/var/www/html/superdev/index.html last;
       }
   
	   # 指定子路由映射的反向代理
       location /apis/ {
           proxy_pass http://127.0.0.1:8080/;
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header REMOTE-HOST $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       }
	   # 指定子路由映射的反向代理
       location /minioui/ {
           proxy_set_header Host $http_host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header X-Forwarded-Proto $scheme;
           proxy_set_header X-NginX-Proxy true;
           proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection "upgrade";
           proxy_pass http://localhost:9000/; # 修改为正确的 MinIO Console 端口
           proxy_redirect off;
           sub_filter 'href="/' 'href="/minioui/';
           sub_filter 'src="/' 'src="/minioui/';
           sub_filter 'url("/' 'url("/minioui/';
           sub_filter_once off;
       }
}

访问URL:http://localhost:81/,http://localhost:81/apis,http://localhost:81/minioui

5.示例:HTTP 负载均衡

原理图详见8.负载均衡

http {
    # 4.HTTP 负载均衡(4/5转到8000端口,1/5转到8082端口)
    upstream web_servers {  
       server localhost:8000 weight=4;  
       server localhost:8082 weight=1;  
       server localhost:8082 weight=2 backup;  # 热备,只有当前两个都宕机的情况下才走这里。
    }
    server {
       listen       8081;
       server_name  localhost;
       access_log  logs/host.access.log  main;

       # 默认location
       location / {
            proxy_pass http://web_servers;
            # 必须指定Header Host
            proxy_set_header Host $host:$server_port;
       }
    }
}

访问URL:http://localhost:8081,将会自动跳转到http://localhost:8000

6.示例:HTTP 动静分离
http {
    # 5.HTTP 动静分离(1/5转到8000端口,4/5转到8081端口)
    upstream web_servers {  
       server localhost:8000 weight=1;  
       server localhost:8081 weight=4;  
       server localhost:8082 weight=2 backup;  # 热备,只有当前两个都宕机的情况下才走这里。
    }
    server {
       listen       8081;
       server_name  localhost;
       access_log  logs/host.access.log  main;

       set $doc_root /usr/local/var/www;

       location ~* \.(gif|jpg|jpeg|png|bmp|ico|swf|css|js)$ {
          root $doc_root/img;
       }
   
       location / {
           proxy_pass http://web_servers;
           # 必须指定Header Host
           proxy_set_header Host $host:$server_port;
       }
   
       error_page 500 502 503 504  /50x.html;  
       location = /50x.html {  
           root $doc_root;
       }
    }
}

访问URL:http://localhost:8081,将会自动跳转到http://localhost:8081,或者访问http://localhost:8081/my.png 或 http://localhost:8081/50x.html

7.示例:通过Nginx构建Minio管理的文件及图片预览。

通过Nginx实现Minio上传的文件及图片预览是一个非常简单而强大的功能。我们只需要将Nginx配置为代理Minio服务器,并配置一个新的服务器块来提供文件预览功能。通过这种方式,我们可以实现高效的文件上传和预览,从而提升用户体验。

http {
    server {
        # 监听在8081端口,进行请求路由转发
        listen 8081; 
        server_name localhost;
    
        location / { # 将所有8081端口过来的访问路由到proxy_pass指定的url
          proxy_pass http://localhost:9000;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
        }
    }

    server {
       # 监听在8000端口,进行请求路由转发,实现minio存放的图片文件浏览与下载
       listen 8000; 
       server_name localhost;
     
       location /uploads { # 只能配置指定目录下的所有文件,不支持字目录
         alias /usr/local/minio/data0/objdev;
       }
       location /uploads/sub { # 只能配置指定目录下的所有文件,不支持字目录
         alias /usr/local/minio/data0/objdev/2024/const/model;
       }
    }
}

说明:minio必须时2022年5月及之前的版本,新版本不支持,同时,minio对应的mxglfsdev桶的Access Policy设置为public。
访问URL:http://localhost:8000/uploads/sub/深海一号.png 或 http://localhost:8000/uploads/my.png

8.HTTP 反向代理 + 负载均衡 + 缓存控制

HTTP 反向代理 + 负载均衡 + 缓存控制,其中负载的1/5转到8000端口,4/5转到8081端口。

http {
    # 8.HTTP 反向代理 + 负载均衡 + 缓存控制,其中负载的1/5转到8000端口,4/5转到8081端口.
    upstream web_servers {  
       server localhost:8000 weight=1;  
       server localhost:8081 weight=4;  
       server localhost:8082 weight=2 backup;  # 热备,只有当前两个都宕机的情况下才走这里。
    }
    # 全局缓存配置,缓存静态文件的请求(语法:路径 名称 大小;my_cache 是缓存区域的名称)
    proxy_cache_path /usr/local/var/nginx/cache keys_zone=my_cache:10m levels=1:2 max_size=1g;
    proxy_temp_path /usr/local/var/nginx/temp;

    server {
       listen       81;
       server_name  localhost;
       access_log  logs/host.access.log  main;
       set $doc_root /usr/local/var/www;

       # 启用缓存和压缩功能
       gzip on;
       gzip_types text/css application/javascript image/png;

       # 处理静态文件
       location /static/ {
           root $doc_root/static;  # 静态文件路径,用于定义该路径对应的文件系统目录
           expires 30d;           # 缓存30天
       }

       # 处理动态请求,使用负载均衡和反向代理
       location / {
           proxy_pass http://10.23.10.12;  # 反向代理到后端服务器池,比如http://backend_servers
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

           proxy_cache my_cache;        # 启用缓存,用前面定义的全局缓存:my_cache
           proxy_cache_valid 200 302 10m;  # 成功和重定向的缓存时间为10分钟
           proxy_cache_valid 404 1m;    # 404页面缓存1分钟
       }
       # 自定义错误页面
       error_page 500 502 503 504  /50x.html;  
       location = /50x.html {  
           root $doc_root/errors; # 错误页面路径
       }
    }
}

访问URL:http://localhost:81/,http://localhost:81/static

四、附录
1.正向代理图

Proxy和client属于同一网段或LAN,对Server透明,Proxy的作用就是代为转发请求和响应。

2.反向代理图

Proxy和Server属于同一网段或LAN,对Client透明,Proxy的作用就是代为转发请求和响应。

3.负载均衡

用户请求HTTP负载均衡服务器((116.100.50.10)),负载均衡服务器通过一套算法从应用服务器集群中返回用户(浏览器)为一台新的地址(116.100.50.3),后续用户通过发送请求到新的地址完成请求响应等服务(116.100.50.3)。

4.其他说明

1)配置文件中的结尾要有;作为结束~!(切记!)
2)每次实验修改完配置文件后,需要重启 nginx,才会生效!(切记!)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

git使用教程(超详细)-透彻理解git

一.核心基础 核心概念有六个 首先请把与svn有关的一切概念暂时从你的脑海中移除掉,我们要重新认识本文所讲述的所有概念。 1.worktree worktree是一个目录,你在这里对文件进行增加、删除、修改。也就是我们常说的工作区。在git中worktree必须要与一个…

Django结合websocket实现分组的多人聊天

其他地方和上一篇大致相同,上一篇地址点击进入, 改动点1:在setting.py中最后再添加如下配置: # 多人聊天 CHANNEL_LAYERS {"default":{"BACKEND": "channels.layers.InMemoryChannelLayer"} }因此完整的se…

Keil-MDK开发环境编译后axf自动转换bin格式文件

编译选项添加如下,调用fromelf工具自动完成转换: fromelf --bin -o "$LL.bin" "#L"

如何快速搭建若依管理系统?

1、下载若依管理系统前后端分离版代码至本地(当前版本为RuoYi v3.8.8): RuoYi-Vue: 🎉 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供…

【JavaEE】网络(1)

🐵本篇文章开始讲解计算机网络相关的知识 一、基础概念 1.1 局域网和广域网 局域网→Local Area Network→简称LAN,局域网是局部组建的一种私有网络,局域网内的主机之间可以进行网络通信,局域网和局域网之间在没有连接的情况不能…

网络应用技术 实验八:防火墙实现访问控制(华为ensp)

目录 一、实验简介 二、实验目的 三、实验需求 四、实验拓扑 五、实验步骤 1、设计全网 IP 地址 2、设计防火墙安全策略 3、在 eNSP 中部署园区网 4、配置用户主机地址 5、配置网络设备 配置交换机SW-1~SW-5 配置路由交换机RS-1~RS-5 配置路由器R-1~R-3 6、配置仿…

day11 性能测试(4)——Jmeter使用(黑马的完结,课程不全)直连数据库+逻辑控制器+定时器

【没有所谓的运气🍬,只有绝对的努力✊】 目录 1、复习 1.1 断言(3种) 1.2 关联(3种) 1.3 录制脚本 2、Jmeter直连数据库 2.1 直连数据库——使用场景 2.2 直连数据库——操作步骤 2.2.1 案例1&…

Modelscope AgentFabric: 开放可定制的AI智能体构建框架

目录 git clone https://github.com/modelscope/modelscope-agent.git cd modelscope-agent && pip install -r requirements.txt && pip install -r apps/agentfabric/requirements.txtexport PYTHONPATH$PYTHONPATH:/home/ubuntu/users/lilingfei/modelscop…

CSS|08 浮动清除浮动

浮动 需求: 能够实现让多个元素排在同一行,并且给这些元素设置宽度与高度! 让多个元素排在同一行:行内元素的特性 给这些元素设置宽高:块级元素的特性 在标准文档流中的元素只有两种:块级元素和行内元素。如果想让一些元素既要有块级元素的特点也要有行内元素的特…

[Pro Git#3] 远程仓库 | ssh key | .gitignore配置

目录 1. 分布式版本控制系统的概念 2. 实际使用中的“中央服务器” 3. 远程仓库的理解 4. 新建远程仓库 5. 克隆远程仓库 6. 设置SSH Key 实验 一、多用户协作与公钥管理 二、克隆后的本地与远程分支对应 三、向远程仓库推送 四、拉取远程仓库更新 五、配置Git忽略…

【uni-app】App与webview双向实时通信

【uni-app】App与webview双向实时通信 在 Uniapp 中,App 与 里面嵌入的 webview 进行双向的实时通信 vue2 , 模拟器 主要分为两部分 webview 向 app 发送信息 app 向 webview 发送信息 以下是实现方式,用一个例子来说明 (文…

微信小程序处理交易投诉管理,支持多小程序

大家好,我是小悟 1、问题背景 玩过微信小程序生态的,或许就有这种感受,如果收到投诉单,不会及时通知到手机端,而是每天早上10:00向小程序的管理员及运营者推送通知。通知内容为截至前一天24时该小程序账号内待处理的交…

AIGC-------AI生成内容如何赋能AR和VR体验?

AI生成内容如何赋能AR和VR体验 引言 增强现实(AR)和虚拟现实(VR)技术近年来蓬勃发展,为用户提供了沉浸式的体验。这些技术已经广泛应用于游戏、教育、医疗、建筑等领域。然而,AR和VR体验的质量与内容的丰富…

zotero安装教程(包括茉莉花插件)

zotero安装教程(包括茉莉花插件) zotero下载(windows)1-安装 Zotero2-安装 Zotero Connector3-安装浏览器插件--jasminum茉莉花功能:插件下载地址:[https://github.com/search?qjasminum&typerepositories](https://github.c…

M|可可西里

title: 可可西里 time: 2024-12-15 周日 rating: 8.5 豆瓣: 8.9 上映时间: “2004” 类型: M剧情犯罪 导演: 陆川 Chuan Lu 主演: 多布杰 Duobujie张垒 Lei Zhang 国家/地区: 中国大陆 片长/分钟: 90分钟 M|可可西里 粗砺的苍凉,沉默的悲壮。…

ArcGIS教程(007):制作中国行政区划图

文章目录 000:数据准备001:利用地理数据制作中国行政区划图000:数据准备 通过网盘分享的文件:ArcGIS教程(007):中国行政区划图教程练习数据.zip 链接: https://pan.baidu.com/s/1nMiRYD-dbv2S0DoeQzR87g?pwd=3535 提取码: 3535001:利用地理数据制作中国行政区划图 ne_…

KeepAlive与RouterView缓存

参考 vue动态组件<Component>与<KeepAlive> KeepAlive官网介绍 缓存之keep-alive的理解和应用 Vue3Vite KeepAlive页面缓存问题 vue多级菜单(路由)导致缓存(keep-alive)失效 vue3 router-view keeperalive对于同一路径但路径…

类与对象以及ES6的继承

认识class定义类 类的声明用的比较多 类与构造函数的异同 类的构造函数 类的实例方法 类的访问器方法 在类里面写拦截方法 类的静态方法 通过类名直接访问 es6类的继承-extends super关键字 子类可以重写父类方法包括父类的静态方法也可以继承父类的静态方法 babel可以将新的代…

AI监控赋能健身馆与游泳馆全方位守护,提升安全效率

一、AI视频监控技术的崛起 随着人工智能技术的不断发展,AI视频监控正成为各行业保障安全、提升效率的关键工具。相比传统监控系统,AI技术赋予监控系统实时分析、智能识别和精准预警的能力,让“被动监视”转变为“主动防控”。 二、AI监控应用…

嵌入式学习(18)-stm32F407串口接收空闲中断+DMA

一、概述 在一些一次性接收大批量数据的引用场合,如果使用接收中断会频繁的进入接收中断影响代码的运行效率。为了解决这个问题可以使用串口的空闲中断DMA实现。 二、应用 在网上招了一些例程在STM32F407的平台上都没有跑通会出现各种异常,主要原因还…