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

Nginx实战

更多推荐阅读:

前端性能&异常分析排查流程-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.lqws.cn/news/106201.html

相关文章:

  • 各个主要目录的功能 / Linux 常见指令
  • 词语翻译的三步法与背后的语言学思维
  • 技巧小结:外部总线访问FPGA寄存器
  • 【25.06】fabric进行caliper测试加环境部署
  • 嵌入式系统:从技术原理到未来趋势(驱动程序篇)
  • 预览pdf(url格式和blob格式)
  • Python Day42
  • xmake的简易学习
  • 一、无参数的函数调用- RSP,EAX寄存器,全局变量,INT类型和MOV,INC,SHL指令
  • Python中os模块详解
  • Spring Boot 自动配置原理:从入门到精通
  • webstrom中git插件勾选提交部分文件时却出现提交全部问题怎么解决
  • UGUI Text/TextMeshPro字体组件
  • Activity
  • 6.3本日总结
  • agent mode 代理模式,整体要求,系统要求, 系统指令
  • ABP-Book Store Application中文讲解 - Part 7: Authors: Database Integration
  • 『uniapp』把接口的内容下载为txt本地保存 / 读取本地保存的txt文件内容(详细图文注释)
  • WPS word 已有多级列表序号
  • 免费批量文件重命名软件
  • AI健康小屋+微高压氧舱:科技如何重构我们的健康防线?
  • KITTI数据集(计算机视觉和自动驾驶领域)
  • mobilnet v4 部署笔记
  • go语言基础|slice入门
  • C语言学习—数据类型20250603
  • 2025.6.3总结
  • Jpom:Java开发者的一站式自动化运维平台详解
  • Java编程之建造者模式
  • 深度学习入门Day2--鱼书学习(1)
  • 【Typst】4.导入、包含和读取