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 ( Time To First Byte ,首字节时间,WEB 性能优化重要指标)。这样唯一的问题是, Nginx 开始返回响应时,它无法知道将要传输的文件最终有多大,也就是无法给出 Content-Length 这个响应头部。

所以,在 HTTP1.0 中如果利用 Nginx 启用了 GZip ,是无法获得 Content-Length 的,这导致HTTP1.0中开启持久链接和使用 GZip 只能二选一,所以在这里 gzip_http_version 默认设置为 1.1 。

如上面的图,前面是众多的服务窗口,下面有很多用户需要服务,我们需要一个工具或策略来帮助我们将如此多的用户分配到每个窗口,来达到资源的充分利用以及更少的排队时间。

把前面的服务窗口想像成我们的后端服务器,而后面终端的人则是无数个客户端正在发起请求。负载均衡就是用来帮助我们将众多的客户端请求合理的分配到各个服务器,以达到服务端资源的充分利用和更少的请求时间。

Upstream指定后端服务器地址列表

在server中拦截响应请求,并将请求转发到Upstream中配置的服务器列表。

上面的配置只是指定了nginx需要转发的服务端列表,并没有指定分配策略。

轮询策略

默认情况下采用的策略,将所有客户端请求轮询分配给服务端。这种策略是可以正常工作的,但是如果其中某一台服务器压力太大,出现延迟,会影响所有分配在这台服务器下的用户。

最小连接数策略

将请求优先分配给压力较小的服务器,它可以平衡每个队列的长度,并避免向压力大的服务器添加更多的请求。

最快响应时间策略

依赖于NGINX Plus,优先分配给响应时间最短的服务器。

客户端ip绑定

来自同一个ip的请求永远只分配一台服务器,有效解决了动态网页存在的session共享问题。

匹配以 png|gif|jpg|jpeg 为结尾的请求,并将请求转发到本地路径, root 中指定的路径即nginx本地路径。同时也可以进行一些缓存的设置。

nginx的功能非常强大,还有很多需要探索,上面的一些配置都是公司配置的真实应用(精简过了),如果您有什么意见或者建议,欢迎在下方留言...




Nginx的反向代理跨域
2、Nginx反向代理解决跨域:nginx通过反向代理解决跨域也是利用了服务器请求服务器不受浏览器同源策略的限制实现的。3、使用Nginx反向代理:通过配置Nginx反向代理,来实现跨域请求。4、nginx是一个高性能的HTTP和反向代理web服务器,nginx用来解决跨域问题的原理与前端非正统解决方式的proxy的思路是一致的。5...

前端工程师电脑配置要求
web前端开发对笔记本电脑配置要求?web开发的话,开你选用那种开发工具,一般的5000元的电脑配置就足够了。毕竟电脑性能好点,开发调试也会流程一点,开发时心情也会好点了。nginx服务器配置在前端还是后端?nginx属于后端程序服务,所以配置应该是在后端 轻件工程专业电脑配置要求?配置要求:有条件最好选择...

如何搞定前端资源服务跨域问题之nginx篇
通过add_header命令为响应增加跨域头:add_header "Access-Control-Allow-Origin" "*";

Nginx:基本原理篇
处理请求是异步非阻塞的,而apache则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能。在Apache+PHP(prefork)模式下,如果PHP处理慢或者前端压力很大的情况下,很容易出现Apache进程数飙升,从而拒绝服务的现象。Nginx 常用功能 参考文章: http:\/\/tengine.taobao.org\/book\/chapter_02.html ...

前端如何部署nginx跨域
跨域基本上都是要后端来配合的,打比方说,我提供的server,只是供我自己域名下web应用来请求的,如果对方在自己的web应用里面调用我提供的api,给用户提供了很好的体验,但是负荷扔给了我的服务器,这是不合理的 所以,跨域很难通过前端来配置 那么就要说解决办法了 ①如果另一面也是自己的服务器,...

nginx部署站点前端默认资源在
nginx部署站点前端默认资源在Nginx的html文件夹中。根据查询相关信息显示,Nginx会根据文件的枚举顺序来检查,直到查找的文件存在,文件可以是相对路径也可以是绝对路径,绝对路径需要放在最后。

前端网站常规优化方案
1、减少请求次数 2、减小资源大小 3、提高响应和加载速度 4、优化资源加载时机 5、优化加载方式 1、合并、压缩、混淆html\/css\/js文件(webpack实现,减小资源大小)2、Nginx开启Gzip,进一步压缩资源(减小资源大小)3、图片资源使用CDN加速(提高加载速度)4、符合条件的图标做base64处理(减小资源大小)...

