简述Nginx应用场景(前后端)

当我们开发 vue 项目中可以通过 proxyTable 进行跨域,但如果是原生的 html+css+js ,或者其他没有跨域插件的项目中,想要跨域就要引入配置许多的外部包,整个流程操作起来耗时耗力耗资源,这时应用场景就很适合 Nginx 出场了。

 Nginx 通用性很强,甚至可以为一个简单的html项目开启服务并实现 http 代理,但是这种应用场景一般存在服务器中由后端开发人员来控制。并且也可以同时代理多个来自不同域名的服务,近年来后端热门的微服务概念就可以通过Nginx服务实现。nginx也可以通过反向代理将本地文件的引用指向远程服务器中的某一文件,后端开发应该都已经很熟悉这个工具。

前端的应用场景不需要这么复杂,只需要在没有且不需要引入proxyTable这样的插件时想起Nginx这一工具即可,因为当前端项目打包与后端服务放在生产环境的同一服务器中,便不存在跨域理念,所以我们只需要在本地能够调用接口服务保证自己的页面没问题就可以了,Nginx的灵活性也体现在此。


Nginx配置 - ./nginx-1.6.0-ems/conf/nginx.conf

 1 #user  nobody;
2 worker_processes 4;
3 #error_log logs/error.log;
4 #error_log logs/error.log notice;
5 #error_log logs/error.log info;
6
7 #pid logs/nginx.pid;
8
9
10 events {
11 worker_connections 1024;
12 }
13
14
15 http {
16 include mime.types;
17 default_type application/octet-stream;
18
19 #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
20 # '$status $body_bytes_sent "$http_referer" '
21 # '"$http_user_agent" "$http_x_forwarded_for"';
22
23 #access_log logs/access.log main;
24
25 sendfile on;
26 #tcp_nopush on;
27
28 #keepalive_timeout 0;
29 keepalive_timeout 65;
30
31 #gzip on;
32
33 include E:/nginx-1.6.0-ems/conf/my_system_v4.conf;
34 }

行2   工作进程数 默认 - 1,可依据电脑的配置,开任务管理器 -> 性能 看到CPU配置,如电脑是双核4线程CPU,就可以设置为4,启动Nginx后打开任务管理器,Nginx共启动了5个进程,我一直以为应该是4个进程,这里我也不太清楚为什么有5个进程,猜测是多出一个主程序进程。

行11 单个工作进程可以允许同时建立外部连接的数量,数字越大能同时处理的连接越多,默认 - 1024,如有需要可依据配置调大到 - 100000。worker_connections的配置有两个指标:

1) 内存 - 每个连接分别对应一个read_event、一个write_event事件,两个事件占用96字节,一个连接数大概占用232字节,总计328 byte,因此,100k 连接数 * 328 byte / 1024 / 1024 = 31 M,这只是nginx启动时connections连接数所占用的。

2) 进程最大可打开文件数 - 进程最大可打开文件数受限于操作系统,通过 ulimit -n 命令查询,以前是1024,现在是65535.

行33 内文件的代码也可以直接写在 nginx.conf 中,分开是为了在开发多个项目时通过引入不同文件能够快速切换代理链接。


Nginx配置 - ./nginx-1.6.0-ems/conf/my_system_v4.conf

 1 # 负载均衡
2 upstream my-sys-pool {
3 server localhost:8787;
4 }
5 server {
6 listen 9920;
7 server_name localhost;
8 client_max_body_size 10m;
9 location ^~ /saveTemp/ {
10 proxy_pass http://218.***.***.***:8080;
11 proxy_set_header HOST $host;
12 proxy_set_header X-Real-IP $remote_addr;
13 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
14 proxy_cache_key $host$uri$is_args$args; }
15
16 # html
17 location ~ \.(html|gif|jpg|jpeg|png|bmp|swf|eot|svg|ttf|woff|js|css|json|txt|xml|pdf|mp4|mp3)$ {
18 #root E:/workSpace/myProject;
19 proxy_pass http://localhost:8686;
20 proxy_set_header X-Real-IP $remote_addr;
21 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
22 proxy_cache_key $host$uri$is_args$args;
23 }
24
25 location ^~ /my-sys/ {
26 proxy_pass http://218.***.***.***:8080;
27 proxy_set_header HOST $host;
28 proxy_set_header X-Real-IP $remote_addr;
29 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
30 proxy_cache_key $host$uri$is_args$args;
31 }
32 }

行6   是代理成功后的地址,也就是说假设project运行在localhost的8686端口,这时9920应该是无服务项目的,访问结果是localhost拒绝我们的访问请求。而8686端口因为请求的是其他服务器的api,虽然页面和样式成功渲染,但api请求一直是pending直到请求超时,通过Nginx成功代理后访问9920端口则会成功返回调用正确接口的project项目。

行9   内代码块作用是重定向本地文件地址,当页面请求本地文件夹 /saveTemp目录中文件时,重定向至请求218.***.***.***:8080的同路径文件。这样请求的就是服务器中文件而不是本地文件,浏览器地址栏仍显示本地 /saveTemp。

行17*   作用是将 8686端口 的服务中转代理到 9920端口,在运行项目时不通过 localhost:8686 而是运行 localhost:9920 即可。

行18   为本地静态资源启动服务.

