Nginx实战

article/2025/6/9 23:34:32

更多推荐阅读:

前端性能&异常分析排查流程-CSDN博客

关于列表性能分析与标准-CSDN博客

Fullcalendar常用功能介绍-CSDN博客


目录

Nginx介绍

下载和安装

实战分享

场景一、localhost代理线上环境

场景二:通过本地路径访问其他域名的地址信息

防盗链功能


Nginx介绍

当多个客户端同时访问一个服务器时,服务器会爆掉,需要有多台服务器来承担工作,这个时候nginx可以让客户端在访问同一个域名的时候,无感知的访问不同服务器。

几个概念:

1、正向代理例子(VPN):正向代理就是代理客户端,正向代理服务器是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求,并将获得的内容返回给客户端。例如VPN可以将本地代理到香港,从而访问外国的信息。

2、反向代理例子(百度),反向代理就是代理服务器端,用户通过百度一下,你就知道访问百度,这个时候肯定不是访问同一个服务器,而是通过nginx来转发和控制服务器,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端。

3、负载均衡:nginx应用场景之一就是负载均衡。在访问量较多的时候,可以通过负载均衡,将多个请求分摊到多台服务器上,相当于把一台服务器需要承担的负载量交给多台服务器处理,进而提高系统的吞吐率;另外如果其中某一台服务器挂掉,其他服务器还可以正常提供服务,以此来提高系统的可伸缩性与可靠性。

nginx实现负载均衡-CSDN博客

下载和安装

正常来说nginx都是在linux中使用,因为不可能叫运维给你一台主机放在角落当一个服务器(笑),但是接下来因为能力有限都是使用windows版本。

在Nginx的官网的下载页面中(nginx: download),就展示了当前Nginx版本,并提供了下载的连接

重点目录和文件如下:

  • 配置nginx.conf
#user指定Nginx Worker进程运行用户以及用户组,默认由nobody账号运行。
#user  nobody;#worker_processes指定了Nginx要开启的进程数。每个Nginx进程平均耗费10M~12M内存。建议指定和CPU的数量一致即可。
worker_processes  1;#error_log用来定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、crit可供选择,
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#用来指定进程pid的存储文件位置
#pid        logs/nginx.pid;#events:设定Nginx的工作模式及连接数上限:
#值得注意的是如果你不知道Nginx该使用哪种轮询方法的话,它会选择一个最适合你操作系统的。
#最大客户端连接数由worker_processes和worker_connections决定,即Max_client=worker_processes*worker_connections。
#在作为反向代理时,max_clients变为:max_clients = worker_processes * worker_connections/4。
#进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令“ulimit -n 65536”后worker_connections的设置才能生效。
events {
    worker_connections  1024;
}http {
  	 #文件扩展名与类型映射表:实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度。类似于Apache中的include方法。
    include       mime.types;
    #这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置PHP环境时,Nginx是不予解析的,此时,
    #用浏览器访问PHP文件就会出现下载窗口
    default_type  application/octet-stream;    ##设置日志模式
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';    #用来指定此虚拟主机的访问日志存放路径,最后的main用于指定访问日志的输出格式;
    #access_log  logs/access.log  main;    #sendfile参数用于开启高效文件传输模式,将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞;
    sendfile        on;
    #激活tcp_nopush参数可以允许把httpresponse header和文件的开始放在一个文件里发布,积极的作用是减少网络报文段的数量;
    #tcp_nopush     on;    #设置客户端连接保持活动的超时时间。在超过这个时间之后,服务器会关闭该连接,单位是"秒";
    #keepalive_timeout  0;
    keepalive_timeout  65;    #开启gzip压缩功能
    #gzip  on;    #反向代理负载均衡配置部分
    upstream chenziyi {
        server 127.0.0.1:8081;
    }
    server {
     		#监听端口 
        listen       803;
        #服务器名称
        server_name  127.0.0.1;        #Charset用于设置网页的默认编码格式
        #charset koi8-r;        #access_log  logs/host.access.log  main;        #添加头部信息
        proxy_set_header Cookie $http_cookie;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        #匹配客户端请求url
        location / {
            # 指定静态资源根目录
            root   html;
            # 指定默认首页
            index  index.html index.htm;
            proxy_pass http://chenziyi;
        }
    }
}

用cmd打开,运行`nginx.exe`运行nginx环境

基础命令:

