今天给各位分享Nginx 应用场景指南: 5 个实用的解决方案的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
图片
2、在nginx.conf中配置服务器;
用户mengday员工;http { 服务器{ 监听80;服务器名称本地主机; client_max_body_size 1024M; # 默认位置location/{ root /usr/local/var/www/html;索引index.htmlindex.htm; } }}3.接入测试;
http://localhost/指向/usr/local/var/www/index.html,index.html是nginx安装时自带的html。 http://localhost/test.html 指向/usr/local/var/www/html/test.html。注意:如果访问图片会出现403 Forbidden 错误。可能是nginx.conf第一行用户配置不正确。默认为#user nobody;它被评论了。 Linux下,改为root用户; macos下,修改为用户用户名所属组;然后重新加载配置。文件或重新启动并重试。用户名可以通过who am i命令查看。
4、指令简介;
服务器:用于定义服务。 http 中可以有多个服务器块。 Listen : 指定服务器侦听请求的IP 地址和端口。如果省略地址,服务器将侦听所有地址。如果省略端口,则使用标准端口。 server_name : 服务名称,用于配置域名。 location :用于配置映射路径uri对应的配置。一台服务器中可以有多个位置。该位置后跟一个uri,它可以是正则表达式。/表示匹配任意路径。当客户端访问的路径遇到这个uri 中的location 块中的代码就会被执行。 root : 根路径,访问http://localhost/test.html时,“/test.html”会匹配“/”uri,发现root为/usr/local/var/www/html,即访问资源的物理地址由用户=root + uri=/usr/local/var/www/html + /test.html=/usr/local/var/www/html/test.html。 index : 设置主页。当只访问server_name而后面没有任何路径时,将直接使用index命令,无需root。如果访问路径中没有指定具体文件,则返回index设置的资源。如果访问http://localhost/html/,则默认返回index.html。 5.定位uri正则表达式;
.匹配除换行符之外的任意字符?重复0次或1次+:重复1次或多次*:重复0次或多次\d:匹配数字^:匹配字符串开头$:匹配字符串结尾{n}: 重复n次{n,}: 重复n次及以上[c]: 匹配单个字符c[a-z]: 匹配任意一个小写字母a-z (a|b|c) : 竖线表示匹配任何情况。每种情况之间用竖线分隔,通常用括号括起来,匹配与a字符、b字符或c字符匹配的字符串\反斜杠:用于转义特殊字符括号()之间匹配的内容可以参考后面的内容$1,$2代表第二个前一个()中的内容。正则表达式中令人困惑的是\转义特殊字符。
二、静态服务器
公司中经常会遇到静态服务器。他们通常提供上传功能。如果其他应用程序需要静态资源,可以从静态服务器获取。 1、在/usr/local/var/www下创建images和img目录,并在每个目录下放置一个test.jpg;
图片
http { 服务器{ 监听80;服务器名称本地主机;设置$doc_root /usr/local/var/www; #默认位置location/{ root /usr/local/var/www/html;索引index.htmlindex.htm; } 位置^~ /images/{ root $doc_root; } 位置~* \.(gif|jpg|jpeg|png|bmp|ico|swf|css|js)$ { root $doc_root/img; } }} 自定义变量用法设置指令,语法设置变量名值;引用使用变量名值;引用使用变量名; doc_root 变量在此处自定义。
映射静态服务器位置通常有两种方法:
使用路径,例如/images/。一般图片都会放在某个图片目录下。使用.jpg、png 等后缀以及其他后缀匹配模式。访问http://localhost/test.jpg将被映射到$doc_root/img。
访问http://localhost/images/test.jpg时,同一个路径满足多个位置时,优先级高的位置会先匹配。由于^~的优先级大于~,因此将使用/images/对应的位置。
常见的位置路径映射路径包括以下几种:
=执行普通字符的精确匹配。这是完全匹配的。 ^~ 前缀匹配。如果匹配成功,则不会再匹配其他位置。 ~ 表示进行正则匹配,区分大小写。 ~* 表示进行正则匹配,不区分大小写。 /xxx/一般字符串路径匹配。/万能匹配,任何请求都会被匹配。
location优先级
当一个路径匹配多个位置时,能够匹配哪个位置是有优先顺序的,优先顺序与位置值的表达式类型有关,与配置文件中的顺序无关。相同类型和较长字符串的表达式将首先匹配。
以下是按优先级顺序排列的说明:
等号类型(=) 具有最高优先级。一旦匹配成功,就不再找到匹配项,搜索就会停止。 ^~ 类型表达式,不是正则表达式。一旦匹配成功,就不再找到匹配项,搜索就会停止。正则表达式类型(~ ~*) 具有第二高优先级。如果有多个位置正则表达式可以匹配,则将使用最长的正则表达式。通用字符串匹配类型。按前缀匹配。/通用匹配。如果没有找到匹配,则匹配通用优先搜索问题:不同类型的位置映射决定是否继续向下搜索:
等号类型、^~类型:一旦匹配到,则停止搜索,不再匹配其他位置;正则表达式类型(~~*),正则字符串匹配类型/xxx/:匹配后会继续。搜索其他位置,直到找到优先级最高的位置,或者找到第一个情况,停止搜索;位置优先级从高到低:
(location=) (location完整路径) (location^~路径) (location~,~*正则序列) (location部分起始路径) (/)
location=/{ # 完全匹配/,主机名后面不能有字符串/[配置A]}location/{ # 匹配所有以/开头的请求。 # 但如果同类型有更长的表达式,则选择更长的表达式。 # 如果存在可以匹配的正则表达式,则先匹配该正则表达式。 [ 配置B ]}location /documents/{ # 匹配所有以/documents/开头的请求。匹配后,继续搜索。 # 但如果同类型有更长的表达式,则选择更长的表达式。 # 如果存在可以匹配的正则表达式,则先匹配该正则表达式。 [ 配置C ]}location ^~ /images/{ # 匹配所有以/images/开头的表达式。如果匹配成功,则停止匹配并搜索。 # 因此,即使有匹配的正则表达式位置,也不会使用[配置D ]}location ~* \.(gif|jpg|jpeg)$ { # 匹配所有以gif jpg jpeg 结尾的请求。 # 但以/images/开头的请求将使用配置D,其优先级更高[配置E]}location /images/{ # 如果字符匹配/images/,则继续搜索[配置F] }location=/test .htm { 根/usr/local/var/www/htm; index index.htm;} 注意:location的优先级与location配置的位置无关。
三、反向代理
简单来说就是外网无法直接访问真实服务器,所以需要代理服务器。代理服务器可以被外网访问,并且与真实服务器处于同一网络环境。当然,也可能是同一个服务器。只是服务器和端口不同。
反向代理是通过proxy_pass 指令实现的。
使用端口号8081 启动Java Web 项目。
服务器{听80;服务器名称本地主机;位置/{ proxy_pass http://localhost:8081; proxy_set_header 主机$host:$server_port; # 设置用户ip地址proxy_set_header http_503; }}当我们访问localhost时,相当于访问localhost:8081
四、负载均衡
负载均衡也是Nginx常用的功能。负载均衡是指将执行分配给多个运行单元,如Web服务器、FTP服务器、企业关键应用服务器和其他关键任务服务器等,共同完成工作任务。
简单来说,当有两台或两台以上服务器时,请求按照规则随机分发到指定的服务器上进行处理。负载均衡配置一般需要同时配置反向代理,通过反向代理跳转到负载均衡。 Nginx 目前支持3 种内置的负载均衡策略,以及2 种常用的第三方策略。
负载均衡是通过上游指令实现的。
1. RR(round robin :轮询 默认)
每个请求按照时间顺序依次分配到不同的后端服务器,也就是说第一个请求分配到第一台服务器,第二个请求分配到第二台服务器。如果只有两台服务器,则第三个请求将继续分配给第一个平台,如此继续轮询。即服务器收到请求的比例为1:1,如果后端服务器宕机,可以自动排除。轮询是默认配置,不需要太多配置
同一个项目分别使用端口8081和8082启动项目。
上游web_servers { 服务器localhost:8081;服务器localhost:8082;}服务器{ 监听80;服务器名称本地主机; #access_log 日志/host.access.log main;位置/{ proxy_pass http://web_servers; # 标头主机proxy_set_header 主机$host:$server_port;必须指定访问地址仍然可以得到响应http://localhost/api/user/login?username=zhangsanpassword=111111,这个方法是轮询
2. 权重
指定轮询比率。权重与访问比例成正比。即服务器接收请求的比例就是各自配置的权重的比例。当后端服务器性能不均匀时使用。例如,如果服务器性能较差,它将收到较少的请求。如果服务器性能更好,处理更多的请求。
上游测试{ 服务器localhost:8081 权重=1;服务器localhost:8082权重=3; server localhost:8083 Weight=4 backup;} 例子是4个请求中只有1个请求分配到8081,另外3个请求分配到8082。backup指的是热备份。只有当8081和8082都down时,才会使用8083。
3. ip_hash
以上两种方法都存在一个问题,就是当下一个请求到来时,该请求可能会被分发到另一台服务器上。当我们的程序不是无状态的时候(session是用来保存数据的),那么就有一个大问题了。例如,如果登录信息保存在会话中,那么当您跳转到其他服务器时,需要重新登录。所以很多时候我们需要一个客户只访问一台服务器,所以我们需要使用iphash。iphash的每个请求都是根据访问IP的哈希结果来分配的,这样每个访问者就固定访问一个后端服务器,这样可以解决会话问题。
上游测试{ ip_hash;服务器本地主机:8080; server localhost:8081;}
4. fair(第三方)
根据后端服务器的响应时间分配请求,响应时间短的优先。此配置是为了更快地响应用户。
上游后端{公平;服务器本地主机:8080; server localhost:8081;}
5. url_hash(第三方)
根据访问URL的哈希结果分发请求,使每个URL都定向到同一个后端服务器。当后端服务器有缓存时更有效。向上游添加哈希语句。服务器语句中不能写入体重等其他参数。 hash_method是使用的哈希算法。
上游后端{ hash $request_uri; hash_method crc32;服务器本地主机:8080; server localhost:8081;} 以上五种负载均衡适合不同的情况使用,可以根据实际情况选择使用哪种策略模式,但fair和url_hash需要安装第三方模块才能使用。
五、动静分离
动静态资源分离是让动态网站中的动态网页按照一定的规则区分恒定的资源和频繁变化的资源。动静态资源分离后,我们可以根据静态资源的特点来制作。缓存操作,这就是网站静态处理的核心思想。
上游web_servers { 服务器localhost:8081;服务器localhost:8082;}服务器{ 监听80;服务器名称本地主机;设置$doc_root /usr/local/var/www;位置~* \.(gif|jpg|jpeg|png|bmp|ico|swf| css|js)$ { root $doc_root/img; } 位置/{ proxy_pass http://web_servers; # 标头主机proxy_set_header 主机$host:$server_port; } error_page 500 502 503 504 /50x.html;位置=/50x.html { 根$doc_root; } }
六、其他
1.return指令
返回http状态代码,可选的第二个参数可以是重定向URL。
location /permanently/moved/url { return 301 http://www.example.com/moved/here;}
2. rewrite指令
重写URI请求rewrite,使用rewrite指令在请求处理过程中多次修改请求URI,该指令有一个可选参数和两个必需的参数。
第一个(必需)参数是请求URI 必须匹配的正则表达式。
第二个参数是用于替换匹配URI 的URI。
可选的第三个参数是一个标志,可以停止处理进一步的重写指令或发送重定向(代码301 或302)。
location /users/{ rewrite ^/users/(.*)$ /show?user=$1 break;}
3. error_page指令
使用error_page 指令,您可以配置NGINX 返回自定义页面和错误代码,替换中的其他错误代码响应,或将浏览器重定向到不同的URI。在以下示例中,error_page 指令指定返回404 页面错误代码的页面(/404.html)。
error_page 404 /404.html;
4. 日志
访问日志:需要开启压缩gzip on;否则不会生成日志文件,并且log_format和access_log注释将打开。
log_format main '$remote_addr - $remote_user [$time_local] '$request' ' '$status $body_bytes_sent '$http_referer' ' ''$http_user_agent' '$http_x_forwarded_for'';access_log /usr/local/etc/nginx/logs/host.access.log main;gzip on;
5. deny 指令
# 禁止访问目录位置~* \.(txt|doc)${ root $doc_root; Deny all;}
6. 内置变量
可以在nginx配置文件中使用内置变量以美元符号$开头,也有人称之为全局变量。其中,一些预定义变量的值是可以改变的。
大家好,今天小编来为大家解答Nginx 应用场景指南: 5 个实用的解决方案这个问题,很多人还不知道,现在让我们一起来看看吧!
本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.iotsj.com//kuaixun/6497.html
用户评论
终于找到解决nginx使用场景问题的文章了!
有10位网友表示赞同!
之前一直想学习nginx,不知道什么地方可以用到,这篇文章太棒了!
有9位网友表示赞同!
分享个学习资料!这个网站的文章质量真的高。
有5位网友表示赞同!
工作用到nginx,但还不算熟练,希望能从这篇解读中学到实用技巧。
有11位网友表示赞同!
五大人设?感觉好多场景都能用上呢!期待详细解析!
有10位网友表示赞同!
文章标题很直接了当,我喜欢这种实用的分享方式。
有19位网友表示赞同!
看了标题就让人觉得这篇文章很有价值,我马上来看看详细内容。
有16位网友表示赞同!
nginx真万能啊!感觉几乎任何网站都能用到它。
有19位网友表示赞同!
51CTO的网站文章都很好看,很专业!
有12位网友表示赞同!
做前端的小伙伴应该经常用到nginx吧?赶紧去学习一下这五种应用场景!
有20位网友表示赞同!
刚接触web服务,一直在查阅nginx相关的资料,这篇笔记看起来蛮适合我。
有16位网友表示赞同!
之前只用过nginx作为代理服务器,没想到还有这么多其他的用法!
有20位网友表示赞同!
要学会优化nginx,理解它的应用场景很重要啊!这篇文章很不错。
有15位网友表示赞同!
学习编程过程中难免会用到nginx,这篇解读正好解决了我的困惑!
有10位网友表示赞同!
分享一下,最近刚学web服务开发,发现nginx这个工具特别有用!
有13位网友表示赞同!
网站建设、服务器管理,nginx都是必备的技能!
有7位网友表示赞同!
文章提到的 Nginx 五大应用场景都非常实用,值得学习!
有18位网友表示赞同!
这篇文章的解析很详细,能帮助我更好的理解 nginx 的使用方式!
有19位网友表示赞同!
51CTO.COM一直都是一个好网站,提供很多有价值的的技术资讯!
有16位网友表示赞同!