行25   将/my-sys这个开头的接口请求代理到http://218.***.***.***:8080.

- END -


查看我的另一篇文章:Nginx:常用基本命令与异常处理

Nginx:多项目开发配置跨域代理的更多相关文章

  1. eclipse加速/Nginx配置跨域代理

    下班时间到啦! --下班都是他们的,而我,还是什么都没有. eclipse加速 去掉包含js文件的包的js验证,否则每次启动都需要进行校验(右击项目->properties) Nginx配置跨域 ...

  2. vue-cli配置跨域代理

    现在使用vue大多使用了前后端分离模式,因此游览器经常显示跨域失败的信息,现在跨域的方式很多种,主要分两大类,ajax跨域,dom跨域,具体的方法就不例举啦. vue-cli作为一个强大的脚手架,内置 ...

  3. nginx配置跨域、gzip加速、代理详细讲解

    1.配置跨域 这个很简单,直接打开配置nginx.conf ,在http下配置下面三行代码:当然如果你是想某一个虚拟主机下跨域,那就在哪个server下面添加 add_header Access-Co ...

  4. 使用 Nginx 部署前后端分离项目,解决跨域问题

    前后端分离这个问题其实松哥和大家聊过很多了,上周松哥把自己的两个开源项目部署在服务器上以帮助大家可以快速在线预览(喜大普奔,两个开源的 Spring Boot + Vue 前后端分离项目可以在线体验了 ...

  5. vue-cli 前端开发,后台接口跨域代理调试问题

    使用 webpack的方式开发的时候,前台开发过程中需要调用很多后台的数据接口,但是通常前后台分离的开发方式,后台的接口数据很可能是不方便或者是不能在前端同学的电脑上运行的,也就出现了所谓的跨域问题. ...

  6. Nginx 跨域代理

    安装环境: win10 nginx-1.17.2 安装: 在写前端调用后台接口时,报了跨域的错误. 调试地址:http://localhost:5500/demo/encAjax.html 接口地址: ...

  7. vue开发环境配置跨域,一步到位

    本文要实现的是:使用vue-cli搭建的项目在开发时配置跨域,上线后不做任何任何修改,接口也可以访问,前端跨域解决方案 production:产品 生产环境 development:开发 开发环境 1 ...

  8. Next.js 配置接口跨域代理转发

    使用 create-next-app 创建的 Next.js 项目配置接口跨域代理转发需要用到 custom server 功能. 先安装好 express 和 http-proxy-middlewa ...

  9. NGINX: 配置跨域请求

    说明: 内容全部来自 SegmentFault Developer Nginx 配置跨域请求 跨域请求失败, nginx 报错: 403 No 'Access-Control-Allow-Origin ...

随机推荐

  1. WinForm设置任务栏托盘程序

    程序设计界面如下图所示: 1.在程序初始化加载的时候设置程序图标,具体code如下: private void Form1_Load(object sender, EventArgs e) { //t ...

  2. ABP框架使用Oracle数据库,并实现从SQLServer中进行数据迁移的处理

    ABP框架的数据访问底层是基于EFCore(Entity Framework Core)的,是微软标志性且成熟的ORM,因此它本身是支持多种主流数据库MySQL,SqlServer,Oracle,SQ ...

  3. Notes about BSD

    FreeBSD: mainly for web server; OpenBSD: mainly for security concerned server;

  4. 问题求解与程序设计(C重新回顾:个人版)一

    一.容易遗忘之转义字符 转义序列 含义 \n 换行 \t 水平制表 \\ 输出反斜杠 \a 响铃符 \'' 输出双引号 \' 输出单引号 \? 输出问号 \r 输出回车符(不换行,光标定位当前行的开始 ...

  5. 【XSS-labs】level 6-10

    Level 6 查看源码:对URL中的传参进行了HTML实体化转义,搜索框中的值对 src\onxxxxx\data\href进行了限制. 采用大小写绕过,在搜索框输入payload,注意闭合inpu ...

  6. Linux搭建SQL server服务器

    我们知道在Linux下安装服务有很多方式,最为简单的也就是yum安装,但是很多服务通过yum是无法安装的,如果想使用yum安装,需要指定yum安装仓库,我们今天需要安装MSQL Server,所以需要 ...

  7. 3 分钟了解 JSON Schema

    大家好,我不是鱼皮. 幸运又不幸,我是一名程序员,他也是一名程序员. 周末,我在开发网站,他在开发游戏,两个人一起写代码,一起写 Bug 头秃,竟也有了一丝别样的浪漫,好不自在! 今天,他遇到了一个后 ...

  8. JIT-动态编译与AOT-静态编译:java/ java/ JavaScript/Dart乱谈

    C 和 C++ 之类的编译语言性能远超Java,但是生成的代码只能在有限的几种系统上执行,这就有了Java的存在基础(JVM-跨平台) 早期 Java 运行时所提供的性能级别远低于 C 和 C++ 之 ...

  9. map中使用箭头函数遇到的坑

    箭头函数提供了更简洁和更短的语法,其中一个可用功能是可以将函数编写为具有隐式返回值的lambda表达式.这对于功能样式代码很方便,比如使用函数映射数组: const numbers = [1,2,3, ...

  10. springboot项目中进行XSS过滤

    简单介绍 XSS : 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意 ...