nginx -s reopen #重启Nginxnginx -s reload #重新加载Nginx配置文件,然后以优雅的方式重启Nginxnginx -s stop #强制停止Nginx服务nginx -s quit #优雅地停止Nginx服务(即处理完所有请求后再停止服务)nginx -t #检测配置文件是否有语法错误,然后退出nginx -?,-h #打开帮助信息nginx -v #显示版本信息并退出nginx -V #显示版本和配置选项信息,然后退出nginx -t #检测配置文件是否有语法错误,然后退出nginx -T #检测配置文件是否有语法错误,转储并退出nginx -q #在检测配置文件期间屏蔽非错误信息nginx -p prefix #设置前缀路径(默认是:/usr/share/nginx/)nginx -c filename #设置配置文件(默认是:/etc/nginx/nginx.conf)nginx -g directives #设置配置文件外的全局指令killall nginx #杀死所有nginx进程

实战分享

场景一、localhost代理线上环境

目前七巧低代码中通过localhost访问线上的原理如下:

第一步:定义几个环境的地址,通过npm run dev的时候选择不同的地址

第二步,定义api中的基础url,并在每次定义接口的时候都加上前缀

第三步,配置接口地址,例如定义了一个接口地址是`/qiqiao2/console/api/v1/bpms-runtime`改成’http://127.0.0.1:8080/qiqiao2/console/api/v1/bpms-runtime‘

第四步,利用koa代理,把接口地址代理到https://qiqiao-tcb-qa.qiweioa.cn/qiqiao2/console/api/v1/bpms-runtime

还有一种方式把代理方式就是用nginx代替koa


#user  nobody;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {
    worker_connections  1024;
}http {
    include       mime.types;
    default_type  application/octet-stream;    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';    #access_log  logs/access.log  main;    sendfile        on;
    #tcp_nopush     on;    #keepalive_timeout  0;
    keepalive_timeout  65;    #gzip  on;
    upstream chenziyi {
        server 127.0.0.1:8081;
    }
    server {
       	#监听端口    
        listen       803;
        server_name  127.0.0.1;        #charset koi8-r;        #access_log  logs/host.access.log  main;        #添加头部信息
        proxy_set_header Cookie $http_cookie;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://chenziyi;
            # rewrite "^qiqiao2/console/api/v1" / break;
        }
        location /qiqiao2/runtime/api/v1 {
            # root   html;
            # index  index.html index.htm;
            proxy_pass https://qiqiao-tcb-qa.qiweioa.cn/qiqiao2/runtime/api/v1;
        }
        location /qiqiao2/runtime/api/v1/bpms-runtime {
            # root   html;
            # index  index.html index.htm;
            proxy_pass https://192.168.21.60:8103;
            rewrite "^qiqiao2/runtime/api/v1" / break;
        }
    }
}

场景二:通过本地路径访问其他域名的地址信息

  • 假设前端需要预览365office的文件
https://ow365.cn/owview/wv/wv.aspx?WOPISrc=http%3A%2F%2Foosh%2Fwopi%2Ffiles%2F%40%2Fwopi%3FvId%3DmZTIcFeO_l_q2spFMvsHXw--&bs=cWlxaWFvLXRjYi1xYS5xaXdlaW9hLmNuLjQ0M1wxNjYyNjE2NzA2OTk3NjgzNTYzMzA3MjU5OTYxMzQ0MF*ljp*lnotVSeeov_abtOaWsOmXrumimC5kb2N4&token=KATwAnuH*YK9XiDaIr1EH8ZbB25EOGW8&cancopy=
  • 但因为跨域的问题 我们想要用这个域名替换
https://localhost:803/qiqiao2/runtime/office365/
替换
https://ow365.cn
  • 实现
https://localhost:803/qiqiao2/runtime/office365/owview/wv/wv.aspx?WOPISrc=http%3A%2F%2Foosh%2Fwopi%2Ffiles%2F%40%2Fwopi%3FvId%3DmZTIcFeO_l_q2spFMvsHXw--&bs=cWlxaWFvLXRjYi1xYS5xaXdlaW9hLmNuLjQ0M1wxNjYyNjE2NzA2OTk3NjgzNTYzMzA3MjU5OTYxMzQ0MF*ljp*lnotVSeeov_abtOaWsOmXrumimC5kb2N4&token=KATwAnuH*YK9XiDaIr1EH8ZbB25EOGW8&cancopy=

防盗链功能

nginx防盗链功能_nginx 判断图片后缀为gif-CSDN博客

Nginx设置Referer来防止盗图的实现方法(头部网站) - YINGSOO

