nginx常用配置(开启一个简单的服务,并为其配置反向代理,负载均衡,允许跨域等)

nginx就是负责帮我们开启服务的工具,我们知道一个服务(程序) 对应监听一个端口 .我们有些静态资源例如打包后的静态资源 自身没办法开启服务,当然你也可以用node帮他开一个服务。所以我们就需要使用nginx来为其开启一个服务,每个服务都需要运行在唯一的端口上,这样每当我们访问该端口时,就会访问到该服务,然后通过该服务的配置找到对应的资源文件。
比如我们用node开启一个服务,然后node的服务就可以监听某个端口。然后我们使用node开放静态资源目录,将打包后的资源放到该开放的静态资源目录下,用户一样可以通过访问node监听的这个端口去访问node开启的这个服务,然后直接获取静态资源目录下的打包资源。这样也可以,当然一般时候我们部署项目打包后的静态资源 还是使用nginx,因为nginx帮我们开启一个服务只需要在其配置文件中加一个属性 server{ }然后在其中配置下该服务的端口啊,以及对应的资源啊 就行了

当我们访问服务器某个端口时,nginx找到该端口对应的服务 然后映射到我们服务 对应的资源文件。

例如我们配置一个nginx的服务,该服务监听50端口,然后该端口对应得映射地址为某某某路径下得某某某文件,那么我们访问该端口时,nginx就会帮我们找到该文件。浏览器这个时候就能访问到我们服务器上的这个文件了。不然浏览器咋知道这个文件在哪里。一旦浏览器访问到了这个文件,那么浏览器就会进行解析,如果是html文件就会展示在页面上给用户看,如果是png,pdf等文件也可以通过浏览器等插件展示在页面上给用户看

当然我们也可以使用node 开启一个服务然后使用 express框架创建一个服务器对象app 然后使用该对象自己监听端口。这样就不需要再nginx中配置监听端口,用户也能访问该端口来访问到我们用node启动的服务,

例如我们一般会用node写接口,我们写好的接口,因为这个app对象已经帮我们监听了某端口,我们只要使用pm2 启动该node服务,客户端就直接能调用该接口了。

你像我们平时开发好后单页面应用的项目打包后有一个html文件,为了让世界上所有用户能够访问到我们开发的html文件,所以我们要将这个html放在我们自己的服务器上,只要用户能够访问到我们服务器上的这个html文件,那么浏览器通过解析这个html文件就可以展示给用户看。
用户怎么样才能访问到这个文件呢,为了能让用户访问到该文件,我们需要在我们服务器中开启并配置一个nginx服务监听 某 端口然后映射该文件在服务器上的位置。用户通过访问我们服务器的ip和指定端口,就能找到服务器上nginx帮我们配置好的这个端口映射的文件的位置,浏览器就能访问到该文件了

(如果用户需要拿多个文件,我们可以配置多个nginx服务来监听多个端口并映射多个文件在服务器上的位置,用户通过访问不同端口访问不同文件) (另一种方法是开启一个node服务 然后使用node服务开启一个静态资源目录,用户通过访问该node服务监听的端口 加文件名就能访问到该静态资源目录中的文件)

这样当我们用户访问服务器这个端口时,nginx就会根据该端口映射的文件位置。客户端,客户端浏览器就能访问到我们服务器上的文件了。
这样客户端就能访问到服务器上的文件了。所谓的部署部署,说简单一点就是让我们放在服务上的html文件,用户客户端浏览器能访问到。只要浏览器能访问到这个html文件浏览器就会解析然后用户就能在浏览器上看到我们开发的页面。浏览这样服务器上的html页面就能展示给用户了。我们知道了这个原理后,也可以配置nginx服务映射各种各样文件,这样客户端就能拿到这些文件了。
例如我们配置 1010端口 映射xxx.mp3文件,当用户访问服务器的1010端口时,nginx根据该端口映射出的文件在该服务器上的位置。然后浏览器根据该文件的位置就能访问到该服务器上的文件

如何新增一个nginx服务呢,首先我们找到nginx.conf这个nginx的配置文件,然后里面加一个
server
    {
        listen 3535;  //监听对应的端口
        server_name _; //固定格式
        
        location / {    //当客户端访问服务器3535端口的 / 地址时 会找到服务器/www/resources地址中的index.html文件 然后返回给客户端
            root  文件再服务器的位置例如 /www/resources;  
            index 文件名例如index.html;
        }
    }

最后我们还需要配置服务器的防火墙放行该端口 不然用户是访问不了该端口的(关闭防火墙用户就能访问所有端口,这样是不安全的。所以防火墙为了服务器安全默认只放行固定几个端口,如需放行其他端口需要自行配置)。哦对了为了防止用户关闭防火墙或者对防火墙乱操作导致影响系统安全,我们购买服务器时在其控制台中还需要配置安全组,将该端口放行。
所以我一般为了方便直接在控制台 安全组中配置放行全部端口,然后关闭防火墙。


最后强调一点 改完nginx配置 不能像其他的程序服务 一样通过systemctl restart 服务名/程序名 重启 ,因为nginx本身是一个服务 然后他又会帮你开启你在nginx配置文件中配置的那些服务,所以你改完nginx的配置 只能通过nginx -s reload 命令重载nginx 配置文件 

