Nginx实战

Nginx介绍

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

几个概念:

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

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

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

nginx实现负载均衡-优快云博客

下载和安装

正常来说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 #重启Nginx
 
nginx -s reload #重新加载Nginx配置文件,然后以优雅的方式重启Nginx
 
nginx -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-优快云博客

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;
        # }
    }
}

作者:道一云低代码

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

更多资料分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道一云黑板报

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值