防盗链功能,简单来说就是你可以直接访问该资源,但是不能将我的资源链接放到你自己的服务器上让别人访问,尤其是图片或视频这种比较大的文件,容易导致服务器响应速度缓慢。

#user  nobody;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {
    worker_connections  1024;
}http {
    include       mime.types;
    default_type  application/octet-stream;    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';    #access_log  logs/access.log  main;    sendfile        on;
    #tcp_nopush     on;    #keepalive_timeout  0;
    keepalive_timeout  65;    #gzip  on;
    upstream chenziyi {
        server 127.0.0.1:8081;
    }
    server {
        listen       803;
        server_name  127.0.0.1;        #charset koi8-r;        #access_log  logs/host.access.log  main;        #添加头部信息
        proxy_set_header Cookie $http_cookie;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        location /qiqiao2/runtime/office365/ {
            root   html;
            index  index.html index.htm;
            proxy_pass https://ow365.cn/;
            proxy_set_header Referer https://ow365.cn;
        }        # location /qiqiao2/runtime/img {
        #     proxy_pass https://ow365.cn/img;
        #     proxy_set_header Referer https://ow365.cn;
        # }
    }
}

作者:道一云低代码

作者想说:喜欢本文请点点关注~

更多资料分享


http://www.hkcw.cn/article/kVCDAeIWoI.shtml

相关文章

java实用类

文章目录 SystemSystem.exit(int status);currentTimeMillis String 类String两种创建方式String提供的常用方法 Runtime作用演示 Object类常用方法重写 toString()重写 equals() 和 hashCode() BigInter类BigInter 构造方法常用方法演示 BigDecimal类常见构造器常用方法演示 S…

windows安装多个版本composer

一、需求场景 公司存在多个项目,有的项目比较老,需要composer 1.X版本才能使用 新的项目又需要composer 2.X版本才能使用 所以需要同时安装多个版本的composer二、下载多个版本composer #composer官网 https://getcomposer.org/download/三、放到指定目…

【域控制器EMC】域控制器EMC设计总结

一:总结 汇总项目设计当中关于EMC的设计要点,主要从原理设计、Layout、结构、外设部分总结。 满足要求的器件和合理的电路能降低电磁干扰; 正确的布局、接地、信号路径、屏蔽等可以减少电磁辐射。 结构件设计也会对EMC性能产生影响 二&a…

01 RK3568调试4G 模块 EG800AK-CN

