2024-11-24 09:07:00
代理单个前端时,以下eg1、eg2代理的是同一个文件,不用的是url
细心地读者发现还有第三个代理eg3、它的不同在于19行,是以alias开头的代理。那么他有什么不同呢,按照上面代理文件的路径,test1与test0是一样的,也就是说eg1和eg3是一样的代理。
简单的分析出:
root:root+location为实际文件路径
alias:镇告alias为实际文件路径(ps:必须是以/结尾,因为御搭明代理的东西在此目录下)
当代理多个静态文件时,容易发生404问题。
若把单个配置成location/时,又没有问题,那么你需要参考以下配置。
ps:一般根路径用root,其他为alias代理。
有关^~请看FAQ
12行最后的/api/;分号前面的/问题请看FAQ
因为微信公众号的回调只能调用https,有些时候可能会用到。
这里需要自己了解一下https,简而言之需要证书,针对某一个url,这里展示一个代理示例
简单测试了一下,若是仅仅前枝消端代理,是没有影响的,无论是root还是alias
那区别是什么呢,当代理的内容为地址时,
url尾部的/表示目录,没有/表示文件,是否需要加,根据情况选择
使用^~当做前缀,正则匹配然后代理
关于nginx你可能不知道的秘密----nginx地址重写以及错误页面配置Rewrite对称URLRewrite,即URL重写,就是把传入Web的请求重定向到其他URL的过程。
rewrite**指令根据表达式来重定向URI,或者修改字符串。可以应用于server,location,if环境下每行rewrite指令稿拦最后跟一个flag标记,支持的flag标记有:
redirect和permanent区别则是返回的不同方式的重定向,对于客户端来说一般状态下是没有区别的。余首而对于搜索引擎,相对来说301的重定向更加友好,如果我们把一个地址采用301跳转方式跳转的话,搜索引擎会把老地址的相关信息带到新地址,同时在搜索引擎索引库中彻底废弃掉原先的老地址。使用302重定向时,搜索引擎(特别是google)有时会查看跳转前后哪个网址更直观,然后决定显示哪个,如果它觉的跳转前的URL更好的话,也许地址栏不会更改。
首先我们需要在windows上进行本地解析,打开C:\Windows\System32\drivers\etc下面的hosts文件并添加
192.168.13.128
访问
nginx错误页面包括404403500502503504等页面,只需键毁胡要在server中增加以下配置即可:
注意:
/usr/local/nginx/html/路径下必须有404.html这个文件!!!
但是404.html上如果引用其他文件的png或css就会有问题,显示不出来,因为其他文件的访问也要做配置;为了简单,可以将css嵌入文件中,图片用base编码嵌入;如下:
访问(ip地址/404.html)
nginx部署前端纯页面1.进入nginx配置文件vim.../nginx-1.9.12/conf/nginx.conf。
如上图所示:第一个红框中的内容就是应用服务器的地址;第二个红框中的内容就是前端包的位置。
此时,配置文世明件已经准备完毕。这个包和端口可以存在多个。
2.进入.../nginx-1.9.12/sbin找到nginx的启动程序。
nginx-c../nginx-1.9.12/conf/nginx.conf??启动nginx程序,并指定配置文件。
3.如果要替换包,则直接替换就行,nginx为热加载自动更新的。但是以防陪粗有缓存之类的存在,可以使用nginx-sreload命令进行重载一次。
追加一:
如果前端包的构造如下图
则location配置依然如下图
但是访问地址则需要指定到具体的html文件上。。
绑定:
成功:
失败:
追加二:
同一个端口部署多个页面:
一个server下,多个location。
location的作用就是是否有后缀,并且这个后缀会去拼接root后的地址。
比如第二个location/sis/。
则在访问127.0.0.1:8080/sis时,会去自动寻找/apps/svr/nginx-1.9.12/pagefile/0921/sis这个包。?(Ps:location后的地址一定要用/关闭,比如location/sis/,不然访问127.0.0.1:8080/sis时,会报错,只有用127.0.0.1:8080/sis/才行。)
这样就部署好了一个端口支持多个页面芦返镇。
nginx配置前端,需要几台什么样的服务器。什么样的系统,什么样的配置两种前端架构:
lvs-nginx前端代理-squid缓存
lvs-squid前端缓存-nginx中层代理
squid在前面的优点:
Squid作纯代理比较稳当
前端少一级代理,响应速度会快,出问题的可能性要小
功能有限,不会常被调整
容易为人接受,只是为了扩充功能而增加中层代理
一般的配置简便,比如增加一个二级域名,只需配置一个指向。
增加的nginx可扩展功能,增加对应用服务的负载均衡告缓等。
squid在前面的缺点:
squid支持的负载均衡配置复杂
容灾问题
更新缓存要遍历所有机器
squid只支持单cpu,所以浪费cpu
nginx在前面的优点:
分流、负载均衡功能强大,可以细致定义
可精细定制access_log
nginx的错告指误日志更详细
可让squid只缓存无压缩版本,由nginx压缩,这样可优化squid缓存容量
nginx可分担袜友模部分无实时性要求的缓存
nginx在前面的优点:
nginx目前还有部分bug。
功能强,所以可能经常被调整
nginx代理用的短链接方式
单机上安装nginx+squid的cpu消耗比纯squid和纯nginx之和要大一倍,但也不算高
容易遭到质疑,不易被接受。
nginx如何配置静态页面
首先nginx安装好之后的缺省配置文件:nginx/conf/nginx.conf
这里定义的root地址是相对于nginx的根路径的;那么当用户通过浏览器访问根地址:;hostname:port时,nginx试图返回的页面就是:nginx/html/index.html。
当然这里root也可以写全路径,例如/home/username/tools/nginx/html,效果是一样的。
这里我们要讨论如何把一个静态页面配置到nginx里面。
假设静态页面内容放在文件夹/app/testapp/www下面(同时假设/app/testapp/www/index.html也存在),我们如何配置nginx使得;hostname:port/做握乱testapp能够访问到这些静态页面内容呢。
结果:404NotFound
查看nginx日志(nginx/logs/error.log):
原来nginx试图访问的文件路径是:/app/testapp/www/testapp,这个路径是”root“的内容再拼上location的值组成的;那我们给修改location和root的值:纯档
然后通过地址;hostname:port/www就可以访问了;但是这里location必须用”www“不能用”皮喊testapp“,这就非常不可接受了,解决的办法可以是修改静态页面的地址,再加一层testapp路径,例如:"/app/testapp/www/testapp",然后再配置:
这样是可以的。另一个方法是采用alias取代root。
保留今天页面的地址"/app/testapp/www",配置nginx的配置文件:
关于alias和root的区别,请查阅nginx文档或者自行google,这里不再重复贴了。
nginx前端常用配置nginx现在几乎是众多大型网站的必用技术,大多数情况下,我们不需要亲自去配置它,但是了解它在应用程序中所担任的角色,以及如何解决这些问题是非常必要的。
下面我将从nginx在企业中的真实应用来解释nginx在应用程序中起到的作用。
为了便于理解,首先先来了解一下一些基础知识,nginx是一个高性能的反向代理服务器那么什么是反向代理呢?
代理是在服务器和客户端之间假设的一层服务器,代理将接收客户端的请求并将它转发给服务器,然后将服务端的响应转发给客户端。
不管是正向代理还是反向代理,实现的都是上面的功能。
正向代理是为我们服务的,即为客户端拆逗雀服务的,客户端可以根据正向代理访问到它本身无法访问到的服务器资源。
正向代理对我们是透明的,对服务端是非透明的,即旅早服务端并不知道自己收到的是来自代理的访问还是来自真实客户端的访问。
反向代理是为服务端服务的,反向代理可以帮助服务器接收来自客户端的请求,帮助服务器做请求转发,负载均衡等。
反向代理对服务端是透明的,对我们是非透明的,即我们并不知道自己访问的是代理服务器,而服务器知道反向代理在为他服务。
下面是一个nginx配置文件的基本结构:
下面是nginx一些配置中常用的内置全局变量,你可以在配置的任何位置使用它们。
|变量名|功能||------|------||$host|请求信息中的Host,如果请求中没有Host行,则等于设置的服务器名||$request_method|客户端请求类型,如GET、POST|$remote_addr|客户端的IP地址||$args|请求中的参数||$content_length|请求头中的Content-length字段||$http_user_agent|客户端agent信息||$http_cookie|客户端cookie信息||$remote_addr|客户端的IP地址||$remote_port|客户端的端口||$server_protocol|请求使用的协议,如HTTP/1.0、·HTTP/1.1||server_name|服务器名称||$server_port`|服务器的端口号|
先追本溯源以下,跨域究竟是怎么回事。
同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。通常不允许不同源间的读操作。
如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有相同的源。
例如:
现在我在fe.server.com对dev.server.com发起请求一定会出现跨域。
现在我们只需要启动一个nginx服务器,将server_name设置为fe.server.com,然后设置相应的location以拦截前端需要跨域的请求,最后将请求代理回dev.server.com。如下面的配置:
这样可以完美绕过浏览器的同源策略:fe.server.com访问nginx的fe.server.com属于同源访问,而nginx对服务端转发的请求不会触发浏览器的同源策略。
根据状态码过滤
根据URL名称过滤,精准匹配URL,不匹配的URL全部重定向到主页。
根据请求类型过滤。
GZIP是规定的三种标指厅准HTTP压缩格式之一。目前绝大多数的网站都在使用GZIP传输HTML、CSS、JavaScript等资源文件。
对于文本文件,GZip的效果非常明显,开启后传输所需流量大约会降至1/4~1/3。
并不是每个浏览器都支持gzip的,如何知道客户端是否支持gzip呢,请求头中的Accept-Encoding来标识对压缩的支持。
启用gzip同时需要客户端和服务端的支持,如果客户端支持gzip的解析,那么只要服务端能够返回gzip的文件就可以启用gzip了,我们可以通过nginx的配置来让服务端支持gzip。下面的respone中content-encoding:gzip,指服务端开启了gzip的压缩方式。
这里为什么默认版本不是1.0呢?
HTTP运行在TCP连接之上,自然也有着跟TCP一样的三次握手、慢启动等特性。
启用持久连接情况下,服务器发出响应后让TCP连接继续打开着。同一对客户/服务器之间的后续请求和响应可以通过这个连接发送。
为了尽可能的提高HTTP性能,使用持久连接就显得尤为重要了。
HTTP/1.1默认支持TCP持久连接,HTTP/1.0也可以通过显式指定Connection:keep-alive来启用持久连接。对于TCP持久连接上的HTTP报文,客户端需要一种机制来准确判断结束位置,而在HTTP/1.0中,这种机制只有Content-Length。而在HTTP/1.1中新增的Transfer-Encoding:chunked所对应的分块传输机制可以完美解决这类问题。
nginx同样有着配置chunked的属性chunked_transfer_encoding,这个属性是默认开启的。
Nginx在启用了GZip的情况下,不会等文件GZip完成再返回响应,而是边压缩边响应,这样可以显著提高TTFB(TimeToFirstByte,首字节时间,WEB性能优化重要指标)。这样唯一的问题是,Nginx开始返回响应时,它无法知道将要传输的文件最终有多大,也就是无法给出Content-Length这个响应头部。
所以,在HTTP1.0中如果利用Nginx启用了GZip,是无法获得Content-Length的,这导致HTTP1.0中开启持久链接和使用GZip只能二选一,所以在这里gzip_http_version默认设置为1.1。
如上面的图,前面是众多的服务窗口,下面有很多用户需要服务,我们需要一个工具或策略来帮助我们将如此多的用户分配到每个窗口,来达到资源的充分利用以及更少的排队时间。
把前面的服务窗口想像成我们的后端服务器,而后面终端的人则是无数个客户端正在发起请求。负载均衡就是用来帮助我们将众多的客户端请求合理的分配到各个服务器,以达到服务端资源的充分利用和更少的请求时间。
Upstream指定后端服务器地址列表
在server中拦截响应请求,并将请求转发到Upstream中配置的服务器列表。
上面的配置只是指定了nginx需要转发的服务端列表,并没有指定分配策略。
轮询策略
默认情况下采用的策略,将所有客户端请求轮询分配给服务端。这种策略是可以正常工作的,但是如果其中某一台服务器压力太大,出现延迟,会影响所有分配在这台服务器下的用户。
最小连接数策略
将请求优先分配给压力较小的服务器,它可以平衡每个队列的长度,并避免向压力大的服务器添加更多的请求。
最快响应时间策略
依赖于NGINXPlus,优先分配给响应时间最短的服务器。
客户端ip绑定
来自同一个ip的请求永远只分配一台服务器,有效解决了动态网页存在的session共享问题。
匹配以png|gif|jpg|jpeg为结尾的请求,并将请求转发到本地路径,root中指定的路径即nginx本地路径。同时也可以进行一些缓存的设置。
nginx的功能非常强大,还有很多需要探索,上面的一些配置都是公司配置的真实应用(精简过了),如果您有什么意见或者建议,欢迎在下方留言...