Nginx作为缓存服务
让我想起了一首歌空空如也:好奇的看了下目录下的文件内容:add_header Nging-Cache "$upstream_cache_status";当我们没有缓存的时候,我们可以看到应答会是MISS:现在nginx.conf中加入新的配置项:此时我们怒刷前端页面,会发现后端日志如下:Nginx的缓存服务就讲到这里,欢迎大家指正 ...

尝试用Nginx反向代理解决同时部署多个项目的问题
微信小程序要求正式环境的请求必须采用域名,并且是https服务,肯定是无法修改的,博客的前端项目虽然可以用80端口,但是浏览器会一直提示“不安全”,看起来也很不好。我的CA证书已经被我放在了和小程序服务在一起的 \/home 路径下,找到 \/etc\/nginx\/nginx.conf 文件,根据它的提示添加如下修改配置文件 ...

Python3+Gunicorn+Nginx 部署Flask项目
nginx 的作用就是弥补以上问题,首先作为前端服务器它可以处理一切静态文件请求,此时 gunicorn 作为后端服务器,nginx 将会把动态请求转发给后端服务器,因此我们可以起多个 gunicorn 进程,然后让 nginx 作均衡负载转发请求给多个 gunicorn 进程从而提升服务器处理效率与处理能力。最后,nginx 还可以配置很多...

壶关县15832971315: Nginx解决前端跨域问题 CORS跨域配置? -
向青清健: Nginx的CORS配置,网上太多这配置了,但大家更多的复制粘贴、转发,几乎都是类似下面这三两行: add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers X-Requested-With; add_header Access-Control-Allow-Methods GET,POST,OPTIONS;这样有用么?有用,我以前这样使用也正常过,但后来还是遇到问题了,发现有些项目请求就不成功,也遇到有些浏览器成功,有些浏览器不成功; 参考 Nginx解决前端跨域问题 linux部署配置nginx.

壶关县15832971315: nginx配置前端,需要几台什么样的服务器.什么样的系统,什么样的配置 -
向青清健: 两种前端架构:lvs -> nginx前端代理 -> squid缓存lvs -> squid前端缓存 -> nginx中层代理squid在前面的优点:Squid作纯代理比较稳当前端少一级代理,响应速度会快,出问题的可能性要小功能有限,不会常被调整容易为人接受,只是为了扩充功...

壶关县15832971315: 前端工程师怎么充分利用nginx,更有效的进行web开发 -
向青清健: 前端工程师,也叫Web前端开发工程师.他是随着web发展,细分出来的行业.Web前端开发技术主要包括三个要素:HTML、CSS和JavaScript!它要求前端开发工程师不仅要掌握基本的Web前端开发技术,网站性能优化、SEO和服务器端的...

壶关县15832971315: nginx 速度控制 怎么实现 -
向青清健: Nginx作为负载均衡前端 配置可以参照apache httpd server 至于tomcat session共享 是群集的问题 tomcat官方网站文档写的很明白了 http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html 直接copy上面的配置到service.xml就可以 引文tomcat...

壶关县15832971315: nginx 不同网段站点配置
向青清健: 所有的都用 d加速么 、、把域名都解析到 d就做虚拟主机就好了

壶关县15832971315: linux下怎么配置nginx+tomcat和apache+php的两个网站共存 -
向青清健: nginx,tomcat apache 配制时先用不同的端口,如nginx:80,tomcat:8080,apache:8000,这样就可以了,哪个在前端就把哪个设置成80就行了.到于php,随便整合到哪个里面都行,看你喜欢了.

壶关县15832971315: nginx配置文件重写url:去掉地址栏参数值为空的参数的正则怎么写? -
向青清健: URL重写有利于网站首选域的确定,对于同一资源页面多条路径的301重定向有助于URL权重的集中 Nginx URL重写(rewrite)介绍 和apache等web服务软件一样,rewrite的组要功能是实现RUL地址的重定向.Nginx的rewrite功能需要PCRE软件...

壶关县15832971315: apache与nginx有什么区别,各自的优势劣势在哪 -
向青清健: 1、nginx相对于apache的优点: 轻量级,同样起web 服务,比apache占用更少的内存及资源 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能 高度模块化的设计,编写模块相对简...

壶关县15832971315: 求教如何写Nginx配置文件,实现url重写? -
向青清健: 在abc的主机上设置这个rewrite,假设你的id都是数字这个是rewrite的方案,最后的效果,网址还是member/index.php?id=xxx rewrite ^([^\.]*)/member/index.php?id=([0-9]+)$ http://i.abc.com/$2 last;你如果最后想效果是 abc.com/xxx的话,只能在php上面作判断,然后用php的header作跳转.

壶关县15832971315: Java都需要那些技术
向青清健: 想要成为一名优秀的Java程序员,不能像无头苍蝇一样乱转,一些关键技术的掌握是非常重要的,比如说老师分享的这九点:一、熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的JavaAPI,包括集合框架、多线程(...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网