1、添加pid、vid信息 为了识别模块,需将模块的VID和PID信息添加到[KERNEL]/drivers/usb/serial/option.c文件中,对应的VID和PID下图所示:EG800AK参考EC800M static const struct usb_device_id option_ids[] { #if 1 //此处为添加的代码&a…

Redis底层数据结构之跳表(SkipList)

SkipList是Redis有序结合ZSet底层的数据结构,也是ZSet的灵魂所在。与之相应的,Redis还有一个无序集合Set,这两个在底层的实现是不一样的。 标准的SkipList: 跳表的本质是一个链表。链表这种结构虽然简单清晰,但是在查…

Modbus转ETHERNET IP网关:快速冷却系统的智能化升级密钥

现代工业自动化系统中,无锡耐特森Modbus转Ethernet IP网关MCN-EN3001扮演着至关重要的角色。通过这一技术,传统的串行通讯协议Modbus得以在更高速、更稳定的以太网环境中运行,为快速冷却系统等关键设施的自动化控制提供了强有力的支撑。快速冷…

C# 中的对话框与导航:构建流畅用户交互的完整指南

在现代应用程序开发中,良好的用户交互体验是成功的关键因素之一。作为.NET开发者,熟练掌握C#中的对话框与导航技术,能够显著提升应用程序的易用性和专业性。本文将全面探讨Windows Forms、WPF、ASP.NET Core和MAUI等平台下的对话框与导航实现…

鸿蒙生态再添翼:身份证银行卡识别引领智能识别技术新篇章

随着信创国产化战略的深入推进和鸿蒙操作系统(HarmonyOS Next)的迅速崛起,市场对兼容国产软件生态的需求日益增长。在这一背景下,中安身份证识别和银行卡识别技术应运而生,为鸿蒙生态的发展注入了新的活力。 移动端身份…

3步在小米13手机跑DeepSeek R1

大家好!我是羊仔,专注AI工具、智能体、编程。 一、从性能旗舰到AI主机 春节大扫除时,翻出尘封的小米13,这台曾以骁龙8 Gen2著称的性能小钢炮,如今正在执行更科幻的使命——本地运行DeepSeek R1。 想起两年前用它连续肝…

Unity ARPG战斗系统 _ RootMotion相关知识点

1.作用 : 避免动画播放与实际位移产生偏差,从而避免"滑步"现象。 2.基本原理 : Root Motion通过相对位移和转角来移动游戏角色,而不是像动画文件会直接修改每一帧里对象的坐标值和角度值。 3.OnAnimation( ) : 是将Root Motion控制权交给开发者,通过脚本来控制(关于…

Express 集成Sequelize+Sqlite3 默认开启WAL 进程间通信 Conf 打包成可执行 exe 文件

代码:express-exe: 将Express开发的js打包成exe服务丢给客户端使用 实现目标 Express 集成 Sequelize 操作 Sqlite3 数据库; 启动 Sqlite3 时默认开启 WAL 模式,避免读写互锁,支持并发读; 利用 Conf 实现主进程与 Ex…

无人机巡检智能边缘计算终端技术方案‌‌——基于EFISH-SCB-RK3588工控机/SAIL-RK3588核心板的国产化替代方案‌

一、方案核心价值‌ ‌实时AI处理‌:6TOPS NPU实现无人机影像的实时缺陷检测(延迟<50ms)‌全国产化‌:芯片、操作系统、算法工具链100%自主可控‌极端环境适配‌:-40℃~85℃稳定运行,IP65防护等…

蓝桥杯国赛训练 day1

目录 k倍区间 舞狮 交换瓶子 k倍区间 取模后算组合数就行 import java.util.HashMap; import java.util.Map; import java.util.Scanner;public class Main {static Scanner sc new Scanner(System.in);public static void main(String[] args) {solve();}public static vo…

Monorepo 详解:现代前端工程的架构革命

以下是一篇关于 Monorepo 技术的详细技术博客,采用 Markdown 格式,适合发布在技术社区或团队知识库中。 🧩 深入理解 Monorepo:现代项目管理的利器 在现代软件开发中,项目规模日益庞大,模块之间的依赖关系…

Vue 树状结构控件

1、效果图如下所示&#xff1a; 2、网络请求的数据结构如下&#xff1a; 3、新建插件文件&#xff1a;menu-tree.vue&#xff0c;插件代码如下&#xff1a; <template><div class"root"><div class"parent" click"onParentClick(pare…

【VLAs篇】01:GROOT N1—面向通用人形机器人的开放基础模型

栏目内容论文标题GROOT N1: 一个面向通用人形机器人的开放基础模型 (GROOT N1: An Open Foundation Model for Generalist Humanoid Robots)作者/机构NVIDIA关键词人形机器人 (Humanoid Robots), 基础模型 (Foundation Model), 视觉-语言-动作模型 (VLA), 双系统架构 (Dual-Sys…

【摘录】显示屏购买要注意的参数

4K显示器是指具备4K分辨率的显示器设备。4K的名称来源于其横向解析度约为4000像素&#xff0c;分辨率有3840x2160和40962160像素2种超高分辨率规格。相比主流的1080P全高清分辨率&#xff0c;4K显示器增加数百万个像素点&#xff0c;画面的精细程度及显示品质有质的飞跃。 将屏…

C++语法系列之特殊类设计

一、请设计一个类&#xff0c;不能被拷贝 其实就是防止拷贝构造和赋值运算符的重载&#xff0c;这个在C11中讲了&#xff0c;在C98之前可以声明为private&#xff0c;现在直接等于delete就可以了 //C98 class A { public:A(){} private:A(const A& a);A& operator(co…

网络安全厂商F5推出AI Gateway,化解大模型应用风险

AI正以前所未见的速度重塑数字化体验。然而&#xff0c;企业在加速落地现代化数字体验的过程中&#xff0c;其在保障和交付AI应用方面仍面临严峻挑战。这些应用需处理海量数据&#xff0c;涉及复杂流量模式&#xff0c;并引入更高级的安全威胁&#xff0c;而企业当前的安全能力…

调用.net DLL让CANoe自动识别串口号

1.前言 CANoe9.0用CAPL控制数控电源_canoe读取程控电源电流值-CSDN博客 之前做CAPL通过串口控制数控电源&#xff0c;存在一个缺点&#xff1a;更换电脑需要改串口号 CSDN上有类似的博客&#xff0c;不过要收费&#xff0c;本文根据VID和PID来自动获取串口号&#xff0c;代码…