Nginx:多项目开发配置跨域代理
简述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:多项目开发配置跨域代理的更多相关文章
- eclipse加速/Nginx配置跨域代理
下班时间到啦! --下班都是他们的,而我,还是什么都没有. eclipse加速 去掉包含js文件的包的js验证,否则每次启动都需要进行校验(右击项目->properties) Nginx配置跨域 ...
- vue-cli配置跨域代理
现在使用vue大多使用了前后端分离模式,因此游览器经常显示跨域失败的信息,现在跨域的方式很多种,主要分两大类,ajax跨域,dom跨域,具体的方法就不例举啦. vue-cli作为一个强大的脚手架,内置 ...
- nginx配置跨域、gzip加速、代理详细讲解
1.配置跨域 这个很简单,直接打开配置nginx.conf ,在http下配置下面三行代码:当然如果你是想某一个虚拟主机下跨域,那就在哪个server下面添加 add_header Access-Co ...
- 使用 Nginx 部署前后端分离项目,解决跨域问题
前后端分离这个问题其实松哥和大家聊过很多了,上周松哥把自己的两个开源项目部署在服务器上以帮助大家可以快速在线预览(喜大普奔,两个开源的 Spring Boot + Vue 前后端分离项目可以在线体验了 ...
- vue-cli 前端开发,后台接口跨域代理调试问题
使用 webpack的方式开发的时候,前台开发过程中需要调用很多后台的数据接口,但是通常前后台分离的开发方式,后台的接口数据很可能是不方便或者是不能在前端同学的电脑上运行的,也就出现了所谓的跨域问题. ...
- Nginx 跨域代理
安装环境: win10 nginx-1.17.2 安装: 在写前端调用后台接口时,报了跨域的错误. 调试地址:http://localhost:5500/demo/encAjax.html 接口地址: ...
- vue开发环境配置跨域,一步到位
本文要实现的是:使用vue-cli搭建的项目在开发时配置跨域,上线后不做任何任何修改,接口也可以访问,前端跨域解决方案 production:产品 生产环境 development:开发 开发环境 1 ...
- Next.js 配置接口跨域代理转发
使用 create-next-app 创建的 Next.js 项目配置接口跨域代理转发需要用到 custom server 功能. 先安装好 express 和 http-proxy-middlewa ...
- NGINX: 配置跨域请求
说明: 内容全部来自 SegmentFault Developer Nginx 配置跨域请求 跨域请求失败, nginx 报错: 403 No 'Access-Control-Allow-Origin ...
随机推荐
- Mybatis学习笔记-第一个Mybatis程序
思路 搭建环境 搭建数据库(略) CREATE DDATABASE CREATE TABLE INSERT VALUES 新建项目 普通Maven项目 删除src文件夹 --> 建立父工程 导入 ...
- Android无障碍宝典-talkback
http://geek.csdn.net/news/detail/93269 http://geek.csdn.net/news/detail/135867
- JUC学习笔记(四)
JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html JUC学习笔记(二)https://www.cnblogs.com/lm66/p/1511 ...
- CVE-2018-12613总结
1.漏洞基础介绍 1.1漏洞背景 phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库.借由此We ...
- jdk、jre环境变量配置
1 jdk和jre的区别: (jdk:Java 开发工具包) (jre:Java 的运行环境) 只需这么记就可以了,想深入了解得自行查询相关资料 2 jdk是包含jre的,所以只需下载jdk. 官方网 ...
- Springboot通过拦截器拦截请求信息收集到日志
1.需求 最近在工作中遇到的一个需求,将请求中的客户端类型.操作系统类型.ip.port.请求方式.URI以及请求参数值收集到日志中,网上找资料说用拦截器拦截所有请求然后收集信息,于是就开始了操作: ...
- 接口自动化测试之httprunner初探
❝ 今天来介绍一个python的一个开源项目:httprunner,接口自动化工具.第一次输入,难免有不周到的地方,轻喷~ ❞ 介绍: HttpRunner是一个简单优雅但功能强大的 HTTP(S) ...
- Flink EOS如何防止外部系统乱入--两阶段提交源码
一.前言 根据维基百科的定义,两阶段提交(Two-phase Commit,简称2PC)是巨人们用来解决分布式系统架构下的所有节点在进行事务提交时保持一致性问题而设计的一种算法,也可称之为协议. 在F ...
- Ubuntu本地提权适配不同小版本内核(CVE-2017-16995)
朋友在执行的时候说有的会出现提权不成功,内核crash掉的现象.因为cred结构体的偏移量可能因为内核版本不同.内核编译选项不同而出现差异,作者给的exp偏移量是写死的,所以exp里面对应的偏移地址也 ...
- C51—模拟IIC总线实现EEPROM存取数据
a - 什么是IIC总线 -什么是EEPROM -IIC总线的通信格式 模块化设计注解 整体代码 - 什么是IIC总线 IIC总线是同步通信的一种特殊形式,具有接线口少.控制简单.器件封装形式小.通信 ...