如果你不小心在nginx服务还没关的时候重启,那么 就如同我说的那样 nginx 就会帮你又开启一些 你在nginx中配置的那些服务,本身那些服务占用了端口还没关,你又开,这个时候就起冲突了。你可以通过ps -ef|grep nginx 看看nginx开启了哪些服务 占用了哪些进程以及端口 ,然后使用 ps -ef|grep nginx|awk '{print $2}'|xargs kill  命令将这些进程全部杀死。这个时候再启动nginx就行了。

你像其他一般的服务,例如 jenkins 等改完配置文件直接systemctl restart jenkins重启就行了。防火墙也可以在未关闭的时候使用重启命令,但是如果添加了防火墙开放端口直接重启不会生效必须使用 firewall-cmd --reload重新加载一遍才行


/*-----------------------------------------------------------nginx进阶--------------------------------------*/


//如何配置nginx反向代理 
首先我们配置代理,也是需要开一个服务的具体配置如下
server
    {
        listen 5858;   //这里我们开启了一个跑在5858端口的服务
        server_name baidu;
        
        location / {
            proxy_pass http://www.baidu.com; //配置这个就代表该服务已经代理了这个地址,当浏览器访问这个nginx服务时,这个nginx服务就会转发到代理的这个地址页面,就是重定向的意思
        }
    }



//配置nginx负载均衡。
为什么我们需要为服务开启负载均衡
你想想当某个服务如果同时收到多个请求访问,那么压力是不是很大,我们就想能不能将这么多的请求有规划的分配给其他服务一起承担。好的这就诞生了负载均衡


负载均衡一般都是和代理一起配置.  因为需要通过配置该服务的反向代理 代理这个负载均衡组,从而达到该服务实现负载均衡。具体解释看下面的配置与注释

配置某个服务开启负载均衡需要先创建 负载均衡组 。组中有一些服务,当我们访问A服务时,如果A服务配置了代理,而代理是一个负载均衡组,那么当浏览器过多访问A服务时,就会将一些访问均衡分配到 负载均衡组中的每个服务。举例说明
例如我们首先开启四个服务 ABCD四个服务。然后我们创建一个负载均衡组,并将B,C,D三个服务配置到该组中,并给每个服务器的权重为相等。我们配置A服务为代理服务,代理的就是这个负载均衡组。那么当有多个请求访问A服务时,因为代理的是负载均衡组,所以最终访问的是负载均衡组中的服务,但是负载均衡组中有那么多服务,我们怎么指定该请求访问的是哪个服务呢,还记得我们之前给每个负载均衡组中的每个服务配置的权重都是一样的吗,那我们就按照权重来指定。若权重相等则随机指定,否则优先指定权重高的服务

好了,具体配置我们看下面

配置负载均衡组是在http模块中进行配置的

http{

 upstream hc { //我们这里创建一个负载均衡组 ,组名为hc
            server 119.23.142.49:3939 weight=1; //该组中有两个服务 权重都为1,这两个服务之后需要被访问,所以需要开启。
            server 119.23.142.49:4242 weight=1;
        }


server
    {
        listen 3939;
        server_name sthj;
        
        location / {
            root /www/sthj/dist;
            index index.html;
        }
    }

server
    {
        listen 4242;
        server_name zhdj;
        
        location / {
            root /www/zhdj/dist;
            index index.html;
        }
    }

server
    { 
        listen 6161; //这里我们开启了一个跑在6161端口的服务
        server_name hcxx;
        location / {
            proxy_pass http://hc; //我们这里做了反向代理,   格式如果按照后面这样写 http://负载均衡组名  那么代理的就是这个我们之前配置好的负载均衡组
          /*解释一下,当请求访问 6161端口的这个服务时,其实访问的是我们这个负载均衡组,负载均衡组根据里面每个服务的权重,决定这次请求具体是访            问哪个服务。请求的步骤流程大概如下。
         浏览器发起一个服务器6161端口的请求----->找到运行在服务器6161端口的服务---->发现是一个代理服务----->找到代理服务地址----->发现是一个负载均衡组----->根据负载均衡的配置规则,最终决定访问组中其中某个服务。


	因为我们上面配置的负载均衡组中有两个服务,权重都是1,所以当请求访问6161端口的服务时,最终随机访问负载均衡组中两个服务的其中一个服务
	
        */



        }
    }



}

3.有时候我们部署的前端项目与后端部署的接口进行联调时会出现跨域问题,如果是开发阶段我们可以通过配置vue.config.js或者webpack中的代理来解决跨域。但是生产阶段已经部署上线之后如何解决这个跨域问题呢,如果我们使用nginx来部署项目的话,可以通过nginx来解决这个问题
下面这个例子我们可以看到,我将/home/foodie-shop目录下后端项目文件,运行在nginx开启的90端口服务下。然后给该服务配置一下允许跨域访问。如下如所示
举个例子:例如A域名服务下的项目访问B域名服务下的资源出现了跨域。有两种办法,如果是开发环境,就在A项目中配置代理。如果生产环境,就在B域名服务中配置允许跨域访问。这样A就能访问到B服务中的资源了

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值