最近个人网站 http://www.wxyweb.com 用到了代理服务获取新闻数据,需要配置nginx 服务代理才能够跨域访问站外资源,稍作总结如下:
一、nginx 背景介绍
Nginx (engine x) 是一个款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。其特点是占有内存少,并发能力强,这也是它在同类代理服务器脱颖而出的根本原因。
二、nginx 的特点
2.1 可以高并发连接
官方测试Nginx能够支撑5万并发连接,实际生产环境中可以支撑2~4万并发连接数。
原因,主要是Nginx使用了最新的epoll(Linux2.6内核)和kqueue(freeBSD)网路I/O模型,而Apache使用的是传统的Select模型,其比较稳定的Prefork模式为多进程模式,需要经常派生子进程,所以消耗的CPU等服务器资源,要比Nginx高很多。
2.2 内存消耗少
Nginx+PHP(FastCGI)服务器,在3万并发连接下,开启10个Nginx进程消耗150MB内存,15MB*10=150MB,开启的64个PHP-CGI进程消耗1280内存,20MB*64=1280MB,加上系统自身消耗的内存,总共消耗不到2GB的内存。
如果服务器的内存比较小,完全可以只开启25个PHP-CGI进程,这样PHP-CGI消耗的总内存数才500MB。
2.3 成本低廉
购买F5BIG-IP、NetScaler等硬件负载均衡交换机,需要十多万到几十万人民币,而Nginx为开源软件,采用的是2-clause BSD-like协议,可以免费试用,并且可用于商业用途。
BSD开源协议是一个给使用者很大自由的协议,协议指出可以自由使用、修改源代码、也可以将修改后的代码作为开源或专用软件再发布。
2.4 配置文件非常简单
网络和程序一样通俗易懂,即使,非专用系统管理员也能看懂。
2.5 支持Rewrite重写
能够根据域名、URL的不同,将http请求分到不同的后端服务器群组。
2.6 内置的健康检查功能
如果NginxProxy后端的某台Web服务器宕机了,不会影响前端的访问。
2.7 节省带宽
支持GZIP压缩,可以添加浏览器本地缓存的Header头。
2.8 稳定性高
用于反向代理,宕机的概率微乎其微。
2.9 支持热部署
Nginx支持热部署,它的自动特别容易,并且,几乎可以7天*24小时不间断的运行,即使,运行数个月也不需要重新启动,还能够在不间断服务的情况下,对软件版本进行升级。
三、什么是正向代理和反向代理
1.正向代理
有一个局域网,但是只有主机局域访问外部网络的权限,现在所有的机器都需要访问外部网络,通过将主机设置为代理服务器,让所有的机器通过主机可以访问外部网络,即称为正向代理
2.企业用途
正向代理模式一般会被用于企业局域网之中,让内网用户统一的通过Squid服务器访问互联网资源,不仅能够在一定程度上减少公网带宽开销,最主要的是还能做到网站内容的筛查限制,一旦内网用户访问的网站内容匹配到了禁止规则就会自动屏蔽网站,是非常不错的内容监管方案
3.反向代理
反向代理在互联网中的使用主要是实现负载均衡对用户是无感知的,不需要做任何配置。当你访问某个网站的时候, 反向代理服务器会从当前网站的所有服务器中选择一个空闲的服务器为你响应。此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址,主要用于均衡每台服务器的负载率。
4.区别
正向代理代理客户端,反向代理代理服务器。 (示意图如下)
四、实战
进入nginx 服务目录编辑配置文件 例如:cd /usr/local/nginx/nginx.conf
server {
listen 80; // 监听80端口号
server_name localhost; // 监听访问的域名
// 根据访问路径配置
location / {
root /data/www/myWeb/home
index index.html
}
location /api {
proxy_pass https://www.baidu.com/ // 把请求转发到 https://www.baidu.com
}
}
vue.config.js 配置文件配置本地代理
devServer: {
host: "localhost",
port: 8080, // 端口号
https: false,
open: false, //配置自动启动浏览器
hotOnly: true, // 热更新
proxy: { // 可配置多个跨域
"/api": {
target: "https://www.baidu.com",
changeOrigin: true,
ws: true, //websocket支持
secure: false,
pathRewrite: {
"^/api": ""
}
}
}
}